<?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>164454</bug_id>
          
          <creation_ts>2016-11-05 11:29:35 -0700</creation_ts>
          <short_desc>The GC should be optionally concurrent and disabled by default</short_desc>
          <delta_ts>2016-11-15 21:21:16 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1248521</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 11:29:35 -0700</bug_when>
    <thetext>We&apos;re at the point where we can create an option to run the GC concurrently and make it default to false.

This bug will start with the patch of https://bugs.webkit.org/show_bug.cgi?id=163734; I may just dup that to this and land a combined patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248524</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 11:40:52 -0700</bug_when>
    <thetext>There are two things that definitely need to get done for this to be correct:

1) Separate the SlotVisitor used by the mutator&apos;s write barrier from the SlotVisitor used by the collector thread.  It&apos;s not super clear if the write barrier should even use a SlotVisitor, but whatever - the MarkStackArray probably has everything we need to efficiently transfer the entire contents of the mutator SlotVisitor into the collector SlotVisitor.

2) We need to stopAllocating/resumeAllocating.  It&apos;s tempting to think that this should be done by the mutator, but that&apos;s actually just complicating things.  It should be the collector&apos;s responsibility, and I think that these methods should be called from stopTheWorld/resumeTheWorld.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248526</commentid>
    <comment_count>2</comment_count>
      <attachid>294001</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 12:05:06 -0700</bug_when>
    <thetext>Created attachment 294001
something

If I did everything right for the past year then this patch will basically just work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248539</commentid>
    <comment_count>3</comment_count>
      <attachid>294004</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 14:05:14 -0700</bug_when>
    <thetext>Created attachment 294004
it actually sort of did some things

It started a concurrent eden collection, then the fixpoint went off the rails and we bloated memory to 500MB.  Then it did another GC and crashed.

That&apos;s a pretty good start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248554</commentid>
    <comment_count>4</comment_count>
      <attachid>294007</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 15:33:56 -0700</bug_when>
    <thetext>Created attachment 294007
it sort of works

This patch is pretty broken, but it&apos;s doing concurrent collections in Octane/splay.  It crashes eventually of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248559</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-05 15:45:21 -0700</bug_when>
    <thetext>Here&apos;s a run of splay, until the point where it gets itself into an infinite loop because the GC corrupted the heap so bad.

The benchmark is modified to print the time it takes to run a tick.  That&apos;s what the lines like &quot;0.8380413055419922 ms.&quot; say: they mean that a tick took 0.8380413055419922 ms.

When the GC does a stop-the-world increment, it uses its [GC: blah blah]&quot; logging syntax.  A GC cycle will require multiple increments if concurrent GC is enabled.  Each GC increment reports how long it took.  The last increment also reports the total cycle time.  Between increments of an active GC cycle (so before something like [GC: 71418 kb =&gt; FullCollection, 0.037991 ms...] and something like [Increment: 72558 kb, 0.888023 ms, cycle 15.558143 ms]), the application and collector are running concurrently.

From the log, it&apos;s pretty clear that after the second collection, things go very badly wrong - on the third GC the collector thinks that the heap is basically empty.  That&apos;s OK, I suspect I&apos;ll be spending the next couple of weeks fixing all sorts of surprises.

But anyway, it&apos;s pretty cool to see that our GC increments are less than 1ms in most cases.

[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js --logGC=true --useConcurrentGC=true
[GC: 33504 kb =&gt; EdenCollection, 0.279337 ms...]
[Increment: 0.103959 ms...]
[Increment: 0.479143 ms...]
[Increment: 0.226833 ms...]
[Increment: 0.257257 ms...]
[Increment: 0.372514 ms...]
[Increment: 0.311635 ms...]
[Increment: 37545 kb, 0.248094 ms, cycle 11.331259 ms]
0.8380413055419922 ms.
0.6349086761474609 ms.
0.5240440368652344 ms.
0.47898292541503906 ms.
0.5850791931152344 ms.
0.6089210510253906 ms.
0.49495697021484375 ms.
0.5421638488769531 ms.
0.4799365997314453 ms.
0.5300045013427734 ms.
0.6458759307861328 ms.
0.5328655242919922 ms.
0.5369186401367188 ms.
0.6768703460693359 ms.
[GC: 71418 kb =&gt; FullCollection, 0.037991 ms...]
0.7328987121582031 ms.
0.6759166717529297 ms.
0.6589889526367188 ms.
0.7581710815429688 ms.
0.7989406585693359 ms.
[Increment: 0.091861 ms...]
1.1920928955078125 ms.
1.2500286102294922 ms.
3.584146499633789 ms.
0.7319450378417969 ms.
0.8029937744140625 ms.
0.7231235504150391 ms.
0.7059574127197266 ms.
[Increment: 72558 kb, 0.888023 ms, cycle 15.558143 ms]
3.4210681915283203 ms.
0.35309791564941406 ms.
0.3120899200439453 ms.
0.3139972686767578 ms.
0.3190040588378906 ms.
0.30994415283203125 ms.
0.2989768981933594 ms.
0.3390312194824219 ms.
0.3509521484375 ms.
0.5199909210205078 ms.
0.5590915679931641 ms.
0.43702125549316406 ms.
0.4699230194091797 ms.
0.5080699920654297 ms.
0.4429817199707031 ms.
0.4639625549316406 ms.
0.4620552062988281 ms.
0.5729198455810547 ms.
0.4551410675048828 ms.
0.4451274871826172 ms.
0.5478858947753906 ms.
0.4329681396484375 ms.
0.47707557678222656 ms.
0.5609989166259766 ms.
0.5578994750976562 ms.
0.47898292541503906 ms.
0.4658699035644531 ms.
0.5559921264648438 ms.
0.5049705505371094 ms.
0.4620552062988281 ms.
0.45490264892578125 ms.
0.5509853363037109 ms.
0.4839897155761719 ms.
0.4699230194091797 ms.
0.6778240203857422 ms.
0.7231235504150391 ms.
0.9000301361083984 ms.
0.5950927734375 ms.
0.48995018005371094 ms.
0.4761219024658203 ms.
0.6010532379150391 ms.
0.5438327789306641 ms.
0.5009174346923828 ms.
0.4909038543701172 ms.
1.3740062713623047 ms.
0.7390975952148438 ms.
0.9779930114746094 ms.
0.7410049438476562 ms.
0.6549358367919922 ms.
0.49686431884765625 ms.
0.5080699920654297 ms.
0.5168914794921875 ms.
0.42891502380371094 ms.
0.4990100860595703 ms.
0.45800209045410156 ms.
0.41794776916503906 ms.
0.5109310150146484 ms.
0.9129047393798828 ms.
0.5178451538085938 ms.
0.6561279296875 ms.
0.5919933319091797 ms.
0.5278587341308594 ms.
0.6549358367919922 ms.
0.5059242248535156 ms.
0.5059242248535156 ms.
0.5609989166259766 ms.
0.6628036499023438 ms.
0.5340576171875 ms.
0.4200935363769531 ms.
0.48995018005371094 ms.
0.4909038543701172 ms.
0.7088184356689453 ms.
0.9820461273193359 ms.
0.6070137023925781 ms.
0.41103363037109375 ms.
0.43582916259765625 ms.
0.47206878662109375 ms.
0.3781318664550781 ms.
0.3800392150878906 ms.
0.47016143798828125 ms.
0.3838539123535156 ms.
0.35500526428222656 ms.
0.4627704620361328 ms.
0.370025634765625 ms.
0.3619194030761719 ms.
0.4661083221435547 ms.
0.34689903259277344 ms.
0.34999847412109375 ms.
0.3509521484375 ms.
0.4649162292480469 ms.
0.3681182861328125 ms.
0.37789344787597656 ms.
0.5178451538085938 ms.
0.3578662872314453 ms.
0.35500526428222656 ms.
0.43892860412597656 ms.
0.3769397735595703 ms.
0.38886070251464844 ms.
0.45990943908691406 ms.
0.37097930908203125 ms.
0.3669261932373047 ms.
0.4611015319824219 ms.
0.392913818359375 ms.
0.4119873046875 ms.
0.4611015319824219 ms.
0.39696693420410156 ms.
0.4131793975830078 ms.
0.4589557647705078 ms.
0.39386749267578125 ms.
0.392913818359375 ms.
0.4100799560546875 ms.
0.5180835723876953 ms.
0.8227825164794922 ms.
0.3941059112548828 ms.
0.4870891571044922 ms.
0.37288665771484375 ms.
0.39005279541015625 ms.
[GC: 147241 kb =&gt; EdenCollection, 0.042141 ms...]
[Increment: 0.060120 ms...]
0.7369518280029297 ms.
0.5819797515869141 ms.
0.5249977111816406 ms.
0.5450248718261719 ms.
0.6401538848876953 ms.
0.5300045013427734 ms.
0.5409717559814453 ms.
0.6530284881591797 ms.
0.5338191986083984 ms.
0.5030632019042969 ms.
0.7169246673583984 ms.
0.6461143493652344 ms.
[Increment: 114106 kb, 0.310899 ms, cycle 8.867381 ms]
2.2020339965820312 ms.
0.13184547424316406 ms.
0.1289844512939453 ms.
0.1239776611328125 ms.
0.12612342834472656 ms.
0.12993812561035156 ms.
0.1289844512939453 ms.
0.14209747314453125 ms.
0.1289844512939453 ms.
0.1399517059326172 ms.
0.11992454528808594 ms.
0.12493133544921875 ms.
0.13494491577148438 ms.
0.12612342834472656 ms.
0.12803077697753906 ms.
0.12302398681640625 ms.
0.13303756713867188 ms.
0.13113021850585938 ms.
0.14090538024902344 ms.
0.12278556823730469 ms.
0.1239776611328125 ms.
0.1380443572998047 ms.
0.12803077697753906 ms.
0.12612342834472656 ms.
0.1919269561767578 ms.
0.1418590545654297 ms.
0.39386749267578125 ms.
0.6051063537597656 ms.
0.3540515899658203 ms.
0.2639293670654297 ms.
0.1850128173828125 ms.
0.16498565673828125 ms.
0.1628398895263672 ms.
0.1690387725830078 ms.
0.18405914306640625 ms.
0.2529621124267578 ms.
0.2040863037109375 ms.
0.2498626708984375 ms.
0.28014183044433594 ms.
0.4220008850097656 ms.
0.20194053649902344 ms.
0.12302398681640625 ms.
0.1270771026611328 ms.
0.1289844512939453 ms.
0.1239776611328125 ms.
0.11301040649414062 ms.
0.1239776611328125 ms.
0.1289844512939453 ms.
0.13589859008789062 ms.
0.12183189392089844 ms.
0.11897087097167969 ms.
0.11801719665527344 ms.
0.12493133544921875 ms.
0.1239776611328125 ms.
0.13399124145507812 ms.
0.11777877807617188 ms.
0.11801719665527344 ms.
0.11897087097167969 ms.
0.12803077697753906 ms.
0.11420249938964844 ms.
0.12612342834472656 ms.
0.2620220184326172 ms.
0.35500526428222656 ms.
0.4241466522216797 ms.
0.3230571746826172 ms.
0.35691261291503906 ms.
0.42700767517089844 ms.
0.3600120544433594 ms.
0.3800392150878906 ms.
0.3612041473388672 ms.
0.4050731658935547 ms.
0.36787986755371094 ms.
0.3459453582763672 ms.
0.4119873046875 ms.
0.3371238708496094 ms.
0.37598609924316406 ms.
0.43702125549316406 ms.
0.34117698669433594 ms.
0.35309791564941406 ms.
0.4150867462158203 ms.
0.36406517028808594 ms.
0.36907196044921875 ms.
0.38313865661621094 ms.
0.4382133483886719 ms.
0.3800392150878906 ms.
0.3418922424316406 ms.
0.4100799560546875 ms.
0.35691261291503906 ms.
0.3440380096435547 ms.
0.40721893310546875 ms.
0.3509521484375 ms.
0.347137451171875 ms.
0.34308433532714844 ms.
0.3960132598876953 ms.
0.4239082336425781 ms.
0.4429817199707031 ms.
0.46896934509277344 ms.
0.38695335388183594 ms.
0.34117698669433594 ms.
0.4019737243652344 ms.
0.35190582275390625 ms.
0.37598609924316406 ms.
0.6649494171142578 ms.
0.5428791046142578 ms.
0.3790855407714844 ms.
0.3669261932373047 ms.
0.4100799560546875 ms.
0.8211135864257812 ms.
0.3960132598876953 ms.
0.370025634765625 ms.
0.4558563232421875 ms.
0.35309791564941406 ms.
0.3619194030761719 ms.
0.4601478576660156 ms.
0.3800392150878906 ms.
0.3960132598876953 ms.
0.39196014404296875 ms.
0.4520416259765625 ms.
[GC: 189634 kb =&gt; FullCollection, 0.042795 ms...]
0.6458759307861328 ms.
[Increment: 0.070214 ms...]
0.6091594696044922 ms.
[Increment: 4386 kb, 0.254815 ms, cycle 1.780371 ms]
0.8368492126464844 ms.
0.16689300537109375 ms.
0.1590251922607422 ms.
0.1780986785888672 ms.
0.13780593872070312 ms.
0.1628398895263672 ms.
0.14495849609375 ms.
0.1308917999267578 ms.
0.13899803161621094 ms.
0.141143798828125 ms.
0.12493133544921875 ms.
0.537872314453125 ms.
0.7410049438476562 ms.
0.3910064697265625 ms.
0.2460479736328125 ms.
0.2319812774658203 ms.
0.33593177795410156 ms.
0.1919269561767578 ms.
0.16021728515625 ms.
0.1690387725830078 ms.
0.19598007202148438 ms.
0.14400482177734375 ms.
0.16498565673828125 ms.
0.14209747314453125 ms.
0.164031982421875 ms.
0.164031982421875 ms.
0.3120899200439453 ms.
0.13113021850585938 ms.
0.1430511474609375 ms.
0.12087821960449219 ms.
0.1270771026611328 ms.
0.1251697540283203 ms.
0.12612342834472656 ms.
0.12302398681640625 ms.
0.1289844512939453 ms.
0.1220703125 ms.
0.13709068298339844 ms.
0.11897087097167969 ms.
0.12111663818359375 ms.
0.12183189392089844 ms.
0.13899803161621094 ms.
0.12993812561035156 ms.
0.11992454528808594 ms.
0.1239776611328125 ms.
0.13017654418945312 ms.
0.12302398681640625 ms.
[GC: 190858 kb =&gt; EdenCollection, 0.022680 ms...]
0.21910667419433594 ms.
[Increment: 0.065105 ms...]
[Increment: 0.046877 ms...]
[Increment: 0.041202 ms...]
0.55694580078125 ms.
[Increment: 0.042442 ms...]
[Increment: 0.035807 ms...]
[Increment: 0.043993 ms...]
[Increment: 0.035148 ms...]
[Increment: 5332 kb, 0.193381 ms, cycle 1.293687 ms]
0.7498264312744141 ms.
0.14090538024902344 ms.
0.13113021850585938 ms.
0.1270771026611328 ms.
0.13494491577148438 ms.
0.1239776611328125 ms.
0.12493133544921875 ms.
0.12993812561035156 ms.
0.1289844512939453 ms.
0.1308917999267578 ms.
0.11992454528808594 ms.
0.11587142944335938 ms.
0.12612342834472656 ms.
0.10800361633300781 ms.
0.11110305786132812 ms.
0.11491775512695312 ms.
0.11301040649414062 ms.
0.10609626770019531 ms.
0.11610984802246094 ms.
0.11706352233886719 ms.
0.10895729064941406 ms.
0.11706352233886719 ms.
0.10204315185546875 ms.
0.10704994201660156 ms.
0.11301040649414062 ms.
0.11205673217773438 ms.
0.11301040649414062 ms.
0.11897087097167969 ms.
0.11181831359863281 ms.
0.11110305786132812 ms.
0.10800361633300781 ms.
0.10704994201660156 ms.
0.11587142944335938 ms.
0.11706352233886719 ms.
0.11587142944335938 ms.
0.11610984802246094 ms.
0.10418891906738281 ms.
0.10704994201660156 ms.
0.10895729064941406 ms.
0.12993812561035156 ms.
0.10800361633300781 ms.
0.11420249938964844 ms.
0.11014938354492188 ms.
0.10895729064941406 ms.
0.12111663818359375 ms.
0.12087821960449219 ms.
[GC: 190860 kb =&gt; EdenCollection, 0.025968 ms...]
[Increment: 0.047501 ms...]
0.3509521484375 ms.
[Increment: 0.054287 ms...]
[Increment: 0.036070 ms...]
[Increment: 0.043876 ms...]
0.4990100860595703 ms.
[Increment: 0.038487 ms...]
[Increment: 0.051859 ms...]
[Increment: 0.039268 ms...]
[Increment: 6054 kb, 0.142653 ms, cycle 1.301613 ms]
0.6330013275146484 ms.
0.10991096496582031 ms.
0.12111663818359375 ms.
0.11205673217773438 ms.
0.12111663818359375 ms.
0.11110305786132812 ms.
0.10585784912109375 ms.
0.11396408081054688 ms.
0.1049041748046875 ms.
0.11491775512695312 ms.
0.11587142944335938 ms.
0.10895729064941406 ms.
0.11396408081054688 ms.
0.11205673217773438 ms.
0.12302398681640625 ms.
0.10991096496582031 ms.
0.10895729064941406 ms.
0.1068115234375 ms.
0.11491775512695312 ms.
0.11205673217773438 ms.
0.11491775512695312 ms.
0.11706352233886719 ms.
0.1049041748046875 ms.
0.11205673217773438 ms.
0.11301040649414062 ms.
0.11396408081054688 ms.
0.1251697540283203 ms.
0.11181831359863281 ms.
0.10800361633300781 ms.
0.10609626770019531 ms.
0.10991096496582031 ms.
0.11086463928222656 ms.
0.12183189392089844 ms.
0.11205673217773438 ms.
0.11086463928222656 ms.
0.11110305786132812 ms.
0.11491775512695312 ms.
0.11205673217773438 ms.
0.12302398681640625 ms.
0.10895729064941406 ms.
0.10895729064941406 ms.
0.11491775512695312 ms.
0.10800361633300781 ms.
0.14901161193847656 ms.
0.1201629638671875 ms.
0.11610984802246094 ms.
[GC: 190862 kb =&gt; EdenCollection, 0.027128 ms...]
[Increment: 0.056724 ms...]
0.827789306640625 ms.
[Increment: 0.052050 ms...]
[Increment: 0.048763 ms...]
[Increment: 0.044044 ms...]
[Increment: 0.052477 ms...]
[Increment: 0.050246 ms...]
[Increment: 6986 kb, 0.081516 ms, cycle 1.225617 ms]
0.8141994476318359 ms.
0.11992454528808594 ms.
0.11610984802246094 ms.
0.15401840209960938 ms.
0.12087821960449219 ms.
0.11491775512695312 ms.
0.11491775512695312 ms.
0.11301040649414062 ms.
0.12111663818359375 ms.
0.11396408081054688 ms.
0.11110305786132812 ms.
0.11301040649414062 ms.
0.11301040649414062 ms.
0.10895729064941406 ms.
0.11992454528808594 ms.
0.11301040649414062 ms.
0.10800361633300781 ms.
0.11491775512695312 ms.
0.11205673217773438 ms.
0.10895729064941406 ms.
0.11801719665527344 ms.
0.10704994201660156 ms.
0.11205673217773438 ms.
0.12302398681640625 ms.
0.11181831359863281 ms.
0.11801719665527344 ms.
0.11992454528808594 ms.
0.11301040649414062 ms.
0.10800361633300781 ms.
0.11515617370605469 ms.
0.10800361633300781 ms.
0.11897087097167969 ms.
0.11396408081054688 ms.
0.11086463928222656 ms.
0.11587142944335938 ms.
0.12183189392089844 ms.
0.13113021850585938 ms.
0.12087821960449219 ms.
0.125885009765625 ms.
0.11706352233886719 ms.
0.1239776611328125 ms.
0.1220703125 ms.
0.1201629638671875 ms.
0.1220703125 ms.
0.12183189392089844 ms.
0.12803077697753906 ms.
[GC: 190865 kb =&gt; EdenCollection, 0.028420 ms...]
[Increment: 0.055186 ms...]
0.3540515899658203 ms.
[Increment: 0.047389 ms...]
[Increment: 0.044414 ms...]
[Increment: 0.036723 ms...]
0.49304962158203125 ms.
[Increment: 0.044291 ms...]
[Increment: 0.060881 ms...]
[Increment: 0.052198 ms...]
[Increment: 0.064555 ms...]
[Increment: 7834 kb, 0.181012 ms, cycle 1.459888 ms]
0.8139610290527344 ms.
0.13113021850585938 ms.
0.13303756713867188 ms.
0.11801719665527344 ms.
0.1239776611328125 ms.
0.12183189392089844 ms.
0.11706352233886719 ms.
0.11992454528808594 ms.
0.1289844512939453 ms.
0.12183189392089844 ms.
0.12302398681640625 ms.
0.12612342834472656 ms.
0.15115737915039062 ms.
0.1308917999267578 ms.
0.125885009765625 ms.
0.11801719665527344 ms.
0.44083595275878906 ms.
0.11801719665527344 ms.
0.11682510375976562 ms.
0.1270771026611328 ms.
0.12183189392089844 ms.
0.12993812561035156 ms.
0.1289844512939453 ms.
0.1270771026611328 ms.
0.11420249938964844 ms.
0.11897087097167969 ms.
0.10991096496582031 ms.
0.10800361633300781 ms.
0.11491775512695312 ms.
0.11014938354492188 ms.
0.11491775512695312 ms.
0.10991096496582031 ms.
0.11086463928222656 ms.
0.11801719665527344 ms.
0.11205673217773438 ms.
0.10991096496582031 ms.
0.11706352233886719 ms.
0.11301040649414062 ms.
0.11014938354492188 ms.
0.11301040649414062 ms.
0.11301040649414062 ms.
0.11491775512695312 ms.
0.10919570922851562 ms.
0.11801719665527344 ms.
0.11205673217773438 ms.
0.10991096496582031 ms.
[GC: 190867 kb =&gt; EdenCollection, 0.025759 ms...]
[Increment: 0.049976 ms...]
0.4010200500488281 ms.
[Increment: 0.046127 ms...]
[Increment: 0.044754 ms...]
[Increment: 0.039632 ms...]
[Increment: 0.036596 ms...]
[Increment: 0.055430 ms...]
[Increment: 0.039270 ms...]
[Increment: 8458 kb, 0.187435 ms, cycle 1.270033 ms]
0.9908676147460938 ms.
0.11706352233886719 ms.
0.11301040649414062 ms.
0.11396408081054688 ms.
0.11491775512695312 ms.
0.11420249938964844 ms.
0.11301040649414062 ms.
0.11110305786132812 ms.
0.12087821960449219 ms.
0.11396408081054688 ms.
0.11706352233886719 ms.
0.11515617370605469 ms.
0.11420249938964844 ms.
0.11301040649414062 ms.
0.11992454528808594 ms.
0.10895729064941406 ms.
0.11491775512695312 ms.
0.11301040649414062 ms.
0.11396408081054688 ms.
0.11682510375976562 ms.
0.11014938354492188 ms.
0.10895729064941406 ms.
0.11587142944335938 ms.
0.11706352233886719 ms.
0.11205673217773438 ms.
0.11897087097167969 ms.
0.10800361633300781 ms.
0.10919570922851562 ms.
0.11086463928222656 ms.
0.11181831359863281 ms.
0.11897087097167969 ms.
0.10991096496582031 ms.
0.11706352233886719 ms.
0.10919570922851562 ms.
0.11181831359863281 ms.
0.11086463928222656 ms.
0.1270771026611328 ms.
0.11515617370605469 ms.
0.10800361633300781 ms.
0.11014938354492188 ms.
0.11110305786132812 ms.
0.11897087097167969 ms.
0.11491775512695312 ms.
0.11396408081054688 ms.
0.11491775512695312 ms.
0.11205673217773438 ms.
[GC: 190868 kb =&gt; EdenCollection, 0.045988 ms...]
[Increment: 0.047249 ms...]
0.3330707550048828 ms.
[Increment: 0.062196 ms...]
[Increment: 0.039545 ms...]
[Increment: 0.057831 ms...]
[Increment: 0.049442 ms...]
[Increment: 0.045299 ms...]
0.7500648498535156 ms.
[Increment: 0.072236 ms...]
[Increment: 8825 kb, 0.154043 ms, cycle 1.294582 ms]
0.492095947265625 ms.
0.1499652862548828 ms.
0.1308917999267578 ms.
0.11920928955078125 ms.
0.11515617370605469 ms.
0.11920928955078125 ms.
0.11920928955078125 ms.
0.12803077697753906 ms.
0.11682510375976562 ms.
0.13518333435058594 ms.
0.1361370086669922 ms.
0.1289844512939453 ms.
0.13399124145507812 ms.
0.14209747314453125 ms.
0.12111663818359375 ms.
0.11181831359863281 ms.
0.11205673217773438 ms.
0.11205673217773438 ms.
0.12493133544921875 ms.
0.11110305786132812 ms.
0.11301040649414062 ms.
0.11491775512695312 ms.
0.11086463928222656 ms.
0.11706352233886719 ms.
0.11205673217773438 ms.
0.11086463928222656 ms.
0.11205673217773438 ms.
0.11181831359863281 ms.
0.11301040649414062 ms.
0.11706352233886719 ms.
0.11396408081054688 ms.
0.11706352233886719 ms.
0.11086463928222656 ms.
^C
[pizlo@murderface OpenSource]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248666</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 17:57:11 -0800</bug_when>
    <thetext>I&apos;m making some progress, but I just realized that the whole OldGrey/NewGrey state arrangement is busted.  We need some other way of knowing if we&apos;re scanning an object due to the barrier versus due to marking.  I think that the only way to do it is to have separate mark stacks for the two things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248671</commentid>
    <comment_count>7</comment_count>
      <attachid>294042</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 18:36:06 -0800</bug_when>
    <thetext>Created attachment 294042
fixed some glaring flaws

I fixed the CellState bug.  But I still have more crashes.  I&apos;m looking into them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248672</commentid>
    <comment_count>8</comment_count>
      <attachid>294043</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 19:17:17 -0800</bug_when>
    <thetext>Created attachment 294043
fixed some more races</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248673</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 19:27:38 -0800</bug_when>
    <thetext>The GC is seeing objects with totally corrupt structure IDs.

Before going into this further, I&apos;m going to add a collectContinuously mode. In this mode the GC will just always be running. After finishing a cycle it will immediately start another one. This way, the GC will be able to more effectively tell me what is going wrong.

I&apos;m debugging with generational GC turned off, for now.  I&apos;m also running in baseline JIT only, just to keep my reasoning about barriers super simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248674</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 19:34:23 -0800</bug_when>
    <thetext>Oh yeah, collectContinuously causes insta-crashes. Yusss.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248675</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-06 19:36:11 -0800</bug_when>
    <thetext>This is starting to look like an allocator bug: during concurrent GC we&apos;re allocating over live objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248774</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 10:04:23 -0800</bug_when>
    <thetext>Oh wow, MarkedBlock::stopAllocating() is totally wrong: it blows away newlyAllocated!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248775</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 10:07:48 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Oh wow, MarkedBlock::stopAllocating() is totally wrong: it blows away
&gt; newlyAllocated!

Hmmm, actually, no.  It blows it away but then it makes it right.

For a minute I was thinking that this was something that could only be right if you ran it at the top of GC and now just after the other increments.  But now I&apos;m thinking it should work no matter what.  I&apos;ll have to stare at it more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248801</commentid>
    <comment_count>14</comment_count>
      <attachid>294073</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 11:42:51 -0800</bug_when>
    <thetext>Created attachment 294073
it can collect like seven times before crashing

Progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248805</commentid>
    <comment_count>15</comment_count>
      <attachid>294074</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 12:11:29 -0800</bug_when>
    <thetext>Created attachment 294074
starting to work with useConcurrentJIT=false

Since it can collect concurrently like seven times, I&apos;m going to focus on getting it to work properly with concurrent JIT disabled. That&apos;s shaking out some great bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248811</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 13:16:17 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created attachment 294074 [details]
&gt; starting to work with useConcurrentJIT=false
&gt; 
&gt; Since it can collect concurrently like seven times, I&apos;m going to focus on
&gt; getting it to work properly with concurrent JIT disabled. That&apos;s shaking out
&gt; some great bugs.

This patch has concurrent GC turned off by default.  But even with it turned off, the collector uses the concurrent GC algorithm - it just happens to not stop the world.  As, the resumeTheWorld/stopTheWorld steps that let the mutator &quot;peek&quot; into the collector become no-ops by default.

Running in the default mode, this patch passes release stress tests.  I think it would pass debug stress tests, but I didn&apos;t have time to run that yet.  Next I&apos;m going to run perf tests.  I want to see if the algorithm changes have any downside.  I moved *everything* into the fixpoint, which sounds completely insane but will probably work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248828</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 13:39:00 -0800</bug_when>
    <thetext>Perf looks pretty good.  Earley-boyer seems to suffer a tiny amount, but it&apos;s so small that everything else dominates.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r208415)
&quot;Things&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r208415)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree                   Things                                      
SunSpider:
   3d-cube                                    4.6543+-0.1985            4.5880+-0.1519          might be 1.0144x faster
   3d-morph                                   4.9733+-0.5236            4.6632+-0.0704          might be 1.0665x faster
   3d-raytrace                                4.8796+-0.1170            4.7426+-0.0911          might be 1.0289x faster
   access-binary-trees                        1.9868+-0.0456            1.9820+-0.0273        
   access-fannkuch                            4.6442+-0.0544            4.6326+-0.0208        
   access-nbody                               2.4148+-0.1143            2.3866+-0.0195          might be 1.0118x faster
   access-nsieve                              2.8643+-0.0539     ?      2.9159+-0.0734        ? might be 1.0180x slower
   bitops-3bit-bits-in-byte                   1.1027+-0.0325     ?      1.2118+-0.3253        ? might be 1.0990x slower
   bitops-bits-in-byte                        2.8341+-0.3422            2.8235+-0.1780        
   bitops-bitwise-and                         1.9563+-0.0462            1.9475+-0.0655        
   bitops-nsieve-bits                         3.0322+-0.0615     ?      3.0410+-0.0758        ?
   controlflow-recursive                      2.2526+-0.0470            2.2355+-0.0233        
   crypto-aes                                 4.4888+-0.4054            4.2827+-0.0895          might be 1.0481x faster
   crypto-md5                                 2.6647+-0.0324     ?      2.6871+-0.0474        ?
   crypto-sha1                                2.7382+-0.1244     ?      2.8190+-0.2968        ? might be 1.0295x slower
   date-format-tofte                         16.8900+-0.9105     ?     17.0853+-0.3842        ? might be 1.0116x slower
   date-format-xparb                          4.4812+-0.1455     ?      4.5485+-0.1469        ? might be 1.0150x slower
   math-cordic                                2.8697+-0.2316            2.6656+-0.0488          might be 1.0766x faster
   math-partial-sums                          3.8592+-0.0745     ?      4.0898+-0.4652        ? might be 1.0597x slower
   math-spectral-norm                         1.9767+-0.0319     ?      1.9777+-0.0539        ?
   regexp-dna                                 6.1549+-0.1894     ?      6.1847+-0.2166        ?
   string-base64                              4.6369+-0.3612            4.4716+-0.0142          might be 1.0370x faster
   string-fasta                               5.5486+-0.4466            5.5181+-0.4154        
   string-tagcloud                            8.2368+-0.1453     ?      8.4959+-0.8993        ? might be 1.0315x slower
   string-unpack-code                        18.4797+-1.4757     ?     18.5741+-1.0569        ?
   string-validate-input                      4.1176+-0.0767     ?      4.1991+-0.0953        ? might be 1.0198x slower

   &lt;arithmetic&gt;                               4.7976+-0.0605     ?      4.7988+-0.0630        ? might be 1.0003x slower

                                                TipOfTree                   Things                                      
LongSpider:
   3d-cube                                  796.6859+-3.4323     ?    802.4174+-8.6311        ?
   3d-morph                                 564.8069+-2.6500          563.4614+-5.6709        
   3d-raytrace                              450.1907+-5.5140          447.8473+-4.4544        
   access-binary-trees                      782.3699+-4.4056     !    803.0864+-6.6461        ! definitely 1.0265x slower
   access-fannkuch                          237.3627+-17.3768    ?    238.7651+-14.7861       ?
   access-nbody                             504.9757+-7.3845          501.2820+-3.8414        
   access-nsieve                            284.8110+-7.8961     ?    285.1713+-7.8544        ?
   bitops-3bit-bits-in-byte                  32.3470+-1.3215           31.6697+-0.8888          might be 1.0214x faster
   bitops-bits-in-byte                       80.9715+-4.3220           79.9835+-2.9511          might be 1.0124x faster
   bitops-nsieve-bits                       367.7198+-7.7535          366.4823+-2.4768        
   controlflow-recursive                    392.9243+-4.5229     !    403.9003+-4.1975        ! definitely 1.0279x slower
   crypto-aes                               548.5693+-9.9136     ?    554.0095+-5.9220        ?
   crypto-md5                               457.0292+-7.5387          447.3692+-4.6003          might be 1.0216x faster
   crypto-sha1                              589.6957+-7.9802     ?    594.2150+-7.6857        ?
   date-format-tofte                       1813.2402+-33.2766    ?   1891.7206+-49.8909       ? might be 1.0433x slower
   date-format-xparb                        608.4417+-7.1466     ?    609.6717+-4.3487        ?
   hash-map                                 144.2038+-5.2630          136.7168+-3.1750          might be 1.0548x faster
   math-cordic                              401.6302+-3.9656     ?    402.5130+-3.5004        ?
   math-partial-sums                        280.8901+-2.2271     ?    281.9106+-2.6997        ?
   math-spectral-norm                       515.9382+-2.1197     ?    516.2097+-1.8907        ?
   string-base64                            463.6923+-7.3667     ?    466.2891+-7.3822        ?
   string-fasta                             326.0897+-2.6372     ?    330.0834+-7.3534        ? might be 1.0122x slower
   string-tagcloud                          166.8835+-2.1662     ?    167.8648+-1.0380        ?

   &lt;geometric&gt;                              361.8928+-2.2011     ?    362.4446+-1.0470        ? might be 1.0015x slower

                                                TipOfTree                   Things                                      
V8Spider:
   crypto                                    34.0213+-0.3730     ?     34.3642+-0.3845        ? might be 1.0101x slower
   deltablue                                 48.3955+-1.3441           47.8869+-0.8933          might be 1.0106x faster
   earley-boyer                              34.0340+-0.2623     !     34.9547+-0.5792        ! definitely 1.0271x slower
   raytrace                                  19.0770+-0.4793           19.0127+-1.1457        
   regexp                                    50.1340+-0.4132     ?     50.5603+-0.5672        ?
   richards                                  38.6569+-1.1123     ?     38.7559+-1.5505        ?
   splay                                     29.3865+-1.9087           29.3505+-1.9975        

   &lt;geometric&gt;                               34.7139+-0.3425     ?     34.8708+-0.5579        ? might be 1.0045x slower

                                                TipOfTree                   Things                                      
Octane:
   encrypt                                   0.14854+-0.00068    ?     0.14884+-0.00067       ?
   decrypt                                   2.56205+-0.03023    ?     2.56335+-0.03696       ?
   deltablue                        x2       0.12147+-0.00249    ?     0.12154+-0.00170       ?
   earley                                    0.23961+-0.00311    !     0.24478+-0.00148       ! definitely 1.0216x slower
   boyer                                     4.16801+-0.14233    ?     4.27985+-0.10391       ? might be 1.0268x slower
   navier-stokes                    x2       4.59418+-0.01589          4.58541+-0.01552       
   raytrace                         x2       0.66039+-0.00236    ?     0.66632+-0.00751       ?
   richards                         x2       0.07899+-0.00172    ?     0.07903+-0.00146       ?
   splay                            x2       0.31385+-0.00404          0.31294+-0.00169       
   regexp                           x2      17.47013+-0.86970         16.53071+-0.86606         might be 1.0568x faster
   pdfjs                            x2      39.90159+-0.77920    ?    40.08696+-0.65414       ?
   mandreel                         x2      40.02323+-0.52727    ?    40.04263+-0.47942       ?
   gbemu                            x2      28.70460+-0.08240    ?    28.74844+-0.15101       ?
   closure                                   0.46705+-0.00338    ?     0.46912+-0.00273       ?
   jquery                                    6.36426+-0.06069          6.31704+-0.06484       
   box2d                            x2       8.67714+-0.08035    ?     8.73038+-0.07810       ?
   zlib                             x2     333.86896+-14.20706   ?   337.96054+-10.43803      ? might be 1.0123x slower
   typescript                       x2     610.23743+-10.09097       607.02995+-7.14881       

   &lt;geometric&gt;                               4.74041+-0.03229          4.73837+-0.01563         might be 1.0004x faster

                                                TipOfTree                   Things                                      
Kraken:
   ai-astar                                   91.343+-4.112             89.531+-1.629           might be 1.0202x faster
   audio-beat-detection                       35.676+-1.123             35.396+-0.223         
   audio-dft                                  94.508+-2.440      ?      95.222+-2.314         ?
   audio-fft                                  27.831+-1.151             27.355+-0.110           might be 1.0174x faster
   audio-oscillator                           42.682+-0.595      ?      42.765+-0.274         ?
   imaging-darkroom                           55.901+-0.566             55.734+-0.160         
   imaging-desaturate                         41.090+-0.255      ?      41.279+-0.809         ?
   imaging-gaussian-blur                      60.639+-2.839             56.744+-4.027           might be 1.0686x faster
   json-parse-financial                       32.320+-1.592      ?      33.612+-1.980         ? might be 1.0400x slower
   json-stringify-tinderbox                   21.055+-0.672      ?      21.161+-1.540         ?
   stanford-crypto-aes                        34.214+-0.300      ?      34.375+-0.309         ?
   stanford-crypto-ccm                        34.223+-2.449             31.231+-2.071           might be 1.0958x faster
   stanford-crypto-pbkdf2                     89.012+-1.871      ?      89.941+-3.485         ? might be 1.0104x slower
   stanford-crypto-sha256-iterative           29.116+-0.436      ?      29.578+-0.544         ? might be 1.0159x slower

   &lt;arithmetic&gt;                               49.258+-0.561             48.852+-0.339           might be 1.0083x faster

                                                TipOfTree                   Things                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           26.8946+-0.0535           26.8816+-0.0846          might be 1.0005x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248845</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 14:34:02 -0800</bug_when>
    <thetext>I need to make all of CodeBlock&apos;s visitChildren logic thread-safe.  It&apos;s not right now, but easily could be - there&apos;s already a lock for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248848</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 14:37:45 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I need to make all of CodeBlock&apos;s visitChildren logic thread-safe.  It&apos;s not
&gt; right now, but easily could be - there&apos;s already a lock for that.

Alternatively, I could have a revisitWithWorldStopped hook in SlotVisitor, and we could make the &quot;bad&quot; visitChidren methods use this.  You would use it like this:

void Blah::visitChildren(SlotVisitor&amp; visitor)
{
    if (visitor.revisitWithWorldStopped())
        return;
    ... // some terrible race conditions
}

Where revisitWithWorldStopped() would initially check if the world is stopped already, and if it is, it would schedule the object to be revisited on a separate visit-while-world-is-stopped list.  When visited from that worklist, it would return false.

I&apos;m not sure yet if I will need this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248854</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 14:52:24 -0800</bug_when>
    <thetext>For objects that change structure every time a new property is added, the current regime of loading the structure and butterfly in the right order in the collector, and storing them in the right order in the mutator, totally works.

But this breaks as soon as we add properties without transition.  This happens for dictionaries and as an optimization.

It seems that the Structure is already grabbing locks in this case.  Maybe the right thing to do is to do the entire store and butterfly switcheroo while that lock is held. Then have the GC scan hold the Structure&apos;s lock if it&apos;s a dictionary or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248885</commentid>
    <comment_count>21</comment_count>
      <attachid>294098</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 16:22:09 -0800</bug_when>
    <thetext>Created attachment 294098
fixing races in JSObject::visitChildren

If the main thread is allocating a butterfly while the GC is scanning the object then we have a funny concurrent copying-like case.  Fortunately, it&apos;s easy to fix.

If we&apos;re not in dictionary mode, then we just want the GC to see the old structure until the end of the transition. That&apos;s easy.

If we&apos;re in dictionary mode, then any dangerous mutator activity will already grab the Structure&apos;s lock. So, we just need to slave the other stuff inside the lock. So the lock will protect the object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248886</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 16:28:22 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Created attachment 294098 [details]
&gt; fixing races in JSObject::visitChildren
&gt; 
&gt; If the main thread is allocating a butterfly while the GC is scanning the
&gt; object then we have a funny concurrent copying-like case.  Fortunately, it&apos;s
&gt; easy to fix.
&gt; 
&gt; If we&apos;re not in dictionary mode, then we just want the GC to see the old
&gt; structure until the end of the transition. That&apos;s easy.
&gt; 
&gt; If we&apos;re in dictionary mode, then any dangerous mutator activity will
&gt; already grab the Structure&apos;s lock. So, we just need to slave the other stuff
&gt; inside the lock. So the lock will protect the object.

Aw snap, but what about arrays?

If we have indexed storage then we need to have some way of scanning the right subset of it.

One option is to resize arrays under a lock.  Maybe that would work.

Another option is to institute proper discipline with respect to the lengths: don&apos;t increase length until we&apos;ve sanitized that space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248888</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 16:31:22 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Created attachment 294098 [details]
&gt; &gt; fixing races in JSObject::visitChildren
&gt; &gt; 
&gt; &gt; If the main thread is allocating a butterfly while the GC is scanning the
&gt; &gt; object then we have a funny concurrent copying-like case.  Fortunately, it&apos;s
&gt; &gt; easy to fix.
&gt; &gt; 
&gt; &gt; If we&apos;re not in dictionary mode, then we just want the GC to see the old
&gt; &gt; structure until the end of the transition. That&apos;s easy.
&gt; &gt; 
&gt; &gt; If we&apos;re in dictionary mode, then any dangerous mutator activity will
&gt; &gt; already grab the Structure&apos;s lock. So, we just need to slave the other stuff
&gt; &gt; inside the lock. So the lock will protect the object.
&gt; 
&gt; Aw snap, but what about arrays?
&gt; 
&gt; If we have indexed storage then we need to have some way of scanning the
&gt; right subset of it.
&gt; 
&gt; One option is to resize arrays under a lock.  Maybe that would work.
&gt; 
&gt; Another option is to institute proper discipline with respect to the
&gt; lengths: don&apos;t increase length until we&apos;ve sanitized that space.

Let me just elaborate.  With indexing storage, two kinds of things can happen that would make us nervous:

1) The butterfly is reallocated.  But this isn&apos;t actually scary because the array butterfly describes its own indexing storage length.

2) The lengths change.  Here we just need to ensure that when increasing the length, we clear the wilderness before actually changing the length.  It may be that we do this already, I will audit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248891</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 16:35:51 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Created attachment 294098 [details]
&gt; &gt; &gt; fixing races in JSObject::visitChildren
&gt; &gt; &gt; 
&gt; &gt; &gt; If the main thread is allocating a butterfly while the GC is scanning the
&gt; &gt; &gt; object then we have a funny concurrent copying-like case.  Fortunately, it&apos;s
&gt; &gt; &gt; easy to fix.
&gt; &gt; &gt; 
&gt; &gt; &gt; If we&apos;re not in dictionary mode, then we just want the GC to see the old
&gt; &gt; &gt; structure until the end of the transition. That&apos;s easy.
&gt; &gt; &gt; 
&gt; &gt; &gt; If we&apos;re in dictionary mode, then any dangerous mutator activity will
&gt; &gt; &gt; already grab the Structure&apos;s lock. So, we just need to slave the other stuff
&gt; &gt; &gt; inside the lock. So the lock will protect the object.
&gt; &gt; 
&gt; &gt; Aw snap, but what about arrays?
&gt; &gt; 
&gt; &gt; If we have indexed storage then we need to have some way of scanning the
&gt; &gt; right subset of it.
&gt; &gt; 
&gt; &gt; One option is to resize arrays under a lock.  Maybe that would work.
&gt; &gt; 
&gt; &gt; Another option is to institute proper discipline with respect to the
&gt; &gt; lengths: don&apos;t increase length until we&apos;ve sanitized that space.
&gt; 
&gt; Let me just elaborate.  With indexing storage, two kinds of things can
&gt; happen that would make us nervous:
&gt; 
&gt; 1) The butterfly is reallocated.  But this isn&apos;t actually scary because the
&gt; array butterfly describes its own indexing storage length.
&gt; 
&gt; 2) The lengths change.  Here we just need to ensure that when increasing the
&gt; length, we clear the wilderness before actually changing the length.  It may
&gt; be that we do this already, I will audit.

Yeah, this turned out to be easy, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248893</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 16:36:18 -0800</bug_when>
    <thetext>I bet that SparseArrayValueMap will just have to be given a lock.  Yuck but who cares.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248904</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 17:26:20 -0800</bug_when>
    <thetext>It seems that we&apos;ll need a lock for ArrayStorage unshifting.  This lock can&apos;t go into the ArrayStorage itself since that&apos;s what&apos;s being shifted, so we need to put the lock into the JSCell header.  We&apos;ve seen this coming, so this shouldn&apos;t be too bad.

Then there are these two transitions, that seem like they need to happen under a lock:

Contiguous -&gt; ArrayStorage
Contiguous -&gt; SlowPutArrayStorage

But maybe not?  What if the mutator protocol here was:

1) Build the ArrayStorage butterfly but artificially set the lengths to zero.
2) Install the ArrayStorage butterfly.
3) Change the structure.
4) Set the lengths to something real.

If the GC interleaves between (2) and (3), it will think that it has Contiguous with zero length.

If the GC interleaves between (3) and (4), it will think that it has ArrayStorage with zero length.

These are all fine outcomes because the act of changing the structure will trigger a barrier that causes this object to be rescanned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248918</commentid>
    <comment_count>27</comment_count>
      <attachid>294110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-07 18:27:18 -0800</bug_when>
    <thetext>Created attachment 294110
making the array object model thread-safe

Who said making VMs concurrent was hard?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249089</commentid>
    <comment_count>28</comment_count>
      <attachid>294172</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 11:49:59 -0800</bug_when>
    <thetext>Created attachment 294172
implementing more of JSObject thread safety</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249137</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 15:02:57 -0800</bug_when>
    <thetext>Man, I had to change the visitChildren algo again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249139</commentid>
    <comment_count>30</comment_count>
      <attachid>294191</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 15:03:59 -0800</bug_when>
    <thetext>Created attachment 294191
more

Making the JSObject::visitChildren story more rugged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249149</commentid>
    <comment_count>31</comment_count>
      <attachid>294193</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 15:38:52 -0800</bug_when>
    <thetext>Created attachment 294193
fixed LockAlgorithm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249196</commentid>
    <comment_count>32</comment_count>
      <attachid>294205</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 17:21:27 -0800</bug_when>
    <thetext>Created attachment 294205
more fixes

There was a race in the allocator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249236</commentid>
    <comment_count>33</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-08 23:13:03 -0800</bug_when>
    <thetext>I&apos;m now to the point where I can run ~20 GCs in debug mode with collectContinuously=true.

The next problem is that Structure property tables are getting cleared by GC!  This turns out to be easier to fix than it seems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249271</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 07:48:57 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; I&apos;m now to the point where I can run ~20 GCs in debug mode with
&gt; collectContinuously=true.
&gt; 
&gt; The next problem is that Structure property tables are getting cleared by
&gt; GC!  This turns out to be easier to fix than it seems.

I started working on a fix that involved more locking, but I think that literally all we want to do is this:

- materializePropertyMap returns the map it created.
- Nobody accesses propertyTable() directly.  We might as well kill the method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249649</commentid>
    <comment_count>35</comment_count>
      <attachid>294324</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 19:51:17 -0800</bug_when>
    <thetext>Created attachment 294324
more

Hopefully fixes races in Structure.  I haven&apos;t tested it yet so it&apos;s probably totally broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249655</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:22:23 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created attachment 294324 [details]
&gt; more
&gt; 
&gt; Hopefully fixes races in Structure.  I haven&apos;t tested it yet so it&apos;s
&gt; probably totally broken.

It now crashed after 40 GCs.  Progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249656</commentid>
    <comment_count>37</comment_count>
      <attachid>294327</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:27:04 -0800</bug_when>
    <thetext>Created attachment 294327
rebased

I moved the type profiler stuff into the fixpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249657</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:27:19 -0800</bug_when>
    <thetext>I think that now is the time to get this patch ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249659</commentid>
    <comment_count>39</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:27:52 -0800</bug_when>
    <thetext>*** Bug 163734 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249661</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:27:59 -0800</bug_when>
    <thetext>*** Bug 164421 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249663</commentid>
    <comment_count>41</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-09 20:28:05 -0800</bug_when>
    <thetext>*** Bug 164422 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250082</commentid>
    <comment_count>42</comment_count>
      <attachid>294449</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-10 17:47:13 -0800</bug_when>
    <thetext>Created attachment 294449
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250083</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-10 17:47:55 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; Created attachment 294449 [details]
&gt; more

This looks like it&apos;s passing all tests with concurrent GC disabled.

That&apos;s pretty impressive considering that I basically redid how butterfly resizing works, how structure transition work, and how property tables work.  And a bunch of other random stuff.

I&apos;ll need to perf test the heck out of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250118</commentid>
    <comment_count>44</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-10 19:12:24 -0800</bug_when>
    <thetext>This latest patch is a perf regression.  So far I&apos;ve ruled out the JSCell lock and the CASing of indexingType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250143</commentid>
    <comment_count>45</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-10 20:45:56 -0800</bug_when>
    <thetext>I fixed the perf regression - it was a goof-up in Structure::willStoreValueSlow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250145</commentid>
    <comment_count>46</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-10 20:58:10 -0800</bug_when>
    <thetext>(In reply to comment #45)
&gt; I fixed the perf regression - it was a goof-up in
&gt; Structure::willStoreValueSlow.

Nope, there are still regressions in raytrace and earley-boyer.  Investigating...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250255</commentid>
    <comment_count>47</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 09:32:00 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; I fixed the perf regression - it was a goof-up in
&gt; &gt; Structure::willStoreValueSlow.
&gt; 
&gt; Nope, there are still regressions in raytrace and earley-boyer. 
&gt; Investigating...

Fixed raytrace.  I need PutStructure to have a store-store fence, which means &quot;read world&quot; in B3, so that&apos;s what I did in DFG.  But in DFG, reading &quot;world&quot; also means reading the Stack.  Saying read(Heap) fixes the regression by reenabling PutStack sinking.

In reality, we can do a lot better than read(Heap).  I think we just need read(JSCell_butterfly).  We&apos;re just trying to ensure that the collector sees the new butterfly before it sees the new structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250259</commentid>
    <comment_count>48</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 09:43:18 -0800</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #46)
&gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; I fixed the perf regression - it was a goof-up in
&gt; &gt; &gt; Structure::willStoreValueSlow.
&gt; &gt; 
&gt; &gt; Nope, there are still regressions in raytrace and earley-boyer. 
&gt; &gt; Investigating...
&gt; 
&gt; Fixed raytrace.  I need PutStructure to have a store-store fence, which
&gt; means &quot;read world&quot; in B3, so that&apos;s what I did in DFG.  But in DFG, reading
&gt; &quot;world&quot; also means reading the Stack.  Saying read(Heap) fixes the
&gt; regression by reenabling PutStack sinking.
&gt; 
&gt; In reality, we can do a lot better than read(Heap).  I think we just need
&gt; read(JSCell_butterfly).  We&apos;re just trying to ensure that the collector sees
&gt; the new butterfly before it sees the new structure.

And in B3, we want the fence to read both cell and butterfly, but if we do that, we might as well tell B3 that we read top.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250274</commentid>
    <comment_count>49</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 10:10:46 -0800</bug_when>
    <thetext>This looks solid.  The SunSpider speed-up is because I reenabled get_by_val optimizations in the interpreter, which had rotted.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, and Kraken on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r208572)
&quot;Things&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r208572)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                TipOfTree                   Things                                      
SunSpider:
   3d-cube                                    4.6329+-0.1621            4.3330+-0.2411          might be 1.0692x faster
   3d-morph                                   4.7904+-0.3229            4.7441+-0.2330        
   3d-raytrace                                5.0711+-0.4142            4.6228+-0.2068          might be 1.0970x faster
   access-binary-trees                        1.9572+-0.1032     ?      2.1412+-0.4795        ? might be 1.0940x slower
   access-fannkuch                            4.6572+-0.0538            4.6122+-0.0388        
   access-nbody                               2.5723+-0.3846     ?      2.5841+-0.4337        ?
   access-nsieve                              2.9089+-0.0261     ?      2.9672+-0.4163        ? might be 1.0200x slower
   bitops-3bit-bits-in-byte                   1.1012+-0.0183     ?      1.2120+-0.3071        ? might be 1.1006x slower
   bitops-bits-in-byte                        2.7601+-0.0443            2.7576+-0.2210        
   bitops-bitwise-and                         1.9536+-0.0742            1.9235+-0.0289          might be 1.0157x faster
   bitops-nsieve-bits                         3.0381+-0.0209            3.0249+-0.0513        
   controlflow-recursive                      2.2578+-0.0247            2.2548+-0.0347        
   crypto-aes                                 4.2294+-0.0320     ^      3.8822+-0.0977        ^ definitely 1.0894x faster
   crypto-md5                                 2.6547+-0.0775     ^      2.4228+-0.0412        ^ definitely 1.0957x faster
   crypto-sha1                                2.6625+-0.0274     ?      2.7296+-0.4098        ? might be 1.0252x slower
   date-format-tofte                          6.7254+-0.1062            6.5362+-0.2849          might be 1.0289x faster
   date-format-xparb                          4.5343+-0.1318            4.5013+-0.2120        
   math-cordic                                2.7191+-0.1365            2.6643+-0.0688          might be 1.0206x faster
   math-partial-sums                          3.9062+-0.0978            3.8658+-0.0421          might be 1.0105x faster
   math-spectral-norm                         2.1088+-0.2363            1.9728+-0.0660          might be 1.0689x faster
   regexp-dna                                 6.1361+-0.1787     ?      6.2869+-0.3348        ? might be 1.0246x slower
   string-base64                              4.5725+-0.1887            4.4631+-0.0791          might be 1.0245x faster
   string-fasta                               5.3210+-0.0605     ?      5.3825+-0.1343        ? might be 1.0116x slower
   string-tagcloud                            8.1855+-0.1022     ?      8.3127+-0.2926        ? might be 1.0155x slower
   string-unpack-code                        19.0597+-1.0585           17.6160+-0.5405          might be 1.0820x faster
   string-validate-input                      4.1834+-0.0922            4.1259+-0.0566          might be 1.0139x faster

   &lt;arithmetic&gt;                               4.4115+-0.0469     ^      4.3054+-0.0521        ^ definitely 1.0247x faster

                                                TipOfTree                   Things                                      
LongSpider:
   3d-cube                                  797.8894+-10.0972    ?    799.3683+-17.2176       ?
   3d-morph                                 565.6757+-5.0217     ?    570.4503+-12.9570       ?
   3d-raytrace                              447.0399+-4.5722     ?    448.5900+-4.1094        ?
   access-binary-trees                      778.7185+-7.5747     !    818.2294+-6.5151        ! definitely 1.0507x slower
   access-fannkuch                          239.1625+-19.4045         237.3517+-10.9464       
   access-nbody                             503.7745+-4.2968     ?    507.3957+-7.6848        ?
   access-nsieve                            286.6103+-9.2922     ?    302.9953+-8.6683        ? might be 1.0572x slower
   bitops-3bit-bits-in-byte                  31.9382+-1.6052     ?     32.0247+-1.0816        ?
   bitops-bits-in-byte                       81.9702+-4.4997     ?     82.9207+-2.6455        ? might be 1.0116x slower
   bitops-nsieve-bits                       368.0507+-6.1664     ?    368.4164+-3.7404        ?
   controlflow-recursive                    392.4366+-3.3617     !    404.2294+-3.3785        ! definitely 1.0301x slower
   crypto-aes                               547.0616+-11.2789    ?    550.5072+-13.2570       ?
   crypto-md5                               446.7395+-3.9661     !    504.3682+-6.7520        ! definitely 1.1290x slower
   crypto-sha1                              592.2593+-11.5608    ?    598.6479+-9.4860        ? might be 1.0108x slower
   date-format-tofte                        327.9814+-6.0840     ?    338.2374+-10.6704       ? might be 1.0313x slower
   date-format-xparb                        608.7153+-3.4242     ^    599.8995+-2.3673        ^ definitely 1.0147x faster
   hash-map                                 137.3495+-5.7198          136.5254+-9.0635        
   math-cordic                              404.6788+-9.4474          398.8477+-2.4893          might be 1.0146x faster
   math-partial-sums                        283.9420+-6.3617          281.4028+-2.2569        
   math-spectral-norm                       515.7662+-4.3622     ?    517.7189+-4.9770        ?
   string-base64                            456.5683+-3.2441     ?    463.5931+-4.5822        ? might be 1.0154x slower
   string-fasta                             328.8064+-8.9068          328.4449+-3.1305        
   string-tagcloud                          166.9695+-1.7845          166.3598+-1.5795        

   &lt;geometric&gt;                              335.1229+-1.7944     !    339.5881+-0.8884        ! definitely 1.0133x slower

                                                TipOfTree                   Things                                      
V8Spider:
   crypto                                    33.8047+-0.2610           33.6964+-0.4699        
   deltablue                                 48.9495+-1.4640           48.4109+-1.9418          might be 1.0111x faster
   earley-boyer                              34.4457+-0.5239           33.7392+-0.5664          might be 1.0209x faster
   raytrace                                  19.3892+-0.6341           18.9264+-0.4473          might be 1.0245x faster
   regexp                                    51.3517+-1.8721           50.3249+-0.8108          might be 1.0204x faster
   richards                                  38.0634+-0.6105     ?     38.3580+-1.0538        ?
   splay                                     28.8504+-0.6703           28.5265+-0.8188          might be 1.0114x faster

   &lt;geometric&gt;                               34.8344+-0.3749           34.4237+-0.3374          might be 1.0119x faster

                                                TipOfTree                   Things                                      
Octane:
   encrypt                                   0.14976+-0.00197          0.14876+-0.00057       
   decrypt                                   2.54977+-0.01721    ?     2.55940+-0.02334       ?
   deltablue                        x2       0.11906+-0.00251    ?     0.12512+-0.00772       ? might be 1.0509x slower
   earley                                    0.23876+-0.00222    !     0.24311+-0.00131       ! definitely 1.0182x slower
   boyer                                     4.08303+-0.06643    ?     4.16980+-0.11650       ? might be 1.0213x slower
   navier-stokes                    x2       4.60187+-0.03652          4.58881+-0.02319       
   raytrace                         x2       0.66302+-0.00587    ?     0.66801+-0.00296       ?
   richards                         x2       0.07876+-0.00123          0.07816+-0.00078       
   splay                            x2       0.31729+-0.00947          0.31489+-0.00642       
   regexp                           x2      16.14372+-1.02212         16.07079+-0.91220       
   pdfjs                            x2      40.55879+-1.48527    ?    40.70498+-0.81888       ?
   mandreel                         x2      39.67059+-0.44861    ?    39.96994+-0.36386       ?
   gbemu                            x2      28.73509+-0.19885    ^    28.32307+-0.18504       ^ definitely 1.0145x faster
   closure                                   0.46418+-0.00242    ?     0.46541+-0.00263       ?
   jquery                                    6.29335+-0.02710    ?     6.31295+-0.04351       ?
   box2d                            x2       8.72286+-0.04169          8.65844+-0.04663       
   zlib                             x2     338.36141+-1.15147        334.31428+-9.66438         might be 1.0121x faster
   typescript                       x2     609.74150+-9.39796        600.95837+-8.22919         might be 1.0146x faster

   &lt;geometric&gt;                               4.71572+-0.03024    ?     4.72121+-0.03330       ? might be 1.0012x slower

                                                TipOfTree                   Things                                      
Kraken:
   ai-astar                                   89.479+-1.529             88.281+-2.154           might be 1.0136x faster
   audio-beat-detection                       35.365+-0.158      ?      35.630+-0.708         ?
   audio-dft                                  93.753+-3.230      ?      95.301+-3.322         ? might be 1.0165x slower
   audio-fft                                  27.891+-1.381             27.597+-0.360           might be 1.0106x faster
   audio-oscillator                           43.963+-2.397             42.928+-1.083           might be 1.0241x faster
   imaging-darkroom                           55.661+-0.614      ?      57.176+-2.403         ? might be 1.0272x slower
   imaging-desaturate                         44.491+-4.332             41.529+-1.227           might be 1.0713x faster
   imaging-gaussian-blur                      58.366+-2.593      ?      58.746+-3.943         ?
   json-parse-financial                       32.096+-0.254      ?      33.708+-1.515         ? might be 1.0502x slower
   json-stringify-tinderbox                   22.377+-1.317             20.960+-1.285           might be 1.0676x faster
   stanford-crypto-aes                        34.369+-0.588      ?      34.711+-0.208         ?
   stanford-crypto-ccm                        32.435+-2.721      ?      35.215+-3.871         ? might be 1.0857x slower
   stanford-crypto-pbkdf2                     89.275+-1.657      ?      89.751+-1.122         ?
   stanford-crypto-sha256-iterative           29.507+-0.405      ?      29.514+-0.178         ?

   &lt;arithmetic&gt;                               49.216+-0.309      ?      49.361+-0.718         ? might be 1.0029x slower

                                                TipOfTree                   Things                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           26.0305+-0.0912           25.9320+-0.0906          might be 1.0038x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250310</commentid>
    <comment_count>50</comment_count>
      <attachid>294512</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 11:27:21 -0800</bug_when>
    <thetext>Created attachment 294512
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250312</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-11 11:29:43 -0800</bug_when>
    <thetext>Attachment 294512 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:508:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:549:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:552:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:555:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:576:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:580:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:676:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:676:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 63 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250360</commentid>
    <comment_count>52</comment_count>
      <attachid>294526</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 13:07:14 -0800</bug_when>
    <thetext>Created attachment 294526
fix some build errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250364</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-11 13:09:11 -0800</bug_when>
    <thetext>Attachment 294526 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:508:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:549:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:552:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:555:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:576:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:580:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:676:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:676:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 64 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250376</commentid>
    <comment_count>54</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-11 13:33:59 -0800</bug_when>
    <thetext>r=me

&gt; Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp:67
&gt; +        

Revert.

&gt; Source/JavaScriptCore/heap/CellState.h:40
&gt; +    // The object is going to be is in eden. During GC, this means that the object has not been marked yet.

I think you meant &quot;is going to be in eden&quot;.

I&apos;m not sure what you mean by the future tense here. Where are you before you are in eden?

&gt; Source/JavaScriptCore/heap/ResumeTheWorldScope.h:24
&gt; + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
&gt; + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
&gt; + * THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */

Where&apos;s the rest of this? :P

&gt; Source/JavaScriptCore/jit/Repatch.cpp:221
&gt; +            

Revert.

&gt; Source/JavaScriptCore/runtime/JSCell.h:121
&gt; +    void lockInternalLock();
&gt; +    void unlockInternalLock();
&gt; +    
&gt; +    class InternalLocker {
&gt; +    public:
&gt; +        InternalLocker(JSCell* cell)
&gt; +            : m_cell(cell)
&gt; +        {
&gt; +            m_cell-&gt;lockInternalLock();
&gt; +        }
&gt; +        
&gt; +        ~InternalLocker()
&gt; +        {
&gt; +            m_cell-&gt;unlockInternalLock();
&gt; +        }

Why the special naming instead of WTF::Locker and lock()/unlock()?

I&apos;m not sure that it&apos;s meaningful to call out this lock as &quot;internal&quot;. We&apos;re making it public and claiming that it&apos;s available if you need it.

&gt; Source/JavaScriptCore/runtime/JSCell.h:220
&gt; +    // DO NOT store to this field. Always use a CAS loop, since some bits are flipped using CAS

Why are you yelling at me?

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:782
&gt; +    WTF::storeStoreFence();
&gt; +    setButterfly(vm, newButterfly);
&gt; +    setStructure(vm, newStructure);

A little bit surprising that setStructure builds in a fence at the top but setButterfly doesn&apos;t. Kind of feels like either both should or neither should.

When I first read this code, it looked like an obvious missing fence between setButterfly and setStructure.

&gt; Source/JavaScriptCore/runtime/Structure.h:192
&gt; +    // These should be used with caution. Versions that take a func will call it after making the

I would remove &quot;These should be used with caution&quot;. Abstract anxiety is no way to program.

&gt; Source/JavaScriptCore/runtime/Structure.h:673
&gt; +    // This will grab the lock. DO NOT call when holding the Structure&apos;s lock.

Why yelling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250377</commentid>
    <comment_count>55</comment_count>
      <attachid>294526</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-11 13:34:26 -0800</bug_when>
    <thetext>Comment on attachment 294526
fix some build errors

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250391</commentid>
    <comment_count>56</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-11 13:59:03 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGTierUpCheckInjectionPhase.cpp:67
&gt; &gt; +        
&gt; 
&gt; Revert.
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/CellState.h:40
&gt; &gt; +    // The object is going to be is in eden. During GC, this means that the object has not been marked yet.
&gt; 
&gt; I think you meant &quot;is going to be in eden&quot;.
&gt; 
&gt; I&apos;m not sure what you mean by the future tense here. Where are you before
&gt; you are in eden?

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ResumeTheWorldScope.h:24
&gt; &gt; + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
&gt; &gt; + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
&gt; &gt; + * THE POSSIBILITY OF SUCH DAMAGE.
&gt; &gt; + */
&gt; 
&gt; Where&apos;s the rest of this? :P

I moved it to Heap.h/cpp as a nested class of Heap.  I&apos;ll remove this file.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/Repatch.cpp:221
&gt; &gt; +            
&gt; 
&gt; Revert.

Reverted.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCell.h:121
&gt; &gt; +    void lockInternalLock();
&gt; &gt; +    void unlockInternalLock();
&gt; &gt; +    
&gt; &gt; +    class InternalLocker {
&gt; &gt; +    public:
&gt; &gt; +        InternalLocker(JSCell* cell)
&gt; &gt; +            : m_cell(cell)
&gt; &gt; +        {
&gt; &gt; +            m_cell-&gt;lockInternalLock();
&gt; &gt; +        }
&gt; &gt; +        
&gt; &gt; +        ~InternalLocker()
&gt; &gt; +        {
&gt; &gt; +            m_cell-&gt;unlockInternalLock();
&gt; &gt; +        }
&gt; 
&gt; Why the special naming instead of WTF::Locker and lock()/unlock()?

I had it this way at first and it was super annoying:

- It would mean also implementing isHeld() or isLocked() or any other extra methods that Locker wants.  This approach frees us up to add more crap to Locker/Lock without having to worry about this lock also implementing all of those things.

- Writing JSCell::Locker locker(*cell), or Locker&lt;JSCell&gt; locker(*cell), led to awkward looking code. The trouble is that many cells, like Structure, also have an explicit lock for their state.  I think that we want to encourage most locking scenarios in subclasses of JSCell to introduce their own lock unless saving that one byte is actually meaningful.  That&apos;s because the more people use this cell lock, the more of a chance we have of overlocking leading to deadlocks.

- Writing cell-&gt;lock()/cell-&gt;unlock() in algorithms that cannot do structured locking was too much for me.  Considering all of the powers that cells have, &quot;locking&quot; them could mean so many things here.  When I first read it back to myself it felt like the &quot;locking&quot; had some other meaning, like that it was another word for &quot;pinning&quot;.  That&apos;s how it reads when you see it in visitChildren().

I wanted unstructured locking code to look like it&apos;s actually locking a lock.  Then the other benefits - not having to implement all of the things that Locker/Lock do for each other and a more explicit syntax for structured locking - were icing.

&gt; 
&gt; I&apos;m not sure that it&apos;s meaningful to call out this lock as &quot;internal&quot;. We&apos;re
&gt; making it public and claiming that it&apos;s available if you need it.

Not quite.  A public lock would be like the Java object monitor, which is a user-visible (as in, Java has syntax for locking it) lock.  This lock is not visible in that way and never will be.  It&apos;s for locking internal stuff that the user does not see.

It&apos;s important to call out the fact that this lock is already used internally, so that other clients know that they have to consider if their use of it would cause overlocking.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCell.h:220
&gt; &gt; +    // DO NOT store to this field. Always use a CAS loop, since some bits are flipped using CAS
&gt; 
&gt; Why are you yelling at me?

I&apos;ll downcase it.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.cpp:782
&gt; &gt; +    WTF::storeStoreFence();
&gt; &gt; +    setButterfly(vm, newButterfly);
&gt; &gt; +    setStructure(vm, newStructure);
&gt; 
&gt; A little bit surprising that setStructure builds in a fence at the top but
&gt; setButterfly doesn&apos;t. Kind of feels like either both should or neither
&gt; should.

A fraction of setButterfly() clients either avoid the fence altogether or accomplish the same effect through other means.

&gt; 
&gt; When I first read this code, it looked like an obvious missing fence between
&gt; setButterfly and setStructure.

Yeah, it&apos;s weird.  I want to get a bit more experience with this before I come up with some idiom.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Structure.h:192
&gt; &gt; +    // These should be used with caution. Versions that take a func will call it after making the
&gt; 
&gt; I would remove &quot;These should be used with caution&quot;. Abstract anxiety is no
&gt; way to program.

Removed.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Structure.h:673
&gt; &gt; +    // This will grab the lock. DO NOT call when holding the Structure&apos;s lock.
&gt; 
&gt; Why yelling?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250663</commentid>
    <comment_count>57</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-12 08:37:50 -0800</bug_when>
    <thetext>It just ran splay to completion.


[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js --logGC=true --useConcurrentGC=true
[GC: START 33552 kb =&gt; EdenCollection, i#1 345+0 0.493677 ms...]
[GC: i#2 8+184 0.658550 ms...]
[GC: i#3 9+959 i#4 36429 kb, 0.957367 ms, cycle 14.717856 ms END]
[GC: START 70425 kb =&gt; FullCollection, i#1 347+0 0.153287 ms...]
[GC: i#2 12+93 0.306163 ms...]
[GC: i#3 9+432 0.782913 ms...]
[GC: i#4 11+1046 2.710367 ms...]
[GC: i#5 9+798 i#6 62896 kb, 0.969871 ms, cycle 26.478055 ms END]
[GC: START 128337 kb =&gt; EdenCollection, i#1 9+7770 0.167695 ms...]
[GC: i#2 7+3895 i#3 135788 kb, 1.384540 ms, cycle 18.322498 ms END]
[GC: START 202184 kb =&gt; FullCollection, i#1 349+0 0.142073 ms...]
[GC: i#2 13+145 0.350907 ms...]
[GC: i#3 8+1108 1.233849 ms...]
[GC: i#4 8+872 0.622759 ms...]
[GC: i#5 8+539 0.153844 ms...]
[GC: i#6 7+144 0.081525 ms...]
[GC: i#7 5+112 0.086980 ms...]
[GC: i#8 8+156 0.141430 ms...]
[GC: i#9 5+45 0.078518 ms...]
[GC: i#10 8+96 0.091217 ms...]
[GC: i#11 62917 kb, 0.134931 ms, cycle 16.691951 ms END]
[GC: START 205968 kb =&gt; EdenCollection, i#1 9+7708 0.110673 ms...]
[GC: i#2 8+3430 i#3 135801 kb, 1.141117 ms, cycle 16.588162 ms END]
[GC: START 206139 kb =&gt; FullCollection, i#1 349+0 0.275543 ms...]
[GC: i#2 10+208 0.448791 ms...]
[GC: i#3 10+1172 0.964068 ms...]
[GC: i#4 8+758 i#5 62633 kb, 0.635055 ms, cycle 16.055565 ms END]
[GC: START 206607 kb =&gt; EdenCollection, i#1 8+7745 0.084319 ms...]
[GC: i#2 9+3043 1.743988 ms...]
[GC: i#3 9+288 0.255459 ms...]
[GC: i#4 9+175 0.080615 ms...]
[GC: i#5 9+170 0.086541 ms...]
[GC: i#6 8+226 0.130024 ms...]
[GC: i#7 8+283 0.117449 ms...]
[GC: i#8 5+164 0.077049 ms...]
[GC: i#9 8+247 0.132028 ms...]
[GC: i#10 9+83 0.113649 ms...]
[GC: i#11 7+83 i#12 128445 kb, 0.158100 ms, cycle 18.573709 ms END]
[GC: START 206777 kb =&gt; FullCollection, i#1 350+0 0.110767 ms...]
[GC: i#2 12+289 0.388857 ms...]
[GC: i#3 10+1992 2.134810 ms...]
[GC: i#4 11+1003 i#5 64323 kb, 0.902219 ms, cycle 18.473984 ms END]
[GC: START 206636 kb =&gt; EdenCollection, i#1 7+7750 0.103415 ms...]
[GC: i#2 9+4725 i#3 145356 kb, 2.461469 ms, cycle 20.416298 ms END]
[GC: START 213050 kb =&gt; FullCollection, i#1 349+0 0.115077 ms...]
[GC: i#2 9+101 1.644228 ms...]
[GC: i#3 9+760 0.817250 ms...]
[GC: i#4 11+1249 1.262071 ms...]
[GC: i#5 7+1016 0.941544 ms...]
[GC: i#6 8+702 0.349539 ms...]
[GC: i#7 10+616 0.514468 ms...]
[GC: i#8 3+834 i#9 65649 kb, 0.610961 ms, cycle 23.119675 ms END]
[GC: START 221742 kb =&gt; EdenCollection, i#1 9+7744 0.109100 ms...]
[GC: i#2 8+4519 2.154213 ms...]
[GC: i#3 8+76 0.156852 ms...]
[GC: i#4 140522 kb, 0.194921 ms, cycle 19.053011 ms END]
[GC: START 221917 kb =&gt; FullCollection, i#1 351+0 0.111211 ms...]
[GC: i#2 12+307 0.347665 ms...]
[GC: i#3 8+1586 1.158651 ms...]
[GC: i#4 7+1414 i#5 64305 kb, 1.441439 ms, cycle 18.203774 ms END]
[GC: START 221740 kb =&gt; EdenCollection, i#1 9+7759 0.297416 ms...]
[GC: i#2 9+3089 i#3 132632 kb, 1.145373 ms, cycle 16.192337 ms END]
[GC: START 221900 kb =&gt; FullCollection, i#1 351+0 0.139488 ms...]
[GC: i#2 7+141 0.305244 ms...]
[GC: i#3 12+668 0.953892 ms...]
[GC: i#4 9+1594 1.001086 ms...]
[GC: i#5 9+1980 0.809432 ms...]
[GC: i#6 9+726 0.761457 ms...]
[GC: i#7 67168 kb, 0.148359 ms, cycle 20.699763 ms END]
[GC: START 221746 kb =&gt; EdenCollection, i#1 11+7768 0.100670 ms...]
[GC: i#2 9+4479 i#3 143538 kb, 1.917751 ms, cycle 17.648050 ms END]
[GC: START 221966 kb =&gt; FullCollection, i#1 351+0 0.111489 ms...]
[GC: i#2 11+481 0.465944 ms...]
[GC: i#3 9+1696 2.086538 ms...]
[GC: i#4 9+1409 0.416029 ms...]
[GC: i#5 6+273 0.110681 ms...]
[GC: i#6 7+117 0.066533 ms...]
[GC: i#7 10+151 0.098774 ms...]
[GC: i#8 64739 kb, 0.156934 ms, cycle 19.486586 ms END]
[GC: START 222568 kb =&gt; EdenCollection, i#1 9+7741 0.107954 ms...]
[GC: i#2 8+2532 i#3 130598 kb, 1.330904 ms, cycle 16.178564 ms END]
[GC: START 222722 kb =&gt; FullCollection, i#1 348+0 0.124211 ms...]
[GC: i#2 7+180 0.383652 ms...]
[GC: i#3 9+814 0.828189 ms...]
[GC: i#4 9+1695 0.746712 ms...]
[GC: i#5 8+1096 i#6 64991 kb, 1.495309 ms, cycle 20.386965 ms END]
[GC: START 222570 kb =&gt; EdenCollection, i#1 8+7714 0.265154 ms...]
[GC: i#2 9+4620 i#3 142279 kb, 1.723424 ms, cycle 17.096983 ms END]
[GC: START 222751 kb =&gt; FullCollection, i#1 350+0 0.116664 ms...]
[GC: i#2 14+105 1.445953 ms...]
[GC: i#3 9+466 3.536442 ms...]
[GC: i#4 11+1354 1.086112 ms...]
[GC: i#5 6+2102 0.854720 ms...]
[GC: i#6 8+1422 0.493480 ms...]
[GC: i#7 7+383 0.148204 ms...]
[GC: i#8 10+290 0.126087 ms...]
[GC: i#9 9+207 0.145574 ms...]
[GC: i#10 9+52 0.083253 ms...]
[GC: i#11 9+125 i#12 67036 kb, 0.298968 ms, cycle 22.364535 ms END]
[GC: START 222574 kb =&gt; EdenCollection, i#1 8+7742 0.096524 ms...]
[GC: i#2 7+4178 i#3 141902 kb, 1.688369 ms, cycle 17.184940 ms END]
[GC: START 222749 kb =&gt; FullCollection, i#1 349+0 0.116925 ms...]
[GC: i#2 13+250 4.387247 ms...]
[GC: i#3 10+932 1.395902 ms...]
[GC: i#4 8+1517 0.717660 ms...]
[GC: i#5 5+1523 0.538628 ms...]
[GC: i#6 9+721 0.246575 ms...]
[GC: i#7 8+49 0.060293 ms...]
[GC: i#8 8+138 0.106571 ms...]
[GC: i#9 8+138 0.138051 ms...]
[GC: i#10 65603 kb, 0.161353 ms, cycle 20.440389 ms END]
[GC: START 222571 kb =&gt; EdenCollection, i#1 7+7782 0.130068 ms...]
[GC: i#2 9+2559 i#3 132213 kb, 0.982078 ms, cycle 14.110867 ms END]
[GC: START 222727 kb =&gt; FullCollection, i#1 351+0 0.141261 ms...]
[GC: i#2 9+81 1.401724 ms...]
[GC: i#3 8+723 0.636521 ms...]
[GC: i#4 8+1545 0.828285 ms...]
[GC: i#5 8+2477 1.106273 ms...]
[GC: i#6 8+1830 i#7 69647 kb, 1.537630 ms, cycle 20.733063 ms END]
[GC: START 222579 kb =&gt; EdenCollection, i#1 6+7759 0.128467 ms...]
[GC: i#2 9+4756 i#3 153394 kb, 1.918306 ms, cycle 17.054953 ms END]
[GC: START 226856 kb =&gt; FullCollection, i#1 350+0 0.148927 ms...]
[GC: i#2 11+185 0.415485 ms...]
[GC: i#3 8+1293 0.953984 ms...]
[GC: i#4 9+1915 1.929904 ms...]
[GC: i#5 5+704 0.554566 ms...]
[GC: i#6 65451 kb, 0.219520 ms, cycle 20.218291 ms END]
[GC: START 236282 kb =&gt; EdenCollection, i#1 7+7722 0.113512 ms...]
[GC: i#2 8+4688 i#3 144558 kb, 1.909833 ms, cycle 16.823561 ms END]
[GC: START 236467 kb =&gt; FullCollection, i#1 348+0 0.162479 ms...]
[GC: i#2 10+166 0.277648 ms...]
[GC: i#3 3+739 0.536537 ms...]
[GC: i#4 10+2139 1.116680 ms...]
[GC: i#5 5+2451 0.956691 ms...]
[GC: i#6 6+1453 0.583437 ms...]
[GC: i#7 9+395 i#8 70605 kb, 0.505515 ms, cycle 19.491891 ms END]
[GC: START 236294 kb =&gt; EdenCollection, i#1 9+7798 0.217509 ms...]
[GC: i#2 6+4673 i#3 153915 kb, 1.897575 ms, cycle 19.039989 ms END]
[GC: START 236488 kb =&gt; FullCollection, i#1 350+0 0.241788 ms...]
[GC: i#2 10+105 0.288954 ms...]
[GC: i#3 8+1137 1.028772 ms...]
[GC: i#4 7+1724 0.870082 ms...]
[GC: i#5 9+1241 0.344709 ms...]
[GC: i#6 9+710 0.231342 ms...]
[GC: i#7 3+554 0.240464 ms...]
[GC: i#8 9+37 0.075323 ms...]
[GC: i#9 8+85 0.102286 ms...]
[GC: i#10 7+80 0.156847 ms...]
[GC: i#11 8+101 i#12 65921 kb, 0.291412 ms, cycle 18.211521 ms END]
[GC: START 236650 kb =&gt; EdenCollection, i#1 8+7718 0.134933 ms...]
[GC: i#2 11+4969 2.192672 ms...]
[GC: i#3 9+418 0.070402 ms...]
[GC: i#4 5+283 0.148422 ms...]
[GC: i#5 9+279 0.101878 ms...]
[GC: i#6 8+307 0.160850 ms...]
[GC: i#7 5+171 0.146026 ms...]
[GC: i#8 8+60 0.106129 ms...]
[GC: i#9 7+84 i#10 146143 kb, 0.262091 ms, cycle 21.332575 ms END]
[GC: START 236900 kb =&gt; FullCollection, i#1 349+0 0.270664 ms...]
[GC: i#2 10+22 0.163579 ms...]
[GC: i#3 10+291 0.659343 ms...]
[GC: i#4 8+1863 1.338649 ms...]
[GC: i#5 9+1674 0.692794 ms...]
[GC: i#6 3+933 0.246438 ms...]
[GC: i#7 8+316 0.104300 ms...]
[GC: i#8 8+204 0.111138 ms...]
[GC: i#9 8+164 0.110242 ms...]
[GC: i#10 7+108 0.116370 ms...]
[GC: i#11 65809 kb, 0.135361 ms, cycle 18.300530 ms END]
[GC: START 236682 kb =&gt; EdenCollection, i#1 7+7763 0.100141 ms...]
[GC: i#2 8+4578 i#3 143648 kb, 1.885794 ms, cycle 18.765390 ms END]
[GC: START 236864 kb =&gt; FullCollection, i#1 352+0 0.138014 ms...]
[GC: i#2 13+119 0.279890 ms...]
[GC: i#3 9+585 0.842670 ms...]
[GC: i#4 8+1552 1.038273 ms...]
[GC: i#5 9+1721 0.717225 ms...]
[GC: i#6 9+1737 0.828479 ms...]
[GC: i#7 7+623 i#8 68478 kb, 0.434242 ms, cycle 21.511182 ms END]
[GC: START 236688 kb =&gt; EdenCollection, i#1 10+7758 0.111822 ms...]
[GC: i#2 8+4387 i#3 149760 kb, 1.616397 ms, cycle 19.885638 ms END]
[GC: START 236879 kb =&gt; FullCollection, i#1 349+0 0.139003 ms...]
[GC: i#2 7+250 0.370981 ms...]
[GC: i#3 9+498 1.011678 ms...]
[GC: i#4 6+1508 0.835044 ms...]
[GC: i#5 7+1951 0.743418 ms...]
[GC: i#6 9+1368 0.458694 ms...]
[GC: i#7 7+678 0.315960 ms...]
[GC: i#8 7+74 0.097509 ms...]
[GC: i#9 9+61 0.119802 ms...]
[GC: i#10 67195 kb, 0.148897 ms, cycle 20.963915 ms END]
[GC: START 236685 kb =&gt; EdenCollection, i#1 10+7751 0.128840 ms...]
[GC: i#2 9+3281 i#3 144633 kb, 0.997987 ms, cycle 18.146723 ms END]
[GC: START 236866 kb =&gt; FullCollection, i#1 350+0 0.143923 ms...]
[GC: i#2 10+114 0.232214 ms...]
[GC: i#3 9+687 0.536601 ms...]
[GC: i#4 10+1400 1.003170 ms...]
[GC: i#5 10+2230 1.360193 ms...]
[GC: i#6 9+1681 0.587208 ms...]
[GC: i#7 10+644 0.208629 ms...]
[GC: i#8 10+223 0.114591 ms...]
[GC: i#9 10+287 0.178421 ms...]
[GC: i#10 4+11 i#11 69487 kb, 0.229193 ms, cycle 20.639782 ms END]
[GC: START 236690 kb =&gt; EdenCollection, i#1 7+7773 0.121401 ms...]
[GC: i#2 9+4564 i#3 153179 kb, 2.065649 ms, cycle 18.096229 ms END]
[GC: START 236886 kb =&gt; FullCollection, i#1 350+0 0.140237 ms...]
[GC: i#2 12+481 0.455854 ms...]
[GC: i#3 8+1608 0.751927 ms...]
[GC: i#4 8+1582 1.716295 ms...]
[GC: i#5 8+247 0.298860 ms...]
[GC: i#6 8+212 0.157799 ms...]
[GC: i#7 6+74 0.063702 ms...]
[GC: i#8 8+131 0.093912 ms...]
[GC: i#9 8+102 0.098492 ms...]
[GC: i#10 7+90 0.117927 ms...]
[GC: i#11 8+49 i#12 66085 kb, 0.267969 ms, cycle 20.602876 ms END]
[GC: START 239595 kb =&gt; EdenCollection, i#1 7+7742 0.120198 ms...]
[GC: i#2 6+5011 2.308638 ms...]
[GC: i#3 4+211 0.056816 ms...]
[GC: i#4 7+99 0.056386 ms...]
[GC: i#5 9+122 0.074453 ms...]
[GC: i#6 9+157 0.052663 ms...]
[GC: i#7 7+197 0.065547 ms...]
[GC: i#8 8+133 0.111621 ms...]
[GC: i#9 9+160 0.111678 ms...]
[GC: i#10 7+107 i#11 150077 kb, 0.178242 ms, cycle 21.706230 ms END]
[GC: START 239791 kb =&gt; FullCollection, i#1 349+0 0.122602 ms...]
[GC: i#2 11+34 0.154777 ms...]
[GC: i#3 8+2116 2.672754 ms...]
[GC: i#4 7+1793 0.713733 ms...]
[GC: i#5 9+367 0.075066 ms...]
[GC: i#6 7+272 0.084564 ms...]
[GC: i#7 8+294 0.100427 ms...]
[GC: i#8 5+275 0.129154 ms...]
[GC: i#9 5+9 0.084621 ms...]
[GC: i#10 5+101 i#11 66427 kb, 0.247166 ms, cycle 16.903431 ms END]
[GC: START 239595 kb =&gt; EdenCollection, i#1 9+7738 0.119798 ms...]
[GC: i#2 9+4209 i#3 146487 kb, 1.819645 ms, cycle 19.573858 ms END]
[GC: START 239783 kb =&gt; FullCollection, i#1 349+0 0.149297 ms...]
[GC: i#2 12+57 0.218939 ms...]
[GC: i#3 9+632 0.644771 ms...]
[GC: i#4 11+1057 1.625485 ms...]
[GC: i#5 8+1190 0.732295 ms...]
[GC: i#6 9+133 0.235577 ms...]
[GC: i#7 8+101 0.091153 ms...]
[GC: i#8 6+234 0.138114 ms...]
[GC: i#9 8+37 0.085238 ms...]
[GC: i#10 63555 kb, 0.145265 ms, cycle 19.143424 ms END]
[GC: START 239582 kb =&gt; EdenCollection, i#1 10+7742 0.139783 ms...]
[GC: i#2 9+5394 2.294339 ms...]
[GC: i#3 9+797 0.200683 ms...]
[GC: i#4 10+347 0.067734 ms...]
[GC: i#5 8+231 0.113077 ms...]
[GC: i#6 9+171 0.161923 ms...]
[GC: i#7 10+135 0.164770 ms...]
[GC: i#8 149005 kb, 0.151998 ms, cycle 22.839656 ms END]
[GC: START 239781 kb =&gt; FullCollection, i#1 345+0 0.154800 ms...]
[GC: i#2 9+50 0.771658 ms...]
[GC: i#3 8+925 0.948134 ms...]
[GC: i#4 9+1248 0.507021 ms...]
[GC: i#5 8+1369 0.463575 ms...]
[GC: i#6 10+1360 1.199352 ms...]
[GC: i#7 8+1828 1.203025 ms...]
[GC: i#8 8+729 0.335782 ms...]
[GC: i#9 9+205 0.154503 ms...]
[GC: i#10 8+52 0.073380 ms...]
[GC: i#11 9+170 0.179486 ms...]
[GC: i#12 68265 kb, 0.201204 ms, cycle 20.418650 ms END]
[GC: START 239593 kb =&gt; EdenCollection, i#1 8+7740 0.423915 ms...]
[GC: i#2 6+4220 i#3 150499 kb, 1.668941 ms, cycle 19.155693 ms END]
[GC: START 239785 kb =&gt; FullCollection, i#1 347+0 0.109034 ms...]
[GC: i#2 13+291 0.360502 ms...]
[GC: i#3 9+1193 0.689599 ms...]
[GC: i#4 9+1295 1.719639 ms...]
[GC: i#5 8+1256 0.558618 ms...]
[GC: i#6 9+589 0.177416 ms...]
[GC: i#7 11+310 0.122692 ms...]
[GC: i#8 9+170 0.096054 ms...]
[GC: i#9 8+91 0.110333 ms...]
[GC: i#10 65644 kb, 0.150167 ms, cycle 20.876351 ms END]
[GC: START 239587 kb =&gt; EdenCollection, i#1 9+7705 0.088938 ms...]
[GC: i#2 8+5039 2.357460 ms...]
[GC: i#3 8+63 0.060488 ms...]
[GC: i#4 9+107 0.055076 ms...]
[GC: i#5 9+185 0.062049 ms...]
[GC: i#6 7+202 0.066995 ms...]
[GC: i#7 8+114 0.100512 ms...]
[GC: i#8 9+94 0.072313 ms...]
[GC: i#9 10+113 0.086729 ms...]
[GC: i#10 5+111 i#11 148081 kb, 0.187620 ms, cycle 21.791070 ms END]
[GC: START 239780 kb =&gt; FullCollection, i#1 347+0 0.126674 ms...]
[GC: i#2 10+6 0.113702 ms...]
[GC: i#3 10+118 0.254016 ms...]
[GC: i#4 5+698 0.799605 ms...]
[GC: i#5 9+1774 1.117500 ms...]
[GC: i#6 9+1605 1.675619 ms...]
[GC: i#7 9+636 0.755726 ms...]
[GC: i#8 8+202 0.119626 ms...]
[GC: i#9 7+96 0.081232 ms...]
[GC: i#10 9+82 i#11 66517 kb, 0.229561 ms, cycle 21.122538 ms END]
[GC: START 239590 kb =&gt; EdenCollection, i#1 2+7765 0.112371 ms...]
[GC: i#2 10+4436 i#3 146380 kb, 1.828413 ms, cycle 16.068947 ms END]
[GC: START 239777 kb =&gt; FullCollection, i#1 350+0 0.116288 ms...]
[GC: i#2 9+162 0.297433 ms...]
[GC: i#3 5+1060 0.931635 ms...]
[GC: i#4 9+2126 0.933850 ms...]
[GC: i#5 9+1506 i#6 66649 kb, 1.019943 ms, cycle 18.154967 ms END]
[GC: START 239590 kb =&gt; EdenCollection, i#1 9+7695 0.272865 ms...]
[GC: i#2 9+5164 2.150236 ms...]
[GC: i#3 10+251 0.077299 ms...]
[GC: i#4 10+184 0.053418 ms...]
[GC: i#5 10+148 0.053592 ms...]
[GC: i#6 11+241 0.061538 ms...]
[GC: i#7 9+159 0.079254 ms...]
[GC: i#8 8+148 0.087755 ms...]
[GC: i#9 8+111 0.108831 ms...]
[GC: i#10 9+178 0.144233 ms...]
[GC: i#11 5+55 i#12 150619 kb, 0.140252 ms, cycle 20.551483 ms END]
[GC: START 239786 kb =&gt; FullCollection, i#1 348+0 0.129918 ms...]
[GC: i#2 10+71 0.219653 ms...]
[GC: i#3 9+853 0.971183 ms...]
[GC: i#4 8+1432 0.663677 ms...]
[GC: i#5 3+2030 0.693010 ms...]
[GC: i#6 9+1768 0.747446 ms...]
[GC: i#7 10+615 0.220639 ms...]
[GC: i#8 9+256 0.145777 ms...]
[GC: i#9 68227 kb, 0.136160 ms, cycle 19.080062 ms END]
[GC: START 239594 kb =&gt; EdenCollection, i#1 9+7728 0.090539 ms...]
[GC: i#2 6+3593 1.686293 ms...]
[GC: i#3 9+637 0.242231 ms...]
[GC: i#4 9+242 0.102872 ms...]
[GC: i#5 10+188 0.103467 ms...]
[GC: i#6 9+220 0.086800 ms...]
[GC: i#7 6+394 0.097491 ms...]
[GC: i#8 8+247 0.139882 ms...]
[GC: i#9 9+103 0.159150 ms...]
[GC: i#10 2+7 0.117144 ms...]
[GC: i#11 9+89 0.121952 ms...]
[GC: i#12 140794 kb, 0.156483 ms, cycle 18.471052 ms END]
[GC: START 239762 kb =&gt; FullCollection, i#1 344+0 0.110482 ms...]
[GC: i#2 13+176 0.551590 ms...]
[GC: i#3 9+1112 0.711363 ms...]
[GC: i#4 9+1469 1.134194 ms...]
[GC: i#5 9+1102 0.399878 ms...]
[GC: i#6 8+75 0.052591 ms...]
[GC: i#7 7+112 0.086660 ms...]
[GC: i#8 9+140 0.110441 ms...]
[GC: i#9 8+77 0.083647 ms...]
[GC: i#10 8+58 0.108189 ms...]
[GC: i#11 64879 kb, 0.174481 ms, cycle 18.594738 ms END]
[GC: START 239586 kb =&gt; EdenCollection, i#1 9+7748 0.093972 ms...]
[GC: i#2 9+3072 1.608519 ms...]
[GC: i#3 8+94 0.118842 ms...]
[GC: i#4 9+92 0.045508 ms...]
[GC: i#5 131853 kb, 0.165249 ms, cycle 14.332156 ms END]
[GC: START 239742 kb =&gt; FullCollection, i#1 347+0 0.161720 ms...]
[GC: i#2 11+16 0.115995 ms...]
[GC: i#3 8+151 0.578869 ms...]
[GC: i#4 9+916 0.667732 ms...]
[GC: i#5 7+1665 1.389671 ms...]
[GC: i#6 6+1346 i#7 64877 kb, 0.691510 ms, cycle 16.871345 ms END]
[GC: START 239586 kb =&gt; EdenCollection, i#1 9+7722 0.104756 ms...]
[GC: i#2 6+1124 i#3 128249 kb, 0.592552 ms, cycle 14.128793 ms END]
[GC: START 239734 kb =&gt; FullCollection, i#1 347+0 0.139099 ms...]
[GC: i#2 10+53 0.305237 ms...]
[GC: i#3 9+445 0.453785 ms...]
[GC: i#4 5+1356 0.987965 ms...]
[GC: i#5 6+1471 1.789807 ms...]
[GC: i#6 9+832 0.238185 ms...]
[GC: i#7 9+329 0.122481 ms...]
[GC: i#8 9+182 0.091711 ms...]
[GC: i#9 11+216 0.147305 ms...]
[GC: i#10 9+195 i#11 65760 kb, 0.283469 ms, cycle 21.137876 ms END]
[GC: START 239588 kb =&gt; EdenCollection, i#1 8+7763 0.114434 ms...]
[GC: i#2 9+4196 i#3 141149 kb, 1.675027 ms, cycle 16.996666 ms END]
[GC: START 239764 kb =&gt; FullCollection, i#1 350+0 0.153182 ms...]
[GC: i#2 11+155 0.293341 ms...]
[GC: i#3 9+589 0.475373 ms...]
[GC: i#4 11+1773 0.993984 ms...]
[GC: i#5 6+1046 1.318460 ms...]
[GC: i#6 9+1287 0.880922 ms...]
[GC: i#7 9+116 0.179351 ms...]
[GC: i#8 9+96 0.126604 ms...]
[GC: i#9 66647 kb, 0.262754 ms, cycle 20.165564 ms END]
[GC: START 239590 kb =&gt; EdenCollection, i#1 10+7754 0.182523 ms...]
[GC: i#2 9+4993 i#3 149483 kb, 1.980273 ms, cycle 18.194951 ms END]
[GC: START 239911 kb =&gt; FullCollection, i#1 348+0 0.144907 ms...]
[GC: i#2 13+31 0.142213 ms...]
[GC: i#3 8+157 0.262519 ms...]
[GC: i#4 8+917 0.812590 ms...]
[GC: i#5 9+2202 1.532259 ms...]
[GC: i#6 9+1621 i#7 67515 kb, 1.194115 ms, cycle 19.582476 ms END]
[GC: START 239656 kb =&gt; EdenCollection, i#1 9+7764 0.220074 ms...]
[GC: i#2 8+5179 i#3 151537 kb, 2.160553 ms, cycle 19.463687 ms END]
[GC: START 239852 kb =&gt; FullCollection, i#1 347+0 0.201199 ms...]
[GC: i#2 12+311 0.568948 ms...]
[GC: i#3 9+786 0.694300 ms...]
[GC: i#4 9+2402 1.045182 ms...]
[GC: i#5 8+1753 0.606924 ms...]
[GC: i#6 9+600 0.220772 ms...]
[GC: i#7 9+149 0.061052 ms...]
[GC: i#8 8+259 0.121420 ms...]
[GC: i#9 9+170 0.140996 ms...]
[GC: i#10 9+141 0.106559 ms...]
[GC: i#11 9+77 i#12 68110 kb, 0.270406 ms, cycle 19.978482 ms END]
[GC: START 239656 kb =&gt; EdenCollection, i#1 10+7779 0.159743 ms...]
[GC: i#2 6+3998 i#3 144462 kb, 1.338773 ms, cycle 16.424439 ms END]
[GC: START 239835 kb =&gt; FullCollection, i#1 345+0 0.153874 ms...]
[GC: i#2 11+30 0.204773 ms...]
[GC: i#3 9+290 0.347901 ms...]
[GC: i#4 9+873 0.733642 ms...]
[GC: i#5 9+1562 1.773751 ms...]
[GC: i#6 8+1748 1.670817 ms...]
[GC: i#7 9+76 0.077311 ms...]
[GC: i#8 65959 kb, 0.123447 ms, cycle 22.403982 ms END]
[GC: START 239652 kb =&gt; EdenCollection, i#1 8+7759 0.129737 ms...]
[GC: i#2 8+3557 i#3 144140 kb, 1.383083 ms, cycle 20.298647 ms END]
[GC: START 239835 kb =&gt; FullCollection, i#1 344+0 0.135026 ms...]
[GC: i#2 13+90 0.211175 ms...]
[GC: i#3 8+479 0.448289 ms...]
[GC: i#4 10+1600 1.137955 ms...]
[GC: i#5 9+1993 1.190663 ms...]
[GC: i#6 9+661 i#7 66702 kb, 0.502323 ms, cycle 17.886192 ms END]
[GC: START 239654 kb =&gt; EdenCollection, i#1 7+7749 0.089641 ms...]
[GC: i#2 10+4974 2.089595 ms...]
[GC: i#3 9+277 0.071982 ms...]
[GC: i#4 9+294 0.058991 ms...]
[GC: i#5 11+201 0.074735 ms...]
[GC: i#6 9+192 0.083142 ms...]
[GC: i#7 9+151 0.061745 ms...]
[GC: i#8 5+220 0.128029 ms...]
[GC: i#9 9+134 i#10 148324 kb, 0.317600 ms, cycle 19.965729 ms END]
[GC: START 239844 kb =&gt; FullCollection, i#1 348+0 0.285304 ms...]
[GC: i#2 10+155 0.355453 ms...]
[GC: i#3 7+607 0.536182 ms...]
[GC: i#4 7+1443 1.142294 ms...]
[GC: i#5 9+639 0.410027 ms...]
[GC: i#6 10+213 0.094293 ms...]
[GC: i#7 9+192 0.082433 ms...]
[GC: i#8 8+110 0.076096 ms...]
[GC: i#9 9+169 0.124560 ms...]
[GC: i#10 9+69 i#11 63724 kb, 0.231532 ms, cycle 15.913297 ms END]
[GC: START 239647 kb =&gt; EdenCollection, i#1 9+7711 0.087921 ms...]
[GC: i#2 9+4241 i#3 136673 kb, 1.497522 ms, cycle 17.307251 ms END]
[GC: START 239817 kb =&gt; FullCollection, i#1 346+0 0.102463 ms...]
[GC: i#2 11+255 0.341269 ms...]
[GC: i#3 10+1367 0.946089 ms...]
[GC: i#4 9+1547 1.058483 ms...]
[GC: i#5 9+1061 i#6 66163 kb, 1.000371 ms, cycle 18.734569 ms END]
[GC: START 239652 kb =&gt; EdenCollection, i#1 8+7750 0.642057 ms...]
[GC: i#2 8+5025 2.044720 ms...]
[GC: i#3 9+580 0.107944 ms...]
[GC: i#4 9+200 0.121026 ms...]
[GC: i#5 9+127 0.089354 ms...]
[GC: i#6 9+132 0.148741 ms...]
[GC: i#7 10+119 0.103803 ms...]
[GC: i#8 9+73 0.061778 ms...]
[GC: i#9 149291 kb, 0.114866 ms, cycle 19.924793 ms END]
[GC: START 239846 kb =&gt; FullCollection, i#1 347+0 0.152969 ms...]
[GC: i#2 11+8 0.121567 ms...]
[GC: i#3 7+379 0.858722 ms...]
[GC: i#4 9+689 0.581404 ms...]
[GC: i#5 9+920 0.418936 ms...]
[GC: i#6 9+1332 0.637736 ms...]
[GC: i#7 9+1189 0.746882 ms...]
[GC: i#8 9+1274 0.759600 ms...]
[GC: i#9 10+1213 i#10 67196 kb, 0.660051 ms, cycle 18.994065 ms END]
[GC: START 239654 kb =&gt; EdenCollection, i#1 9+7739 0.175211 ms...]
[GC: i#2 9+4508 i#3 146436 kb, 1.511181 ms, cycle 17.454435 ms END]
[GC: START 239839 kb =&gt; FullCollection, i#1 346+0 0.162369 ms...]
[GC: i#2 10+297 0.379543 ms...]
[GC: i#3 9+1027 0.906702 ms...]
[GC: i#4 10+1173 0.994984 ms...]
[GC: i#5 8+1469 0.510077 ms...]
[GC: i#6 9+916 0.292157 ms...]
[GC: i#7 6+206 0.142288 ms...]
[GC: i#8 7+178 0.111034 ms...]
[GC: i#9 8+49 0.098191 ms...]
[GC: i#10 65588 kb, 0.163039 ms, cycle 18.968021 ms END]
[GC: START 239650 kb =&gt; EdenCollection, i#1 9+7754 0.106749 ms...]
[GC: i#2 9+4867 i#3 146244 kb, 1.873473 ms, cycle 16.760680 ms END]
[GC: START 239839 kb =&gt; FullCollection, i#1 346+0 0.128724 ms...]
[GC: i#2 11+74 0.205345 ms...]
[GC: i#3 9+785 0.504610 ms...]
[GC: i#4 9+1967 0.989745 ms...]
[GC: i#5 9+1839 0.614617 ms...]
[GC: i#6 7+1461 0.495846 ms...]
[GC: i#7 8+473 i#8 68924 kb, 0.516365 ms, cycle 16.661626 ms END]
That took 3877.3388862609863 ms.
[pizlo@murderface OpenSource]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250664</commentid>
    <comment_count>58</comment_count>
      <attachid>294613</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-12 09:15:51 -0800</bug_when>
    <thetext>Created attachment 294613
possible patch for landing

Still working on 32-bit.  Still testing ARM64.  Still doing browser benchmark testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250669</commentid>
    <comment_count>59</comment_count>
      <attachid>294616</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-12 09:41:49 -0800</bug_when>
    <thetext>Created attachment 294616
more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250670</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-12 09:44:24 -0800</bug_when>
    <thetext>Attachment 294616 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:549:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:552:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:555:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:576:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:580:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 66 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250689</commentid>
    <comment_count>61</comment_count>
      <attachid>294623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-12 11:35:57 -0800</bug_when>
    <thetext>Created attachment 294623
rebased and fixed

Rebasing uncovered new uses of API I removed.  This fixes those errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250690</commentid>
    <comment_count>62</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-12 11:38:49 -0800</bug_when>
    <thetext>Attachment 294623 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:549:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:552:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:555:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:576:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:580:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 65 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250697</commentid>
    <comment_count>63</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-12 12:28:08 -0800</bug_when>
    <thetext>The store barriers on PutStructure look like they&apos;re too much for ARM.  GC performance is also hurt but not nearly as much as construction time.

Something I can do is teach the DFG and B3 more about the fence in PutStructure.  For example, we don&apos;t need it at all if we hadn&apos;t messed with the butterfly before.  Also, currently the fence removes our ability to do store elimination on PutStructures, which means that we&apos;ll have a long chain of totally unnecessary fences in any object constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250915</commentid>
    <comment_count>64</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-13 19:33:46 -0800</bug_when>
    <thetext>(In reply to comment #63)
&gt; The store barriers on PutStructure look like they&apos;re too much for ARM.  GC
&gt; performance is also hurt but not nearly as much as construction time.
&gt; 
&gt; Something I can do is teach the DFG and B3 more about the fence in
&gt; PutStructure.  For example, we don&apos;t need it at all if we hadn&apos;t messed with
&gt; the butterfly before.  Also, currently the fence removes our ability to do
&gt; store elimination on PutStructures, which means that we&apos;ll have a long chain
&gt; of totally unnecessary fences in any object constructor.

If we always initialize objects upon allocation so that the wilderness of not-yet-initialized properties is zero-filled then we don&apos;t need fences when setting the structure.  That&apos;s pretty sweet.

Last time I plated with this, adding code to initialize stuff upon allocation was not expensive.

I&apos;m attempting this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250916</commentid>
    <comment_count>65</comment_count>
      <attachid>294688</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-13 19:34:08 -0800</bug_when>
    <thetext>Created attachment 294688
with the object initialization and fewer fences</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251005</commentid>
    <comment_count>66</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 09:56:47 -0800</bug_when>
    <thetext>VICTORY!  I&apos;m testing the revised version of the patch that attempts to address ARM&apos;s woes.  For the first time, I worked up the courage to test the concurrent GC in anger.

This is the performance of splay normally (tip of tree or with my patch and --useConcurrentGC=false [i.e. the default]):

[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js
That took 3298.9039421081543 ms.
Above 99.9%: 11.776494979858398 ms.
Above 99%: 10.036780834197998 ms.
Above 97.5%: 4.4260969161987305 ms.
Above 95%: 2.412609100341797 ms.
Above 90%: 1.3552560806274414 ms.
Above 75%: 0.688254451751709 ms.
Above 50%: 0.4552687644958496 ms.
Above 0%: 0.3296610832214355 ms.

&quot;Above 0%&quot; is a funny way of saying &quot;average&quot;.  Notice that normally, there is a 1% chance that one tick of splay will take about 10ms, while usually a tick of splay will take 0.33ms.  That&apos;s a ~30x slow-down that you might randomly experience while doing something in JavaScript, all because the garbage collector interrupted you.

This is the performance of splay with concurrent GC:

[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js --useConcurrentGC=true
That took 3011.0859870910645 ms.
Above 99.9%: 5.75716495513916 ms.
Above 99%: 2.2775816917419434 ms.
Above 97.5%: 1.5731096267700195 ms.
Above 95%: 1.1017203330993652 ms.
Above 90%: 0.7723274230957031 ms.
Above 75%: 0.5373270988464356 ms.
Above 50%: 0.39242477416992183 ms.
Above 0%: 0.3008724212646484 ms.

First of all, notice the &quot;That took&quot; number and ponder its wonderful significance.  This is incredible: splay with concurrent GC runs to completion faster than splay without concurrent GC.  I did not know that this was possible.  All of my previous investigations into concurrent GC showed that having concurrent collector activity slows you down, but about 5%, due to the combination of increased barrier costs, increased allocation costs, memory thrashing (the GC touches all of the heap at least once and this creates tons of contention with the mutator), and extra interruptions (the concurrent GC will tell the mutator to do things more times total than a non-concurrent one).  This GC was indeed engineered to minimize all of those things, except for barrier costs, which are much higher when the collector is running (2x worse if you isolate the cost of a heap cell store), and interruptions (it&apos;s just as bad as grey-stack CMR [my last concurrent GC] - they both interrupt the mutator about 5-10 times per cycle).  It turns out that choosing the crazy Steele-barrier GC strategy worked decisively: splay seems to run between 5-10% *faster* with concurrent GC enabled!  I think this is mostly because I avoided imposing any allocation tax, because the GC is parallel and is engineered to reduce the number of times it touches memory, and because the Steele barrier obliterates the floating garbage problem.

It&apos;s clear that the concurrency is doing its job.  It&apos;s also clear that there is room for improvement.  In the 1% case, your time to completion drops from 10ms to 2.28ms.  That&apos;s a pretty good improvement, but I was hoping for more.  Basically every probability bucket improves, all the way down to the average.

I think that the way to reduce worst-case times further is to reduce barrier costs and add a bit of time slicing to the collector&apos;s self-imposed pauses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251020</commentid>
    <comment_count>67</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 10:29:57 -0800</bug_when>
    <thetext>I measured again, this time with the percentile that JetStream/splay-latency uses: 99.5%.

With concurrent GC:

[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js --useConcurrentGC=true
That took 3049.337148666382 ms.
Above 99.9%: 3.70328426361084 ms.
Above 99.5%: 2.3821544647216797 ms.
Above 99%: 1.983451843261719 ms.
Above 97.5%: 1.4173612594604492 ms.
Above 95%: 1.005887508392334 ms.
Above 90%: 0.7253777980804443 ms.
Above 75%: 0.5205585479736328 ms.
Above 50%: 0.3981184482574463 ms.
Above 0%: 0.30466816425323484 ms.

Without concurrent GC:

[pizlo@murderface OpenSource] DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/jsc splay.js
That took 3216.944932937622 ms.
Above 99.9%: 11.273026466369629 ms.
Above 99.5%: 10.571198463439941 ms.
Above 99%: 9.875433444976807 ms.
Above 97.5%: 4.339852333068848 ms.
Above 95%: 2.3518404960632324 ms.
Above 90%: 1.3059234619140625 ms.
Above 75%: 0.6617779731750488 ms.
Above 50%: 0.44040999412536624 ms.
Above 0%: 0.3214940786361694 ms.

So, the 99.5 percentile improves 4.4x.  That suggests that we will have a 4.4x JetStream/splay-latency progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251060</commentid>
    <comment_count>68</comment_count>
      <attachid>294724</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 11:38:15 -0800</bug_when>
    <thetext>Created attachment 294724
it&apos;s a splay speed-up

I&apos;m still debugging a bunch of issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251061</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 11:40:39 -0800</bug_when>
    <thetext>Attachment 294724 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:549:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:552:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:555:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:576:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:580:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 71 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251099</commentid>
    <comment_count>70</comment_count>
      <attachid>294724</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-11-14 13:06:12 -0800</bug_when>
    <thetext>Comment on attachment 294724
it&apos;s a splay speed-up

Attachment 294724 did not pass mac-debug-ews (mac):
Output: http://webkit-queues.webkit.org/results/2515221

New failing tests:
imported/w3c/web-platform-tests/IndexedDB/key_invalid.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251100</commentid>
    <comment_count>71</comment_count>
      <attachid>294733</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2016-11-14 13:06:16 -0800</bug_when>
    <thetext>Created attachment 294733
Archive of layout-test-results from ews114 for mac-yosemite

The attached test failures were seen while running run-webkit-tests on the mac-debug-ews.
Bot: ews114  Port: mac-yosemite  Platform: Mac OS X 10.10.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251128</commentid>
    <comment_count>72</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 13:56:47 -0800</bug_when>
    <thetext>(In reply to comment #71)
&gt; Created attachment 294733 [details]
&gt; Archive of layout-test-results from ews114 for mac-yosemite
&gt; 
&gt; The attached test failures were seen while running run-webkit-tests on the
&gt; mac-debug-ews.
&gt; Bot: ews114  Port: mac-yosemite  Platform: Mac OS X 10.10.5

I think I have a fix for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251131</commentid>
    <comment_count>73</comment_count>
      <attachid>294738</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 14:03:45 -0800</bug_when>
    <thetext>Created attachment 294738
more fixes

Fixes ARM perf.

Fixes some builds.

Ought to fix a worker destruction crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251132</commentid>
    <comment_count>74</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 14:06:27 -0800</bug_when>
    <thetext>Attachment 294738 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:554:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:557:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:565:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:581:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:585:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 71 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251133</commentid>
    <comment_count>75</comment_count>
      <attachid>294739</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 14:07:05 -0800</bug_when>
    <thetext>Created attachment 294739
more fixes

Removed the useless ResumeHeapAccessScope header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251135</commentid>
    <comment_count>76</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 14:09:43 -0800</bug_when>
    <thetext>Attachment 294739 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:554:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:557:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:565:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:581:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:585:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 69 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251138</commentid>
    <comment_count>77</comment_count>
      <attachid>294740</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 14:14:52 -0800</bug_when>
    <thetext>Created attachment 294740
more fixes

More ARM fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251139</commentid>
    <comment_count>78</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-14 14:17:17 -0800</bug_when>
    <thetext>Attachment 294740 did not pass style-queue:


ERROR: Source/WTF/wtf/LockAlgorithm.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/runtime/JSObject.cpp:178:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/Structure.h:675:  The parameter name &quot;table&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGOperations.cpp:509:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:554:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:557:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:560:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:565:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:581:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:585:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:761:  The parameter name &quot;structure&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 12 in 70 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251176</commentid>
    <comment_count>79</comment_count>
      <attachid>294740</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-11-14 15:25:51 -0800</bug_when>
    <thetext>Comment on attachment 294740
more fixes

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

r=me

I don&apos;t fully understand the fencing rules here. Let&apos;s discuss them in a group meeting. (We&apos;ll need everybody to understand these rules in the end.)

&gt; PerformanceTests/ES6SampleBench/Air/benchmark.js:81
&gt; +        print(&quot;iteration &quot; + iteration);

Revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251299</commentid>
    <comment_count>80</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 17:53:33 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/208720</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251300</commentid>
    <comment_count>81</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 17:53:52 -0800</bug_when>
    <thetext>(In reply to comment #79)
&gt; Comment on attachment 294740 [details]
&gt; more fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=294740&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; I don&apos;t fully understand the fencing rules here. Let&apos;s discuss them in a
&gt; group meeting. (We&apos;ll need everybody to understand these rules in the end.)
&gt; 
&gt; &gt; PerformanceTests/ES6SampleBench/Air/benchmark.js:81
&gt; &gt; +        print(&quot;iteration &quot; + iteration);
&gt; 
&gt; Revert.

Reverted in https://trac.webkit.org/changeset/208721</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251314</commentid>
    <comment_count>82</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-14 18:21:21 -0800</bug_when>
    <thetext>Fixed cloop in https://trac.webkit.org/changeset/208723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251387</commentid>
    <comment_count>83</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-11-14 23:08:06 -0800</bug_when>
    <thetext>It broke the ARMv7 traditional build:
https://build.webkit.org/builders/JSCOnly%20Linux%20ARMv7%20Traditional%20Release/builds/2827

buildfix landed in https://trac.webkit.org/changeset/208728 
(same as you added to the ARMv7 Thumb2 assembler.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251775</commentid>
    <comment_count>84</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 19:29:36 -0800</bug_when>
    <thetext>There was a 1% Octane regression on Mac in the range where this landed. I have not identified which commit caused it but this patch seems the most suspicious in the range.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251777</commentid>
    <comment_count>85</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 19:31:46 -0800</bug_when>
    <thetext>(In reply to comment #84)
&gt; There was a 1% Octane regression on Mac in the range where this landed. I
&gt; have not identified which commit caused it but this patch seems the most
&gt; suspicious in the range.

EarleyBoyer: 5% worse
pdfJS: 6% worse
RayTrace: 6% worse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251779</commentid>
    <comment_count>86</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-11-15 19:36:40 -0800</bug_when>
    <thetext>(In reply to comment #85)
&gt; (In reply to comment #84)
&gt; &gt; There was a 1% Octane regression on Mac in the range where this landed. I
&gt; &gt; have not identified which commit caused it but this patch seems the most
&gt; &gt; suspicious in the range.
&gt; 
&gt; EarleyBoyer: 5% worse
&gt; pdfJS: 6% worse
&gt; RayTrace: 6% worse

Filed &lt;rdar://problem/29281375&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251801</commentid>
    <comment_count>87</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-15 21:21:16 -0800</bug_when>
    <thetext>I&apos;m not sure but it looks like this patch breaks a jsc debug test: https://build.webkit.org/builders/Apple%20El%20Capitan%2032-bit%20JSC%20%28BuildAndTest%29/builds/4220</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294001</attachid>
            <date>2016-11-05 12:05:06 -0700</date>
            <delta_ts>2016-11-05 14:05:14 -0700</delta_ts>
            <desc>something</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30690</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0K
IAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJs
b2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxp
dmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24g
d3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwor
ICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGlj
IGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0
ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJl
YWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxl
ZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFk
T25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVt
YmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxv
dHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFu
IGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1
bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5n
IEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAo
cHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2Rl
QmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5o
ZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6
Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAog
ICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQg
cmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJM
RShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xp
dmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQp
CisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7
CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmts
aXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxB
dXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkp
CkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JW
TShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29y
a2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQor
eworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAoUGxhbk1hcDo6aXRl
cmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0
ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBp
ZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBsYW4t
Pm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6
OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
bG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
cGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJs
b2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
IHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
REZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlmIChERkc6Oldvcmts
aXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQor
ICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7Cisg
ICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyAr
NTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorCit2b2lk
IGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3Mo
Vk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikK
K3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
cmV2aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZH
VGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYg
KzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xp
c3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29t
cGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21w
bGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwog
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFs
bFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29y
a2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0o
Vk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1l
bWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsK
K3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDog
bV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRH
QygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3Vt
ZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAgIH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAg
ICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxkKCk7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiBuYW1lc3BhY2Ugewog
CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlSGVhcFNpemUgPSAzMiAqIE1COyAvLyBBYm91dCAx
LjVYIHRoZSBhdmVyYWdlIHdlYnBhZ2UuCkBAIC0yNDQsNyArMjY3LDggQEAgSGVhcDo6SGVhcChW
TSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAg
ICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFk
cyh0aGlzKQotICAgICwgbV9zbG90VmlzaXRvcigqdGhpcykKKyAgICAsIG1fbXV0YXRvclNsb3RW
aXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQog
ICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1
ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5p
cXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtNDE2LDEyICs0NDAsMTIgQEAgdm9pZCBIZWFw
OjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcgogCiB2b2lkIEhlYXA6OmhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMo
KTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
IH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAg
ICBtX3Nsb3RWaXNpdG9yLmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7
CiB9CiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0SXRlcmF0aW5nKCkKQEAgLTQzOSwyNCArNDYzLDE4
IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTSgqbV92bSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIZWFwOjptYXJrUm9vdHMo
ZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9y
IGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVh
cFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAKICAgICB7CiAgICAg
ICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCi0KICNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAv
LyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxvY2sgZnJvbSBub3cgdW50aWwgd2UncmUg
ZG9uZQpAQCAtNDcxLDcgKzQ4OSw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0
YXJ0VGltZSkKIAogICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNj
b3BlOjpGdWxsKSB7CiAgICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci0gICAgICAg
ICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7CisgICAgICAgICAgICBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFjaygpOwogICAgICAgICB9CiAKICAgICAgICAg
YmVnaW5NYXJraW5nKCk7CkBAIC01MDYsMzAgKzUyNCwxNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgIG1fbXV0YXRv
clNsb3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKICAgICB9CiAgICAgCiAgICAgewogICAg
ICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAg
IFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9v
dHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1f
c2xvdFZpc2l0b3IpOworICAgICAgICBUaW1pbmdTY29wZSBjb252ZXJnZW5jZVRpbWluZ1Njb3Bl
KCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGVhcmx5IGNvbnZlcmdlbmNlIik7CisgICAgICAgIFBh
cmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAg
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CiAgICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0KLSAgICAgICAg
ewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOwotICAgICAgICAgICAgQ29u
c2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwotICAgICAgICAgICAgU3Vw
ZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICAgICAgZ2F0
aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJKU1N0
YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1
ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVz
Y2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdo
dCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1h
cmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3Vy
ZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tz
LT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIAogICAgICAgICB2
aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygp
OwpAQCAtNTQxLDE0ICs1NDYsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogICAgICAgICB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICAgICAgdmlzaXRT
aGFkb3dDaGlja2VuKCk7CiAgICAgICAgIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5l
cygpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6
TWFzdGVyRHJhaW4pOworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKICAgICB9CiAgICAgCi0gICAgVGltaW5n
U2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMg
YWZ0ZXIgY29udmVyZ2VuY2UiKTsKKyAgICBUaW1pbmdTY29wZSBwb3N0Q29udmVyZ2VuY2VUaW1p
bmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBsYXRlIGNvbnZlcmdlbmNlIik7CiAKLSAg
ICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxp
dmVuZXNzIGRlcGVuZHMgb24KLSAgICAvLyB0aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhl
IG9iamVjdCBncmFwaC4KLSAgICB2aXNpdFdlYWtIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Cisg
ICAgbWFya1RvRml4cG9pbnQoaGVhcFJvb3RWaXNpdG9yKTsKIAogICAgIHsKICAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYyLDcgKzU2NSw2
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAogdm9pZCBIZWFw
OjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJsb2Nr
cyk7CiB9CiAKQEAgLTU4OSw2ICs1OTEsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAg
ICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1hcmtpbmciKTsK
ICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAg
ICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIG1f
aml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAgICAgICBUaW1p
bmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNwYWNlLmJlZ2lu
TWFya2luZyIpOwpAQCAtNTk5LDcgKzYwMiw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkK
IHZvaWQgSGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQogewogI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECi0gICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgbV9zbG90
VmlzaXRvcik7CisgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTYwOCwzMCArNjExLDI4IEBAIHZvaWQg
SGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQogICAgIGlmICghbV92bS0+c21hbGxTdHJpbmdzLm5l
ZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9y
KTsKKyAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgIGRhdGFM
b2coIlNtYWxsIHN0cmluZ3M6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBt
X3Nsb3RWaXNpdG9yLmFwcGVuZChyb290cyk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+
YXBwZW5kKHJvb3RzKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgbV9zbG90
VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAg
IGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygp
CiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1i
ZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJ
bmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOworICAgICAgICBERkc6
OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIG1fc2xvdFZp
c2l0b3IpOworICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTcxMCw5ICs3MTEsOSBAQCB2b2lkIEhlYXA6
OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vCiAgICAgICAgIGhlYXBSb290VmlzaXRvci52
aXNpdCgmcGFpci5rZXkpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5n
OjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsIG1fc2xv
dFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCiB2
b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
QEAgLTcyMyw5ICs3MjQsOSBAQCB2b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBS
b290CiAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJr
TGlzdFNldCk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKKyAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVyczpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCiB2b2lkIEhlYXA6
OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKQEAgLTczNyw5ICs3Mzgs
OSBAQCB2b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvCiAgICAgdmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOwogCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJFeGNl
cHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6
XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4o
KTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtNzQ3LDkgKzc0OCw5IEBAIHZvaWQgSGVhcDo6dmlzaXRTdHJvbmdIYW5kbGVz
KEhlYXBSb290VmkKICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7
CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAg
IGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxuIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0
YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKQEAgLTc1Nyw5ICs3NTgsOSBAQCB2b2lkIEhl
YXA6OnZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpCiAgICAgbV9oYW5kbGVTdGFjay52aXNp
dCh2aXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFuZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7
CisgICAgICAgIGRhdGFMb2coIkhhbmRsZSBTdGFjazpcbiIsICptX2NvbmN1cnJlbnRTbG90Vmlz
aXRvcik7CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb25j
dXJyZW50U2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNp
dFNhbXBsaW5nUHJvZmlsZXIoKQpAQCAtNzY3LDExICs3NjgsMTEgQEAgdm9pZCBIZWFwOjp2aXNp
dFNhbXBsaW5nUHJvZmlsZXIoKQogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBp
ZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJv
ZmlsZXIoKSkgewogICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlz
TG9ja2VkKCkpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9y
KTsKKyAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29uY3VycmVudFNsb3RWaXNp
dG9yKTsKICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xv
dFZpc2l0b3IpOworICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpc
biIsICptX2NvbmN1cnJlbnRTbG90VmlzaXRvcik7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5k
b25hdGVBbmREcmFpbigpOworICAgICAgICBtX2NvbmN1cnJlbnRTbG90VmlzaXRvci0+ZG9uYXRl
QW5kRHJhaW4oKTsKICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygp
OwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC03NzksMzkg
Kzc4MCw2NiBAQCB2b2lkIEhlYXA6OnZpc2l0U2FtcGxpbmdQcm9maWxlcigpCiAKIHZvaWQgSGVh
cDo6dmlzaXRTaGFkb3dDaGlja2VuKCkKIHsKLSAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9yKTsKKyAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbigqbV9jb25jdXJyZW50U2xvdFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpCiB7Ci0gICAgbV9qaXRTdHViUm91dGlu
ZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOworICAgIG1faml0U3R1
YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb25jdXJyZW50U2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCBt
X3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxvZygiQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHVi
IFJvdXRpbmVzOlxuIiwgKm1fY29uY3VycmVudFNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBtX2NvbmN1cnJlbnRTbG90VmlzaXRvci0+ZG9u
YXRlQW5kRHJhaW4oKTsKIH0KIAotdm9pZCBIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNp
dG9yJiB2aXNpdG9yKQogewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6dmlzaXRXZWFrSGFuZGxlcyIpOworICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlz
LCAiSGVhcDo6Zml4cG9pbnQiKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICB7CisgICAg
ICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6dmlzaXQgY29uc2VydmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJv
b3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKKyAgICAgICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKKyAgICAgICAgICAgIGdhdGhlclN0YWNrUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKICAgICAgICAgICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRz
Iik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7CiAg
ICAgICAgIH0KICAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgICAgIHZpc2l0
Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNp
dG9yLmlzRW1wdHkoKSkKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29u
Y3VycmVudFNsb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fY29uY3VycmVudFNsb3RWaXNpdG9y
LT5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU2xvdFZpc2l0b3ItPmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGJyZWFrOwotCisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8g
Y29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0
IGFyZQorICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBi
ZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jaworICAgICAgICAv
LyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4g
QWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQorICAgICAgICAvLyBmaXhwb2ludCBj
aGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIuCisgICAgICAgIG1fY29kZUJs
b2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgICAgICBERkc6
OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIHRoaXMgaGVyZSBiZWNhdXNlIHRoZSByZW1lbWJlcmluZyBjb2RlLCBhYm92ZSwgd2ls
bCBwdXQgdGhpbmdzIGluIHRoZQorICAgICAgICAvLyBtdXRhdG9yIHNsb3QgdmlzaXRvci4gQnV0
IHRoaXMgaXMgYWxzbyB0aGUgbW9zdCBwcm9maXRhYmxlIHBsYWNlIHRvIGRvIHRoaXMsIGFuZCB3
ZQorICAgICAgICAvLyBjdXJyZW50bHkgZG9uJ3QgZG8gdGhpcyBhbnl3aGVyZSBlbHNlLiBJdCBt
ZWFucyB0aGF0IGlmIGlmIGFuIG9iamVjdCBnZXRzIGJhcnJpZXJlZCwgd2UKKyAgICAgICAgLy8g
d2lsbCByZXNjYW4gaXQgYXQgdGhlIGxhdGVzdCBwb3NzaWJsZSBwb2ludC4gVGhlIGhvcGUgaXMg
dGhhdCBpZiB5b3UgZG8gc3R1ZmYgbmV3IG9iamVjdHMKKyAgICAgICAgLy8gaW50byBvbGQgb25l
cywgdGhlbiB0aGUgY29sbGVjdG9yIHdpbGwgb25seSBldmVyIGVuZCB1cCBzZWVpbmcgdGhlIHZl
cnkgbmV3ZXN0IGFuZCBzbworICAgICAgICAvLyB5b3Ugd29uJ3QgZ2V0IGEgbG9uZyBkcmFnIG9m
IGZsb2F0aW5nIGdhcmJhZ2UgZnJvbSBtdWx0aXBsZSBzdG9yZXMgdG8gdGhlIHNhbWUgZmllbGQu
CisgICAgICAgIG1fbXV0YXRvclNsb3RWaXNpdG9yLT50cmFuc2ZlclRvKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVz
OlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFu
ZGxlczpcbiIsICptX2NvbmN1cnJlbnRTbG90VmlzaXRvcik7CiAKICAgICAgICAgewotICAgICAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAg
ICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90
VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAg
ICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb25jdXJyZW50U2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3Bl
KCp0aGlzKTsKKyAgICAgICAgICAgIG1fY29uY3VycmVudFNsb3RWaXNpdG9yLT5kb25hdGVBbmRE
cmFpbigpOworICAgICAgICAgICAgbV9jb25jdXJyZW50U2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
ODE5LDcgKzg0Nyw3IEBAIHZvaWQgSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2kK
IHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAg
c2l6ZV90IHZpc2l0Q291bnQgPSBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAg
c2l6ZV90IHZpc2l0Q291bnQgPSBtX2NvbmN1cnJlbnRTbG90VmlzaXRvci0+dmlzaXRDb3VudCgp
OwogICAgICAgICB2aXNpdENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0
YUxvZ0YoIlxuTnVtYmVyIG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBz
ZWNzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CkBAIC04Mjcs
MTQgKzg1NSwxNSBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAg
ICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAg
ICAgbV90b3RhbEJ5dGVzVmlzaXRlZCA9IDA7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhp
c0N5Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRl
ZCgpOworICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPSBtX2NvbmN1cnJlbnRTbG90
VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAg
ICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9
CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgp
OworICAgIG1fY29uY3VycmVudFNsb3RWaXNpdG9yLT5yZXNldCgpOworICAgIG1fbXV0YXRvclNs
b3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBt
X3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7
CkBAIC05ODQsNyArMTAxMyw3IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0
IEpTQ2UKICAgICAvLyAiT2xkR3JleSIgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRo
aW5ncyBpcyB0cnVlLCBidXQgd2UgdXN1YWxseSB0cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQogICAg
IC8vIHNhbWUuCiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0g
ICAgbV9zbG90VmlzaXRvci5hcHBlbmRUb01hcmtTdGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpKTsKKyAgICBtX211dGF0b3JTbG90VmlzaXRvci0+YXBwZW5kVG9NYXJrU3RhY2soY29uc3Rf
Y2FzdDxKU0NlbGwqPihjZWxsKSk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJhZ2Uo
KQpAQCAtMTA5MSwyMSArMTEyMCw2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAg
ICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7CiAgICAgCi0gICAgaWYgKHZtKCktPnR5cGVQcm9m
aWxlcigpKSB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAg
ICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJh
bCgiR0MiKSk7Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgewotICAgICAgICBE
ZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6
aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCi0gICAgICAgICAgICBzZXRHQ0Rp
ZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAgIAotICAgIHZtKCktPnNo
YWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7Ci0gICAgCiAg
ICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUp
IHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcg
R0M6ICIsIG1fY29sbGVjdGlvblNjb3BlLCAiXG4iKTsKQEAgLTExMjUsMTAgKzExMzksNyBAQCB2
b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxp
dmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAg
ICAgICAgCi0gICAgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0
aW9uKCk7CiAgICAgcHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOwogICAgICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2
bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwpAQCAt
MTE5MywxMCArMTIwNCwzNiBAQCB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAgc3RvcFRo
ZU11dGF0b3IoKTsKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAodm0oKS0+
dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVND
SUlMaXRlcmFsKCJHQyIpKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7Cisg
ICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdv
cmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAg
IHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAg
dm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsK
KyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURU
YWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7CisgICAgLy8gQ2FsbGluZyBy
ZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRlcGVuZGluZyBvbiB3aGV0aGVy
IHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlvbiBjeWNsZSBvciB0aGlzIGlz
IGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxlY3Rpb24gY3ljbGU6CisgICAg
Ly8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBhIG5vLW9wIGJlY2F1c2UgcHJl
cGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQorICAgIC8vICAgbGFzdCBhY3Rp
dmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBjeWNsZTogaXQgcmVpbnN0YXRl
cyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RTcGFjZS5yZXN1bWVBbGxvY2F0
aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpAQCAtMTU0OSwx
MSArMTU4Niw2IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAg
ICAgICAgb2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZs
dXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVz
aE9sZFRhYmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkK
IHsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7
CkBAIC0xNTYzLDExICsxNTk1LDYgQEAgdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZl
cigpCiAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIucmVzZXQoKTsKIH0KIAotdm9pZCBIZWFwOjpz
dG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOwot
fQotCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5nKCkKIHsKICAgICBtX29iamVjdFNwYWNl
LnByZXBhcmVGb3JNYXJraW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAyMDg0MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgog
I2luY2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRl
ICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgi
CkBAIC03MSw2ICs3MCw3IEBAIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNz
IFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApA
QCAtMTI5LDcgKzEyOSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2Uo
KSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVU
aHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAg
IFNsb3RWaXNpdG9yJiBtdXRhdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9tdXRhdG9yU2xv
dFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJl
dHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
R0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAg
LTM5MSw2ICszOTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAg
dm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2Nv
cGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9p
ZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApA
QCAtNDIyLDkgKzQyNiw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGls
ZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxl
Y3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAg
IHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9u
KCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAogICAgIHZvaWQgbWFya1Jv
b3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CkBAIC00NDUsNyArNDQ3LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwogICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlj
a2VuKCk7CiAgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAg
ICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJr
VG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50
cyhkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTcs
NyArNTE5LDggQEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVh
ZHM7CiAgICAgCi0gICAgU2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2xvdFZpc2l0b3I+IG1fbXV0YXRvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBv
b2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0
J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQg
aXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9y
eSBmcm9tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJl
dmlzaW9uIDIwODQwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsMjIgQEAgTWFya1N0YWNrQXJy
YXk6Ok1hcmtTdGFja0FycmF5KCkKIHsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6dHJhbnNm
ZXJUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCit7CisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFu
ZCB0aGUgaGVhZCBvZiB0aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBI
ZWFwQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5
U2VnbWVudDxjb25zdCBIZWFwQ2VsbCo+KiBvdGhlckhlYWQgPSBvdGhlci5tX3NlZ21lbnRzLnJl
bW92ZUhlYWQoKTsKKworICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOwor
ICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBwbGFjZXMu
CisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50cy5wdXNo
KG90aGVySGVhZCk7CisKKyAgICB3aGlsZSAoIWlzRW1wdHkoKSkKKyAgICAgICAgb3RoZXIuYXBw
ZW5kKHJlbW92ZUxhc3QoKSk7Cit9CisKIHZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVD
ZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFi
b3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCkBAIC01OCwx
MSArNzQsMTEgQEAgdm9pZCBNYXJrU3RhY2tBcnJheTo6ZG9uYXRlU29tZUNlbGxzVG8oTQogCiAg
ICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUgb3RoZXIgbGlzdCBiZWZv
cmUgd2Ugc3RhcnQgbW92aW5nIHNlZ21lbnRzIGFyb3VuZC4KICAgICAvLyBXZSdsbCBhZGQgdGhl
bSBiYWNrIG9uIG9uY2Ugd2UncmUgZG9uZSBkb25hdGluZy4KLSAgICBHQ0FycmF5U2VnbWVudDxj
b25zdCBKU0NlbGwqPiogbXlIZWFkID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7Ci0gICAgR0NB
cnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMu
cmVtb3ZlSGVhZCgpOworICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEhlYXBDZWxsKj4qIG15SGVh
ZCA9IG1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEhl
YXBDZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOwogCiAg
ICAgd2hpbGUgKHNlZ21lbnRzVG9Eb25hdGUtLSkgewotICAgICAgICBHQ0FycmF5U2VnbWVudDxj
b25zdCBKU0NlbGwqPiogY3VycmVudCA9IG1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgICAg
ICBHQ0FycmF5U2VnbWVudDxjb25zdCBIZWFwQ2VsbCo+KiBjdXJyZW50ID0gbV9zZWdtZW50cy5y
ZW1vdmVIZWFkKCk7CiAgICAgICAgIEFTU0VSVChjdXJyZW50KTsKICAgICAgICAgQVNTRVJUKG1f
bnVtYmVyT2ZTZWdtZW50cyA+IDEpOwogICAgICAgICBvdGhlci5tX3NlZ21lbnRzLnB1c2goY3Vy
cmVudCk7CkBAIC05MCw4ICsxMDYsOCBAQCB2b2lkIE1hcmtTdGFja0FycmF5OjpzdGVhbFNvbWVD
ZWxsc0Zyb20oCiAgICAgLy8gSWYgb3RoZXIgaGFzIGFuIGVudGlyZSBzZWdtZW50LCBzdGVhbCBp
dCBhbmQgcmV0dXJuLgogICAgIGlmIChvdGhlci5tX251bWJlck9mU2VnbWVudHMgPiAxKSB7CiAg
ICAgICAgIC8vIE1vdmUgdGhlIGhlYWRzIG9mIHRoZSBsaXN0cyBhc2lkZS4gV2UnbGwgcHVzaCB0
aGVtIGJhY2sgb24gYWZ0ZXIuCi0gICAgICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+
KiBvdGhlckhlYWQgPSBvdGhlci5tX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKLSAgICAgICAgR0NB
cnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG15SGVhZCA9IG1fc2VnbWVudHMucmVtb3ZlSGVh
ZCgpOworICAgICAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBIZWFwQ2VsbCo+KiBvdGhlckhlYWQg
PSBvdGhlci5tX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICAgICAgR0NBcnJheVNlZ21lbnQ8
Y29uc3QgSGVhcENlbGwqPiogbXlIZWFkID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CiAKICAg
ICAgICAgQVNTRVJUKG90aGVyLm1fc2VnbWVudHMuaGVhZCgpLT5tX3RvcCA9PSBzX3NlZ21lbnRD
YXBhY2l0eSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShy
ZXZpc2lvbiAyMDg0MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxNCArMjksMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWNsYXNzIEpTQ2VsbDsKK2NsYXNzIEhlYXBDZWxsOwogCi1jbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlZEFycmF5PGNvbnN0IEpTQ2VsbCo+IHsKK2NsYXNzIE1hcmtT
dGFja0FycmF5IDogcHVibGljIEdDU2VnbWVudGVkQXJyYXk8Y29uc3QgSGVhcENlbGwqPiB7CiBw
dWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxz
VG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShN
YXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQg
dHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8o
TWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tB
cnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAy
MDg0MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4NCw2ICsxODQsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgUmVzdHJp
Y3RlZCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwg
MS40LCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294004</attachid>
            <date>2016-11-05 14:05:14 -0700</date>
            <delta_ts>2016-11-05 15:33:56 -0700</delta_ts>
            <desc>it actually sort of did some things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36507</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6
a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFu
OjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
Q29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQg
cGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJl
IHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBt
dXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAg
IGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lk
IFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRp
b24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWlu
ZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlz
dGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZp
c2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJv
ZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOwor
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAK
IHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4
NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYp
OworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM2IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVX
b3JsZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXAp
CisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCIuLi5dXG4iKTsKKyAg
ICAgICAgCisgICAgICAgIG1faGVhcC5yZXN1bWVUaGVXb3JsZCgpOworICAgIH0KKyAgICAKKyAg
ICB+UmVzdW1lVGhlV29ybGRTY29wZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxkKCk7
CisKKyAgICAgICAgZGF0YUxvZygiWy4uLiAiKTsKKyAgICAgICAgCisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiBuYW1lc3BhY2UgewogCiBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlSGVhcFNpemUgPSAzMiAqIE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVy
YWdlIHdlYnBhZ2UuCkBAIC0yNDQsNyArMjc0LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBU
eXBlIGhlYXBUeXBlKQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVj
YXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAg
ICwgbV9zbG90VmlzaXRvcigqdGhpcykKKyAgICAsIG1fbXV0YXRvclNsb3RWaXNpdG9yKHN0ZDo6
bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQogICAgICwgbV9oYW5k
bGVTZXQodm0pCiAgICAgLCBtX2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tT
ZXQ+KCkpCiAgICAgLCBtX2ppdFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJS
b3V0aW5lU2V0PigpKQpAQCAtMjY2LDYgKzI5Nyw3IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICNpZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVh
c2VSZWN1cnNpb25Db3VudCgwKQogI2VuZGlmCisgICAgLCBtX3NoYXJlZE1hcmtTdGFjayhzdGQ6
Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhl
YXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkK
ICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRl
KCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwq
IGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBt
X3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFs
aXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxs
U3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDI0ICs0NzEsMTggQEAgdm9pZCBIZWFwOjpjb21wbGV0
ZUFsbEpJVFBsYW5zKCkKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVFdvcmtsaXN0OjppbnN0YW5j
ZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotI2lm
IEVOQUJMRShERkdfSklUKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsK
LSNlbmRpZgogfQogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7
CiAgICAgVGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJr
Um9vdHMiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKG1fc2xv
dFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29u
dmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBiZWZvcmUgY29udmVy
Z2VuY2UiKTsKIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBERkc6OnJlbWVtYmVyQ29k
ZUJsb2NrcygqbV92bSk7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikK
ICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5z
YW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRv
IG93biB0aGUgbG9jayBmcm9tIG5vdyB1bnRpbCB3ZSdyZSBkb25lCkBAIC00NzEsNyArNDk3LDcg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiAgICAgICAgIGlm
IChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpIHsKICAgICAgICAg
ICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuY2xl
YXJNYXJrU3RhY2soKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFy
TWFya1N0YWNrKCk7CiAgICAgICAgIH0KIAogICAgICAgICBiZWdpbk1hcmtpbmcoKTsKQEAgLTUw
NiwzMCArNTMyLDE3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNp
dG9yLmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5k
aWRTdGFydE1hcmtpbmcoKTsKKyAgICAgICAgbV9tdXRhdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0
TWFya2luZygpOwogICAgIH0KICAgICAKICAgICB7CiAgICAgICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVyZ2Vu
Y2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwotICAg
ICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7CisgICAgICAg
IFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9v
dHMgZWFybHkgY29udmVyZ2VuY2UiKTsKKyAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgUmVzdW1lVGhlV29ybGRTY29w
ZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKICAgICAgICAgCi0gICAgICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdT
Y29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNv
bnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2
YXRpdmVSb290cygqdGhpcyk7Ci0gICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVS
b290cyk7Ci0gICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZl
Um9vdHMpOwotICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVS
b290cyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0
byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRo
YXQgYXJlCi0gICAgICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVl
ZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawotICAg
ICAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBh
IGJhcnJpZXIuCi0gICAgICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRs
eUV4ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5kb25hdGVBbmREcmFpbigpOwogCiAgICAgICAgIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCk7CiAgICAgICAgIHZpc2l0U21hbGxTdHJpbmdzKCk7CkBAIC01NDEsMTQgKzU1NCwxMiBA
QCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAgICAgICAgIHZpc2l0
U2FtcGxpbmdQcm9maWxlcigpOwogICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKICAgICAg
ICAgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgICAgIG1fc2xvdFZp
c2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFz
dGVyRHJhaW4pOwogICAgIH0KICAgICAKLSAgICBUaW1pbmdTY29wZSBwb3N0Q29udmVyZ2VuY2VU
aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBjb252ZXJnZW5jZSIpOwor
ICAgIFRpbWluZ1Njb3BlIHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1Jvb3RzIGxhdGUgY29udmVyZ2VuY2UiKTsKIAotICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBt
dXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgotICAg
IC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIHZp
c2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICBtYXJrVG9GaXhwb2ludChoZWFw
Um9vdFZpc2l0b3IpOwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjIsNyArNTczLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9v
dHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1h
cmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290
cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0KIApAQCAtNTg5LDYgKzU5
OSw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdT
Y29wZSgqdGhpcywgIkhlYXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25T
Y29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xl
YXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFy
TWFya3MoKTsKICAgICAKICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1p
bmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7CkBAIC01OTksNyAr
NjEwLDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogdm9pZCBIZWFwOjp2aXNpdEV4dGVy
bmFsUmVtZW1iZXJlZFNldCgpCiB7CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2Fu
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAjZW5k
aWYKIH0KIApAQCAtNjA4LDMwICs2MTksMjggQEAgdm9pZCBIZWFwOjp2aXNpdFNtYWxsU3RyaW5n
cygpCiAgICAgaWYgKCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xs
ZWN0aW9uU2NvcGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3ZtLT5zbWFsbFN0cmluZ3Mu
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOworICAgIG1fdm0tPnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiU21hbGwgc3RyaW5nczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgIG1fc2xvdFZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiU21hbGwgc3RyaW5nczpcbiIs
ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5k
b25hdGVBbmREcmFpbigpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kKHJv
b3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMpOwogCiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRh
TG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xv
dFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZl
IFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnZp
c2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTsp
Ci0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVy
ZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvcklu
ZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFM
b2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAjZW5kaWYK
IH0KIApAQCAtNzEwLDkgKzcxOSw5IEBAIHZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0ZWRPYmplY3Rz
KEhlYXBSb28KICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7CiAKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRh
dGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwog
Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRBcmd1bWVu
dEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzIzLDkgKzczMiw5IEBAIHZv
aWQgSGVhcDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3QKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKIAogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
QXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJB
cmd1bWVudCBCdWZmZXJzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCi0gICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJv
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzM3LDkgKzc0Niw5IEBAIHZvaWQgSGVhcDo6dmlzaXRF
eGNlcHRpb24oSGVhcFJvb3RWaXNpdG8KICAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NP
Zkxhc3RFeGNlcHRpb24oKSk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKKyAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIsICptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCiB2b2lkIEhlYXA6OnZp
c2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03NDcsOSArNzU2
LDkgQEAgdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaQogICAgIG1faGFu
ZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhh
bmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhhbmRs
ZXM6XG4iLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFp
bigpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtNzU3LDkgKzc2Niw5IEBAIHZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhI
ZWFwUm9vdFZpc2kKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwogCiAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9n
KCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCi0gICAgbV9zbG90Vmlz
aXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0
ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKQEAg
LTc2NywxMSArNzc2LDExIEBAIHZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKICNp
ZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNh
bXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgQVNT
RVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7CisgICAgICAgIHNhbXBsaW5nUHJv
ZmlsZXItPnZpc2l0KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
U2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
ZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNp
dG9yKTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAgIHNhbXBs
aW5nUHJvZmlsZXItPmdldExvY2soKS51bmxvY2soKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KFNBTVBMSU5HX1BST0ZJTEVSKQpAQCAtNzc5LDM5ICs3ODgsNjYgQEAgdm9pZCBIZWFwOjp2aXNp
dFNhbXBsaW5nUHJvZmlsZXIoKQogCiB2b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCiB7
Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7
CisgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0
aW5lcygpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KG1fc2xvdFZpc2l0b3IpOworICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJS
b3V0aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tz
IGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRh
TG9nKCJDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAotdm9pZCBIZWFw
Ojp2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSGVhcDo6
bWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIFRpbWluZ1Nj
b3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOworICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6Zml4cG9pbnQiKTsKICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgICB7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJn
ZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXQgY29uc2VydmF0aXZlIHNjYW4iKTsK
KyAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsK
KyAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
KyAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAg
ICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAg
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAg
ICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQor
CisgICAgICAgIHsKICAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAi
bV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7CiAgICAgICAgICAgICBtX29iamVjdFNwYWNl
LnZpc2l0V2Vha1NldHModmlzaXRvcik7CiAgICAgICAgIH0KICAgICAgICAgaGFydmVzdFdlYWtS
ZWZlcmVuY2VzKCk7CiAgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2Vz
KCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgREZHOjpt
YXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBp
ZiAobV9jb2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvclNsb3RWaXNp
dG9yLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKLQorICAgICAgICAKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJl
c2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8gcnVubmluZyByaWdodCBu
b3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsg
dGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0
IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0
aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBm
b3JldmVyLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1
dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAg
ICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUgYmVjYXVzZSB0aGUgcmVt
ZW1iZXJpbmcgY29kZSwgYWJvdmUsIHdpbGwgcHV0IHRoaW5ncyBpbiB0aGUKKyAgICAgICAgLy8g
bXV0YXRvciBzbG90IHZpc2l0b3IuIEJ1dCB0aGlzIGlzIGFsc28gdGhlIG1vc3QgcHJvZml0YWJs
ZSBwbGFjZSB0byBkbyB0aGlzLCBhbmQgd2UKKyAgICAgICAgLy8gY3VycmVudGx5IGRvbid0IGRv
IHRoaXMgYW55d2hlcmUgZWxzZS4gSXQgbWVhbnMgdGhhdCBpZiBpZiBhbiBvYmplY3QgZ2V0cyBi
YXJyaWVyZWQsIHdlCisgICAgICAgIC8vIHdpbGwgcmVzY2FuIGl0IGF0IHRoZSBsYXRlc3QgcG9z
c2libGUgcG9pbnQuIFRoZSBob3BlIGlzIHRoYXQgaWYgeW91IGRvIHN0dWZmIG5ldyBvYmplY3Rz
CisgICAgICAgIC8vIGludG8gb2xkIG9uZXMsIHRoZW4gdGhlIGNvbGxlY3RvciB3aWxsIG9ubHkg
ZXZlciBlbmQgdXAgc2VlaW5nIHRoZSB2ZXJ5IG5ld2VzdCBhbmQgc28KKyAgICAgICAgLy8geW91
IHdvbid0IGdldCBhIGxvbmcgZHJhZyBvZiBmbG9hdGluZyBnYXJiYWdlIGZyb20gbXVsdGlwbGUg
c3RvcmVzIHRvIHRoZSBzYW1lIGZpZWxkLgorICAgICAgICBtX211dGF0b3JTbG90VmlzaXRvci0+
dHJhbnNmZXJUbygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIAogICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CiAKICAgICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVy
KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNj
b3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtODE5LDcgKzg1NSw4IEBAIHZvaWQgSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyhIZWFwUm9vdFZpc2kKIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJs
ZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQgPSBtX3Nsb3RWaXNpdG9yLnZp
c2l0Q291bnQoKTsKKyAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQgPSBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT52aXNpdENvdW50KCk7CisgICAgICAgIHZpc2l0Q291bnQgKz0gbV9tdXRhdG9yU2xv
dFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNp
dENvdW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0
ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4o
dmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0
VGltZSk7CiAgICAgfQpAQCAtODI3LDE5ICs4NjQsMjMgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmpl
Y3RDb3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAg
bV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVk
KCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5
Y2xlID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKwor
ICAgICAgICBtX211dGF0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0
aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1f
dG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygp
CiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPnJlc2V0KCk7CisgICAgbV9tdXRhdG9yU2xvdFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBm
b3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAg
ICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtT
dGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAg
IG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwpAQCAtOTg0LDcgKzEwMjUsNyBAQCB2b2lkIEhl
YXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiAgICAgLy8gIk9sZEdyZXkiIGRvZXNu
J3QgdGVsbCB1cyB3aGljaCBvZiB0aGVzZSB0aGluZ3MgaXMgdHJ1ZSwgYnV0IHdlIHVzdWFsbHkg
dHJlYXQgdGhlIHR3byBjYXNlcyB0aGUKICAgICAvLyBzYW1lLgogICAgIGNlbGwtPnNldENlbGxT
dGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJr
U3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgbV9tdXRhdG9yU2xvdFZpc2l0
b3ItPmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogfQogCiB2
b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKQEAgLTEwOTEsMjEgKzExMzIsNiBAQCB2b2lk
IEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lOwog
ICAgIAotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOwotICAgIH0KLSAgICAKLSNpZiBF
TkFCTEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OwotICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0o
Km1fdm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2
bSgpLT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7
CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rp
b24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxu
Iik7CkBAIC0xMTI1LDEwICsxMTUxLDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQog
ICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNl
OjpCZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJl
SURUYWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5n
KCk7Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCiAgICAgaWYgKEhh
c093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQog
ICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKQEAgLTExOTMsMTAgKzEyMTYsMzYgQEAgdm9pZCBIZWFw
OjpzdG9wVGhlV29ybGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBp
bGVyVGhyZWFkcygpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3Bw
ZWQgPSB0cnVlOworCisgICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgIERl
ZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVy
TG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CisgICAgfQorICAg
IAorI2lmIEVOQUJMRShKSVQpCisgICAgeworICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGls
ZSgqdGhpcyk7CisgICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVB
bGxGb3JWTSgqbV92bSkpCisgICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorICAgIAorICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUo
KnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgCisgICAgZmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoKTsKKyAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKKyAgICBt
X29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhl
V29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdo
dCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8v
IGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRo
aW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3lj
bGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xl
YXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNv
bGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAg
IG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNT
RVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVD
b21waWxlclRocmVhZHMoKTsKQEAgLTE1NDksMTEgKzE1OTgsNiBAQCB2b2lkIEhlYXA6OndpbGxT
dGFydENvbGxlY3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNv
bGxlY3QoKTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsK
LSAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFw
OjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpCiB7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3Bl
ID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikgewpAQCAtMTU2MywxMSArMTYwNyw2IEBAIHZvaWQg
SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVy
LnJlc2V0KCk7CiB9CiAKLXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2Jq
ZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKLX0KLQogdm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFy
a2luZygpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yTWFya2luZygpOwpAQCAtMTk0
OSw3ICsxOTg4LDcgQEAgYm9vbCBIZWFwOjpjYW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgfHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0
YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6
SGVscGluZ0dDKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg0MDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUs
NyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0
YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5o
IgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAg
Y2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFz
cyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElm
TmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoK
ICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9
CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5l
VGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBtdXRhdG9yU2xvdFZp
c2l0b3IoKSB7IHJldHVybiAqbV9tdXRhdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRv
ciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0
aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFj
ayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAg
IAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3Vt
ZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZv
aWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDIyLDkgKzQyOCw3IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxs
U3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1
c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFy
a2luZygpOwogICAgIAogICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CkBA
IC00NDUsNyArNDQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0U2FtcGxpbmdQcm9maWxl
cigpOwogICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7CiAgICAgdm9pZCB0cmFjZUNvZGVC
bG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVh
cFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3Im
KTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwogICAg
IHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTcsNyArNTIxLDggQEAgcHJpdmF0ZToKIAogICAg
IE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCi0gICAgU2xvdFZpc2l0b3Ig
bV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fbXV0YXRv
clNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBi
eSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAg
ICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNh
Y2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC01NzEsNyArNTc2LDcgQEAg
cHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0
YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNYXJrU3Rh
Y2s7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsK
ICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAg
ICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDIwODQwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzYsNiArMzYsMjkgQEAgTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0FycmF5
KCkKIHsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6dHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJh
eSYgb3RoZXIpCit7CisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUg
b3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFkID0g
bV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxs
Kj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1fbnVt
YmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworCisgICAg
b3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9u
dW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2Vn
bWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0
aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9z
ZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAg
b3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7CisKKyAgICB3aGlsZSAoIWlzRW1wdHkoKSkKKyAg
ICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7Cit9CisKIHZvaWQgTWFya1N0YWNrQXJy
YXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAgICAvLyBU
cnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcg
Y29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNp
b24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJheSA6IHB1
YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAotICAgIHZv
aWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2b2lkIHN0
ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFk
Q291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQg
ZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNl
bGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDg0MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDYgQEAgc3Rh
dGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9y
KEhlYXAmIGhlYXApCiAgICAgOiBtX3N0YWNrKCkKICAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0g
ICAgLCBtX2J5dGVzQ29waWVkKDApCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJ
blBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6
OmluaXRpYWxWZXJzaW9uKQpAQCAtOTQsNiArOTMsMTEgQEAgU2xvdFZpc2l0b3I6On5TbG90Vmlz
aXRvcigpCiAgICAgY2xlYXJNYXJrU3RhY2soKTsKIH0KIAordm9pZCBTbG90VmlzaXRvcjo6dHJh
bnNmZXJUbyhTbG90VmlzaXRvciYgb3RoZXIpCit7CisgICAgbV9zdGFjay50cmFuc2ZlclRvKG90
aGVyLm1fc3RhY2spOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQog
ewogICAgIGlmIChoZWFwKCktPmNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6
RnVsbCkKQEAgLTExMCw3ICsxMTQsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtp
bmcoKQogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewogICAgIG1fYnl0ZXNWaXNpdGVkID0g
MDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1f
aGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxs
KTsKQEAgLTM0Miw3ICszNDUsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFs
bGVsKCkKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVl
ZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0aW5nIG1v
cmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5z
aXplKCkpCisgICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay0+c2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBj
b25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1Miw3ICszNTUsNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29v
biwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3No
YXJlZE1hcmtTdGFjayk7CisgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbygqbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrKTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJs
ZS5ub3RpZnlBbGwoKTsKIH0KQEAgLTM5NCwxNCArMzk3LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMK
LSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtT
dGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNs
ZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byByZXR1cm47CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5
QWxsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRo
ZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9z
aGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVh
cC5tX3NoYXJlZE1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBPdGhl
cndpc2Ugd2FpdC4KQEAgLTQxMiwxMyArNDE1LDEzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWlu
RnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBE
aWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KICAg
ICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
Ci0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay0+aXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7CiAKICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdCgKICAgICAgICAgICAgICAgICAgICAgbG9jaywKICAgICAgICAg
ICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9o
ZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAg
ICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIApAQCAtNDI4LDcgKzQzMSw3
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAg
ICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNYXJrU3Rh
Y2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA4
NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBwdWJsaWM6CiAKICAgICBNYXJrU3RhY2tBcnJheSYg
bWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQogICAgIGNvbnN0IE1hcmtTdGFja0FycmF5
JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9CisgICAgCisgICAgdm9pZCB0
cmFuc2ZlclRvKFNsb3RWaXNpdG9yJik7CiAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYg
dm0oKSBjb25zdDsKQEAgLTkzLDcgKzk1LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJNYXJr
U3RhY2soKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKQEAgLTE1NSw3ICsxNTYsNiBAQCBw
cml2YXRlOgogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmlu
ZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgog
ICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGll
ZDsKICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2Rl
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMjA4NDA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVl
LCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lv
biwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294007</attachid>
            <date>2016-11-05 15:33:56 -0700</date>
            <delta_ts>2016-11-06 18:36:06 -0800</delta_ts>
            <desc>it sort of works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6
a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFu
OjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
Q29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQg
cGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJl
IHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBt
dXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRV
bmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAg
IGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lk
IFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9C
ZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRp
b24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWlu
ZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlz
dGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZp
c2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJv
ZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOwor
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAK
IHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYp
OworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVM
aXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVX
b3JsZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXAp
CisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIp
OworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAg
IAorICAgIH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9u
czo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29y
bGQoKTsKKworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50OiAiKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBj
b25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2
ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXBy
ZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0g
ICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9tdXRhdG9yU2xvdFZpc2l0b3Ioc3Rk
OjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQorICAgICwgbV9jb2xsZWN0b3JTbG90
VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCiAgICAgLCBtX2hh
bmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9j
a1NldD4oKSkKICAgICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1
YlJvdXRpbmVTZXQ+KCkpCkBAIC0yNjYsNiArMjk2LDcgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhl
YXBUeXBlIGhlYXBUeXBlKQogI2lmIFVTRShGT1VOREFUSU9OKQogICAgICwgbV9kZWxheWVkUmVs
ZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKKyAgICAsIG1fc2hhcmVkTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ3LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMjQgKzQ3MCwxOCBAQCB2b2lkIEhlYXA6OmNvbXBs
ZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3Rh
bmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0j
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0p
OwotI2VuZGlmCiB9CiAKIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkK
IHsKICAgICBUaW1pbmdTY29wZSBtYXJrUm9vdHNUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtSb290cyIpOwogICAgIAotICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IobV9z
bG90VmlzaXRvcik7CisgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcigqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CiAgICAgCiAgICAgewogICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGJlZm9yZSBjb252
ZXJnZW5jZSIpOwogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1iZXJD
b2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQogICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0t
PnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQg
dG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdlJ3JlIGRvbmUKQEAgLTQ3MSw3ICs0OTYs
NyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKICAgICAgICAg
aWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewogICAgICAg
ICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5j
bGVhck1hcmtTdGFjaygpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xl
YXJNYXJrU3RhY2soKTsKICAgICAgICAgfQogCiAgICAgICAgIGJlZ2luTWFya2luZygpOwpAQCAt
NTA2LDMwICs1MzEsMTcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIG1fc2xvdFZp
c2l0b3IuZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICBtX211dGF0b3JTbG90VmlzaXRvci0+ZGlkU3Rh
cnRNYXJraW5nKCk7CiAgICAgfQogICAgIAogICAgIHsKICAgICAgICAgU3VwZXJTYW1wbGVyU2Nv
cGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICBUaW1pbmdTY29wZSBjb252ZXJn
ZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnZlcmdlbmNlIik7Ci0g
ICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKKyAgICAg
ICAgVGltaW5nU2NvcGUgY29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtS
b290cyBlYXJseSBjb252ZXJnZW5jZSIpOworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVu
YWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBSZXN1bWVUaGVXb3JsZFNj
b3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwogICAgICAgICAKLSAgICAgICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWlu
Z1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMg
Y29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNl
cnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2Vy
dmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2
ZVJvb3RzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlz
IHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3Mg
dGhhdCBhcmUKLSAgICAgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBu
ZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0g
ICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRz
IGEgYmFycmllci4KLSAgICAgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVu
dGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICB9CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiAKICAgICAgICAgdmlzaXRFeHRlcm5hbFJlbWVtYmVy
ZWRTZXQoKTsKICAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKQEAgLTU0MSwxNCArNTUzLDEy
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICAgICAgdmlz
aXRTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwogICAg
ICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9zbG90
VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpN
YXN0ZXJEcmFpbik7CiAgICAgfQogICAgIAotICAgIFRpbWluZ1Njb3BlIHBvc3RDb252ZXJnZW5j
ZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGFmdGVyIGNvbnZlcmdlbmNlIik7
CisgICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjptYXJrUm9vdHMgbGF0ZSBjb252ZXJnZW5jZSIpOwogCi0gICAgLy8gV2VhayByZWZlcmVuY2Vz
IG11c3QgYmUgbWFya2VkIGxhc3QgYmVjYXVzZSB0aGVpciBsaXZlbmVzcyBkZXBlbmRzIG9uCi0g
ICAgLy8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCi0gICAg
dmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgIG1hcmtUb0ZpeHBvaW50KGhl
YXBSb290VmlzaXRvcik7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTU2Miw3ICs1NzIsNiBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFy
TWFya3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJv
b3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBAIC01ODksNiAr
NTk4LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIFRpbWluZ1Njb3BlIHRpbWlu
Z1Njb3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5NYXJraW5nIik7CiAgICAgaWYgKG1fY29sbGVjdGlv
blNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV9jb2RlQmxvY2tzLT5j
bGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xl
YXJNYXJrcygpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2NvcGUgY2xlYXJNYXJrc1Rp
bWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmciKTsKQEAgLTU5OSw3
ICs2MDksNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiB2b2lkIEhlYXA6OnZpc2l0RXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCkKIHsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNj
YW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOworICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNl
bmRpZgogfQogCkBAIC02MDgsMzAgKzYxOCwyOCBAQCB2b2lkIEhlYXA6OnZpc2l0U21hbGxTdHJp
bmdzKCkKICAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2Nv
bGxlY3Rpb25TY29wZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdm0tPnNtYWxsU3RyaW5n
cy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgbV92bS0+c21hbGxT
dHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90Vmlz
aXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxu
IiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmQo
cm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7CiAKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRp
dmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVhcDo6
dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVm
ZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAK
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0
YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNlbmRp
ZgogfQogCkBAIC03MTAsOSArNzE4LDkgQEAgdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9iamVj
dHMoSGVhcFJvbwogICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKIAog
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAg
ZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdEFyZ3Vt
ZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MjMsOSArNzMxLDkgQEAg
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdAogICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogCiAgICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9n
KCJBcmd1bWVudCBCdWZmZXJzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFMb2co
IkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFw
Um9vdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MzcsOSArNzQ1LDkgQEAgdm9pZCBIZWFwOjp2aXNp
dEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0bwogICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVz
c09mTGFzdEV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9n
Z2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIsIG1fc2xvdFZp
c2l0b3IpOworICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6
dmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKQEAgLTc0Nyw5ICs3
NTUsOSBAQCB2b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpCiAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTdHJvbmcg
SGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJTdHJvbmcgSGFu
ZGxlczpcbiIsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCi0gICAgbV9zbG90VmlzaXRvci5k
b25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERy
YWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC03NTcsOSArNzY1LDkgQEAgdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNr
KEhlYXBSb290VmlzaQogICAgIG1faGFuZGxlU3RhY2sudmlzaXQodmlzaXRvcik7CiAKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJI
YW5kbGUgU3RhY2s6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9u
YXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQpA
QCAtNzY3LDExICs3NzUsMTEgQEAgdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciog
c2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAgICBB
U1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgc2FtcGxpbmdQ
cm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9n
KCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgICAg
ICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwogCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC03NzksNDcgKzc4Nyw5MyBAQCB2b2lkIEhlYXA6OnZp
c2l0U2FtcGxpbmdQcm9maWxlcigpCiAKIHZvaWQgSGVhcDo6dmlzaXRTaGFkb3dDaGlja2VuKCkK
IHsKLSAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9y
KTsKKyAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJv
dXRpbmVzKCkKIHsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGlu
ZXMobV9zbG90VmlzaXRvcik7CisgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1
YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29kZSBCbG9j
a3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRh
dGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCi12b2lkIEhl
YXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBIZWFw
OjptYXJrVG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgVGltaW5n
U2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjp2aXNpdFdlYWtIYW5kbGVzIik7CisgICAg
VGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpmaXhwb2ludCIpOworICAgIFNl
Y29uZHMgY29uY3VycmVudFRpbWU7CisgICAgZG91YmxlIHN0b3BwZWRPdmVyQ29uY3VycmVudFJh
dGlvID0gMC4xOworICAgIGNvbnN0IGRvdWJsZSByYXRpb1N0ZXAgPSAxLjM7CisgICAgTW9ub3Rv
bmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIE1vbm90b25p
Y1RpbWUgdG9wT2ZMb29wVGltZSA9IGluaXRpYWxUaW1lOwogICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0gdG9wT2ZMb29wVGltZSArIGNvbmN1
cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW87CisgICAgICAgIHN0b3BwZWRP
dmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKKyAgICAgICAgeworICAgICAgICAgICAg
VGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OnZpc2l0
IGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25z
ZXJ2YXRpdmVSb290cygqdGhpcyk7CisgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0
aXZlUm9vdHMpOworICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CisgICAgICAgIH0KKwogICAgICAgICB7CiAgICAgICAgICAgICBUaW1pbmdTY29w
ZSB0aW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwogICAg
ICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAgICB9
CiAgICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICB2aXNpdENvbXBpbGVy
V29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5pc0Vt
cHR5KCkpCisgICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiQ29s
bGVjdG9yOiAiLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tYXJrU3RhY2soKS5zaXplKCksICIs
IG11dGF0b3I6ICIsIG1fbXV0YXRvclNsb3RWaXNpdG9yLT5tYXJrU3RhY2soKS5zaXplKCksICJc
biIpOworICAgICAgICBpZiAobV9jb2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1f
bXV0YXRvclNsb3RWaXNpdG9yLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKLQorICAg
ICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVu
c3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8g
cnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAq
YWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93
IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRv
IGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ug
d2UgbWlnaHQgbG9vcCBmb3JldmVyLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmll
ckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9j
a3MoKm1fdm0pOworICAgICAgICAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGhlcmUg
YmVjYXVzZSB0aGUgcmVtZW1iZXJpbmcgY29kZSwgYWJvdmUsIHdpbGwgcHV0IHRoaW5ncyBpbiB0
aGUKKyAgICAgICAgLy8gbXV0YXRvciBzbG90IHZpc2l0b3IuIEJ1dCB0aGlzIGlzIGFsc28gdGhl
IG1vc3QgcHJvZml0YWJsZSBwbGFjZSB0byBkbyB0aGlzLCBhbmQgd2UKKyAgICAgICAgLy8gY3Vy
cmVudGx5IGRvbid0IGRvIHRoaXMgYW55d2hlcmUgZWxzZS4gSXQgbWVhbnMgdGhhdCBpZiBpZiBh
biBvYmplY3QgZ2V0cyBiYXJyaWVyZWQsIHdlCisgICAgICAgIC8vIHdpbGwgcmVzY2FuIGl0IGF0
IHRoZSBsYXRlc3QgcG9zc2libGUgcG9pbnQuIFRoZSBob3BlIGlzIHRoYXQgaWYgeW91IGRvIHN0
dWZmIG5ldyBvYmplY3RzCisgICAgICAgIC8vIGludG8gb2xkIG9uZXMsIHRoZW4gdGhlIGNvbGxl
Y3RvciB3aWxsIG9ubHkgZXZlciBlbmQgdXAgc2VlaW5nIHRoZSB2ZXJ5IG5ld2VzdCBhbmQgc28K
KyAgICAgICAgLy8geW91IHdvbid0IGdldCBhIGxvbmcgZHJhZyBvZiBmbG9hdGluZyBnYXJiYWdl
IGZyb20gbXVsdGlwbGUgc3RvcmVzIHRvIHRoZSBzYW1lIGZpZWxkLgorICAgICAgICBtX211dGF0
b3JTbG90VmlzaXRvci0+dHJhbnNmZXJUbygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAg
ICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CiAKICAgICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRv
ci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9k
ZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAg
ICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAg
ICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xv
dFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRy
YWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAg
ICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhp
cyk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJh
aW4oKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVU
b1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CiAgICAgfQogfQog
CiB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAg
IHNpemVfdCB2aXNpdENvdW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAg
IHNpemVfdCB2aXNpdENvdW50ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgp
OworICAgICAgICB2aXNpdENvdW50ICs9IG1fbXV0YXRvclNsb3RWaXNpdG9yLT52aXNpdENvdW50
KCk7CiAgICAgICAgIHZpc2l0Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBk
YXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZm
IHNlY3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgy
NywxOSArODgxLDIzIEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MK
ICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAg
ICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gMDsKIAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRU
aGlzQ3ljbGUgPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNp
dGVkKCk7CisgICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgbV9tdXRhdG9yU2xv
dFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7
CiAgICAgCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhp
c0N5Y2xlOwogfQogCiB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xvdFZpc2l0
b3IucmVzZXQoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOworICAgIG1f
bXV0YXRvclNsb3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJhbGxlbFZpc2l0b3It
PnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2stPmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJl
bmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1h
cmtpbmcoKTsKQEAgLTk4NCw3ICsxMDQyLDcgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRT
ZXQoY29uc3QgSlNDZQogICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2Yg
dGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMg
dGhlCiAgICAgLy8gc2FtZS4KICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRH
cmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlND
ZWxsKj4oY2VsbCkpOworICAgIG1fbXV0YXRvclNsb3RWaXNpdG9yLT5hcHBlbmRUb01hcmtTdGFj
ayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxs
R2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMTQxLDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhy
ZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAw
OworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7
CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0g
ICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAg
ICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFX
aGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJv
Y2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsK
LSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCpt
X3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJM
RShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0o
KS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwog
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBkYXRhTG9nKCJDb2xsZWN0aW9u
IHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xsZWN0aW9uU2NvcGUsICJcbiIp
OwpAQCAtMTEyNSwxMCArMTE2OCw3IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAg
ICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6
QmVmb3JlTWFya2luZyk7CiAgICAgfQogICAgICAgICAKLSAgICBmbHVzaE9sZFN0cnVjdHVyZUlE
VGFibGVzKCk7Ci0gICAgc3RvcEFsbG9jYXRpb24oKTsKICAgICBwcmVwYXJlRm9yTWFya2luZygp
OwotICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CiAgICAgICAgIAogICAgIGlmIChIYXNP
d25Qcm9wZXJ0eUNhY2hlKiBjYWNoZSA9IHZtKCktPmhhc093blByb3BlcnR5Q2FjaGUoKSkKICAg
ICAgICAgY2FjaGUtPmNsZWFyKCk7CkBAIC0xMTcwLDggKzEyMTAsOCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7
Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxv
ZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNUaW1lIGFmdGVy
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVyIC0gbV9zdG9w
VGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWls
bGlzZWNvbmRzKCksICIgbXNdXG4iKTsKICAgICB9CiAgICAgCiAgICAgewpAQCAtMTE5MywxMCAr
MTIzMywzOCBAQCB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAgc3RvcFRoZU11dGF0b3Io
KTsKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZl
c1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAodm0oKS0+dHlwZVByb2Zp
bGVyKCkpIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAg
ICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFs
KCJHQyIpKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERl
ZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0Ojpp
bnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlk
SklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hh
ZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAg
ICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVz
aE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAK
KyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6
cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2Vz
IHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2Yg
YQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBw
aGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxl
Y3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFs
cmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0g
RHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJs
b2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwog
ICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAg
ICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE1NDksMTEgKzE2MTcsNiBAQCB2b2lkIEhl
YXA6OndpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxs
R2FyYmFnZUNvbGxlY3QoKTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFi
bGVzKCkKLXsKLSAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQog
dm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpCiB7CiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikgewpAQCAtMTU2MywxMSArMTYyNiw2
IEBAIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogICAgIG1fd3JpdGVCYXJy
aWVyQnVmZmVyLnJlc2V0KCk7CiB9CiAKLXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQotewot
ICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKLX0KLQogdm9pZCBIZWFwOjpwcmVw
YXJlRm9yTWFya2luZygpCiB7CiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yTWFya2luZygp
OwpAQCAtMTk0OSw3ICsyMDA3LDcgQEAgYm9vbCBIZWFwOjpjYW5Db2xsZWN0KCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgfHwgbXV0YXRvclN0YXRlKCkgPT0g
TXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0
b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNp
bmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5o
IgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAi
TXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9v
bUZpbHRlci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcg
KzcwLDkgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBK
U1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJy
YXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xh
c3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBA
IHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVj
dFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4g
bV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBtdXRh
dG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9tdXRhdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBT
bG90VmlzaXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcjsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNr
KiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZp
dHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTM5MSw2ICszOTQsOSBAQCBw
cml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3Js
ZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNs
YXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigp
OwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDIyLDkgKzQyOCw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAg
dm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAg
IHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVw
YXJlRm9yTWFya2luZygpOwogICAgIAogICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0
VGltZSk7CkBAIC00NDUsNyArNDQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0U2FtcGxp
bmdQcm9maWxlcigpOwogICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7CiAgICAgdm9pZCB0
cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZpc2l0V2Vha0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChIZWFwUm9v
dFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRp
bWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTcsNyArNTIxLDggQEAgcHJpdmF0
ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCi0gICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+
IG1fbXV0YXRvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4g
bV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRv
cnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFi
bGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2
ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC01NzEsNyAr
NTc2LDcgQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0
aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAgIE1hcmtTdGFja0FycmF5IG1fc2hh
cmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFy
ZWRNYXJrU3RhY2s7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vy
cyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7
IDAgfTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkBA
IC01OTksNiArNjA0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0
YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0
aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3Js
ZFN0YXRlOwogICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBl
ZCB7IGZhbHNlIH07CisgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAogICAgIERl
cXVlPE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlja2V0IG1f
bGFzdFNlcnZlZFRpY2tldCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiwy
OSBAQCBNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lkIE1hcmtT
dGFja0FycmF5Ojp0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAgICAvLyBS
ZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0LgorICAgIEdDQXJy
YXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQo
KTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJIZWFkID0gb3RoZXIu
bV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAg
b3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisKKyAgICBvdGhlci5tX3NlZ21lbnRzLmFwcGVu
ZChtX3NlZ21lbnRzKTsKKyAgICAKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMgKz0gbV9u
dW1iZXJPZlNlZ21lbnRzOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDA7CisgICAgCisgICAg
Ly8gUHV0IHRoZSBvcmlnaW5hbCBoZWFkcyBiYWNrIGluIHRoZWlyIHBsYWNlcy4KKyAgICBtX3Nl
Z21lbnRzLnB1c2gobXlIZWFkKTsKKyAgICBvdGhlci5tX3NlZ21lbnRzLnB1c2gob3RoZXJIZWFk
KTsKKyAgICBtX251bWJlck9mU2VnbWVudHMrKzsKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVu
dHMrKzsKKworICAgIHdoaWxlICghaXNFbXB0eSgpKQorICAgICAgICBvdGhlci5hcHBlbmQocmVt
b3ZlTGFzdCgpKTsKK30KKwogdm9pZCBNYXJrU3RhY2tBcnJheTo6ZG9uYXRlU29tZUNlbGxzVG8o
TWFya1N0YWNrQXJyYXkmIG90aGVyKQogewogICAgIC8vIFRyeSB0byBkb25hdGUgYWJvdXQgMSAv
IDIgb2Ygb3VyIGNlbGxzLiBUbyByZWR1Y2UgY29weWluZyBjb3N0cywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4
ICszNSw5IEBAIGNsYXNzIE1hcmtTdGFja0FycmF5IDogcHVibGljIEdDU2VnbWVudGUKIHB1Ymxp
YzoKICAgICBNYXJrU3RhY2tBcnJheSgpOwogCi0gICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhN
YXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtT
dGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CisgICAgdm9pZCB0cmFu
c2ZlclRvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJr
U3RhY2tBcnJheSYpOworICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5
Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNiBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0Nl
bGwqIGNlbGwpCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKICAgICA6IG1f
c3RhY2soKQogICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkK
ICAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQog
ICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCkBAIC05
NCw2ICs5MywxMSBAQCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKICAgICBjbGVhck1hcmtT
dGFjaygpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjp0cmFuc2ZlclRvKFNsb3RWaXNpdG9yJiBv
dGhlcikKK3sKKyAgICBtX3N0YWNrLnRyYW5zZmVyVG8ob3RoZXIubV9zdGFjayk7Cit9CisKIHZv
aWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiB7CiAgICAgaWYgKGhlYXAoKS0+Y29s
bGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQpAQCAtMTEwLDcgKzExNCw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiB2b2lkIFNsb3RWaXNpdG9y
OjpyZXNldCgpCiB7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fYnl0ZXNDb3BpZWQg
PSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0g
bnVsbHB0cjsKICAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOwpAQCAtMzQyLDcgKzM0NSw3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogCiAgICAgLy8gSWYgdGhl
cmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUg
YW5kIGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4K
LSAgICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAobV9oZWFw
Lm1fc2hhcmVkTWFya1N0YWNrLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IHdlJ3JlIGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1l
IHRoYXQgYW5vdGhlcgpAQCAtMzUyLDE2ICszNTUsMTYgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlS25vd25QYXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE90aGVyd2lzZSwg
YXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAg
bV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2spOworICAg
IG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8oKm1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7CiAK
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90
b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAg
IAotICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKKyAgICB3aGlsZSAoIW1fc3RhY2su
aXNFbXB0eSgpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CiAgICAgICAgIG1fc3RhY2sucmVm
aWxsKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11
bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgp
ICYmIGNvdW50ZG93bi0tOykKICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9zdGFjay5yZW1v
dmVMYXN0KCkpOwpAQCAtMzcxLDcgKzM3NCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkK
ICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90
VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChT
aGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7
CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTQsNDYgKzM5Nyw1
MiBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNo
IHRlcm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAu
bV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAm
JiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRo
ZW0gdG8gcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpE
b25lOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2st
PmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2sp
OworICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2
ZURyYWluKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0
ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KICAgICAgICAgICAg
ICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAg
ICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay0+aXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90
aWZ5QWxsKCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUud2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBt
X2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAg
ICAgICAgICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFw
Lm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2Ug
ZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAg
aWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpEb25lOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAg
ICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
TWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAg
ICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAg
ICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsK
ICAgICB9CiB9CiAKQEAgLTQ5NywxMCArNTA2LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFp
bih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2lu
Y2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRl
IDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTksNiArNjAs
OCBAQCBwdWJsaWM6CiAKICAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4g
bV9zdGFjazsgfQogICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX3N0YWNrOyB9CisgICAgCisgICAgdm9pZCB0cmFuc2ZlclRvKFNsb3RWaXNpdG9y
Jik7CiAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKQEAgLTkzLDE1
ICs5NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOwogCiAgICAgc2l6
ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAg
c2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQogICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CiAKICAg
ICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQgZHJhaW4oKTsKLSAgICB2b2lkIGRvbmF0ZUFuZERy
YWluKCk7CisgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUg
dGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIAogICAgIGVudW0gU2hh
cmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJhaW4gfTsKLSAgICB2b2lkIGRyYWlu
RnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOworICAgIGVudW0gY2xhc3MgU2hhcmVkRHJhaW5S
ZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9OworICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluRnJv
bVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKQEAgLTE1NSw3ICsx
NTgsNiBAQCBwcml2YXRlOgogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFu
ZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29s
bGVjdG9yLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9i
eXRlc0NvcGllZDsKICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFy
YWxsZWxNb2RlOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDcgQEAgdHlwZWRlZiBjb25z
dCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0Ms
IHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJp
ZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRH
QywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJy
aWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVD
ZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQ
cm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2su
aCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRl
IDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCiti
b29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQorewor
ICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0
ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2Nr
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDgg
KzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
aGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcg
V1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294042</attachid>
            <date>2016-11-06 18:36:06 -0800</date>
            <delta_ts>2016-11-06 19:17:17 -0800</delta_ts>
            <desc>fixed some glaring flaws</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61213</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGls
YXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
CiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNv
LCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBv
dXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAg
ICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdp
dGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVk
IHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJs
b2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAg
IEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRE
RkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAg
IAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZl
cG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0
YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRp
dGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29y
a2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0
ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7Cisg
ICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMs
NiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9
CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2Rl
QmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNl
IC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7
Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3Zv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9B
dXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRl
IHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAt
MTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwog
dm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE3ICszNywxMSBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8v
IFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4KICAgICBBbnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAg
Ci0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhl
IG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2lu
ZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBi
ZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBn
cmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVu
dCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdy
ZXkgPSAzCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQuCisgICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJl
c2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9y
QmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRB
cnJheS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1NlZ21lbnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNj
b3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3co
KSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAg
IH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsK
KworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ug
d2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsNyBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBt
X3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1h
a2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAg
ICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkKICAgICAs
IG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkp
CkBAIC0yNjYsNiArMjk1LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogI2lmIFVTRShGT1VOREFUSU9OKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNv
dW50KDApCiAjZW5kaWYKKyAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xp
ZW50KCZoZWFwSGVscGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3Jl
YXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OmNyZWF0ZSgpKQpAQCAtNDE2LDEyICs0NDcsMTIgQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVuY2Uo
SlNDZWxsKiBjZWxsLCBBcgogCiB2b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCiB7
Ci0gICAgbV9zbG90VmlzaXRvci5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIH0KIAogdm9pZCBIZWFw
OjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9y
LmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiB9CiAKIHZvaWQgSGVh
cDo6d2lsbFN0YXJ0SXRlcmF0aW5nKCkKQEAgLTQzOSwyNCArNDcwLDE4IEBAIHZvaWQgSGVhcDo6
Y29tcGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6
aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgq
bV92bSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRU
aW1lKQogewogICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1Jvb3RzIik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRv
cihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAKICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3Bl
IHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3Jl
IGNvbnZlcmdlbmNlIik7CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgREZHOjpyZW1l
bWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCi0KICNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCiAgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
bV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2Ug
bmVlZCB0byBvd24gdGhlIGxvY2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQpAQCAtNDcxLDcg
KzQ5Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAogICAg
ICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKSB7CiAg
ICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNp
dG9yLmNsZWFyTWFya1N0YWNrKCk7CisgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5jbGVhck1hcmtTdGFja3MoKTsKICAgICAgICAgfQogCiAgICAgICAgIGJlZ2luTWFya2luZygp
OwpAQCAtNTA2LDMwICs1MzEsMTYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIG1f
c2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwogICAgIH0KICAgICAKICAgICB7CiAgICAgICAgIFN1
cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5n
U2NvcGUgY29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252
ZXJnZW5jZSIpOwotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90Vmlz
aXRvcik7CisgICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrUm9vdHMgZWFybHkgY29udmVyZ2VuY2UiKTsKKyAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgUmVz
dW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKICAgICAgICAgCi0g
ICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLQotICAgICAgICB7Ci0gICAg
ICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2ZSBzY2FuIik7Ci0gICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7Ci0gICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdh
bnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55
IGNvZGUgYmxvY2tzIHRoYXQgYXJlCi0gICAgICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4g
SG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUg
Y29kZSBibG9jawotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0
IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuCi0gICAgICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRl
QmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgfQorICAgICAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogCiAgICAgICAgIHZpc2l0RXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCk7CiAgICAgICAgIHZpc2l0U21hbGxTdHJpbmdzKCk7CkBAIC01
NDEsMTQgKzU1MiwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUp
CiAgICAgICAgIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwogICAgICAgICB2aXNpdFNoYWRvd0No
aWNrZW4oKTsKICAgICAgICAgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0g
ICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJE
cmFpbik7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwogICAgIH0KICAgICAKLSAgICBUaW1pbmdTY29wZSBw
b3N0Q29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBj
b252ZXJnZW5jZSIpOworICAgIFRpbWluZ1Njb3BlIHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3Bl
KCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGxhdGUgY29udmVyZ2VuY2UiKTsKIAotICAgIC8vIFdl
YWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3Mg
ZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0
IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICBtYXJr
VG9GaXhwb2ludChoZWFwUm9vdFZpc2l0b3IpOwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjIsNyArNTcxLDYgQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhl
clN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1faml0U3R1YlJv
dXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0K
IApAQCAtNTg5LDYgKzU5Nyw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1p
bmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlm
IChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1f
Y29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHVi
Um91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAKICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3Bl
IGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5n
Iik7CkBAIC01OTksNyArNjA4LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogdm9pZCBI
ZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpCiB7CiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9y
KTsKKyAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7CiAjZW5kaWYKIH0KIApAQCAtNjA4LDMwICs2MTcsMjggQEAgdm9pZCBIZWFwOjp2
aXNpdFNtYWxsU3RyaW5ncygpCiAgICAgaWYgKCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0Jl
VmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3Zt
LT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOworICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZygiU21hbGwgc3RyaW5nczpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiU21h
bGwgc3RyaW5nczpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0Q29u
c2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZp
c2l0b3IuYXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQo
cm9vdHMpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxv
ZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQog
CiB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkp
LnZpc2l0V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3Rp
bmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7
CisgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CiAjZW5kaWYKIH0KIApAQCAtNzEwLDkgKzcxNyw5IEBAIHZvaWQgSGVhcDo6dmlzaXRQ
cm90ZWN0ZWRPYmplY3RzKEhlYXBSb28KICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZw
YWlyLmtleSk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRv
cik7CisgICAgICAgIGRhdGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOwogCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVh
cDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzIz
LDkgKzczMCw5IEBAIHZvaWQgSGVhcDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3QKICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0
KTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAg
ICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRF
eGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzM3LDkgKzc0NCw5IEBAIHZv
aWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG8KICAgICB2aXNpdG9yLnZpc2l0
KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6
XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIsICpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJh
aW4oKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQog
CiB2b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
CkBAIC03NDcsOSArNzU0LDkgQEAgdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJv
b3RWaQogICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKIAogICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiU3Ryb25nIEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxv
ZygiU3Ryb25nIEhhbmRsZXM6XG4iLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAotICAgIG1f
c2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5kb25hdGVBbmREcmFpbigpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0SGFuZGxlU3RhY2soSGVh
cFJvb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNzU3LDkgKzc2NCw5IEBAIHZvaWQgSGVhcDo6dmlz
aXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2kKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAg
ICAgZGF0YUxvZygiSGFuZGxlIFN0YWNrOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwog
Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRTYW1wbGlu
Z1Byb2ZpbGVyKCkKQEAgLTc2NywxMSArNzc0LDExIEBAIHZvaWQgSGVhcDo6dmlzaXRTYW1wbGlu
Z1Byb2ZpbGVyKCkKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgaWYgKFNhbXBs
aW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkp
IHsKICAgICAgICAgQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgp
KTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7CisgICAg
ICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAg
ICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERy
YWluKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7
CiAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS51bmxvY2soKTsKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpAQCAtNzc5LDQ3ICs3ODYsODYgQEAg
dm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQogCiB2b2lkIEhlYXA6OnZpc2l0U2hh
ZG93Q2hpY2tlbigpCiB7Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
bV9zbG90VmlzaXRvcik7CisgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnRyYWNlQ29kZUJsb2Nr
c0FuZEpJVFN0dWJSb3V0aW5lcygpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOworICAgIG1faml0U3R1YlJvdXRpbmVzLT50
cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3Ip
OworICAgICAgICBkYXRhTG9nKCJDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4i
LCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsK
IH0KIAotdm9pZCBIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFu
ZGxlcyIpOworICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6Zml4cG9p
bnQiKTsKKyAgICBTZWNvbmRzIGNvbmN1cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3Zl
ckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsKKyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4z
OworICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
KyAgICBNb25vdG9uaWNUaW1lIHRvcE9mTG9vcFRpbWUgPSBpbml0aWFsVGltZTsKICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSA9IHRvcE9mTG9v
cFRpbWUgKyBjb25jdXJyZW50VGltZSAqIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvOworICAg
ICAgICBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyAqPSByYXRpb1N0ZXA7CisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjp2aXNpdCBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgQ29uc2VydmF0
aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOworICAgICAgICAgICAgU3VwZXJTYW1w
bGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgICAgICAgICAgZ2F0aGVyU3Rh
Y2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJKU1N0YWNrUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICAgICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIHZpc2l0Q29uc2VydmF0aXZlUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9CisKICAgICAgICAgewogICAgICAgICAg
ICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNwYWNlLnZpc2l0V2Vh
a1NldHMiKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9y
KTsKICAgICAgICAgfQogICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICAgICAg
dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgaWYgKG1fc2xv
dFZpc2l0b3IuaXNFbXB0eSgpKQorICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0g
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpOworICAgICAgICAKKyAgICAgICAgLy8g
V2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2Nh
biBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cu
IEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhl
IGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJl
YWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUK
KyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3Jl
dmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCisgICAgICAgIC8vIGF0
IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdD
IGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0CisgICAgICAgIC8vIEdDLgorICAgICAgICBtX2Nv
ZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAg
REZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAgICAKKyAgICAgICAgaWYgKHNo
b3VsZFRlcm1pbmF0ZSkKICAgICAgICAgICAgIGJyZWFrOwotCisgICAgICAgIAogICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CiAKICAgICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVy
KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ICE9IFNs
b3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAgICAgIFJl
c3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAg
ICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3RvbmljVGltZTo6bm93KCk7Cisg
ICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVUb1Jlc3VtZTsKKyAgICAg
ICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CiAgICAgfQogfQogCiB2b2lkIEhlYXA6OnVw
ZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAgIHNpemVfdCB2aXNpdENv
dW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAgIHNpemVfdCB2aXNpdENv
dW50ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgpOwogICAgICAgICB2aXNp
dENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxvZ0YoIlxuTnVtYmVy
IG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CkBAIC04MjcsMTkgKzg3MywyMSBAQCB2
b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV90b3RhbEJ5dGVz
VmlzaXRlZCA9IDA7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0gbV9zbG90
VmlzaXRvci5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgpOworICAgIG1fdG90
YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPQorICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
LT5ieXRlc1Zpc2l0ZWQoKSArCisgICAgICAgIHRocmVhZEJ5dGVzVmlzaXRlZCgpOwogICAgIAog
ICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZTsK
IH0KIAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLnJlc2V0
KCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKIAogICAgIGZvciAoYXV0
byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgcGFy
YWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCi0gICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLT5pc0VtcHR5KCkpOwogICAg
IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmpl
Y3RTcGFjZS5lbmRNYXJraW5nKCk7CkBAIC05NzcsMTQgKzEwMjUsMjAgQEAgdm9pZCBIZWFwOjph
ZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBB
U1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFj
aXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFu
ZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBv
YmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJl
bWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2gg
b2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2Fz
ZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpP
bGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2Vs
bCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBh
biB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29s
bGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9i
amVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUg
YWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4g
V2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1
c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAg
ICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0
aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhl
cmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93
aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBl
bHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVu
YXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRD
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5h
cHBlbmRUb011dGF0b3JNYXJrU3RhY2soY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVjdEFs
bEdhcmJhZ2UoKQpAQCAtMTA4MywyOSArMTEzNywxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRo
cmVhZCgpCiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUgYmVmb3JlID0g
MDsKKyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewogICAgICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIpOwot
ICAgICAgICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGJlZm9yZSA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7CiAg
ICAgCi0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIERlZmVyR0NGb3JB
V2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnBy
b2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7Ci0gICAgfQotICAgIAotI2lmIEVO
QUJMRShKSVQpCi0gICAgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7
Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgq
bV92bSkpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotICAgIAotICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZt
KCktPnRvcENhbGxGcmFtZSk7Ci0gICAgCiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsK
ICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlv
biBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6ICIsIG1fY29sbGVjdGlvblNjb3BlLCAiXG4i
KTsKQEAgLTExMjUsMTAgKzExNjQsNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAg
ICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6
OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAgZmx1c2hPbGRTdHJ1Y3R1cmVJ
RFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgcHJlcGFyZUZvck1hcmtpbmco
KTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAgICAgICAKICAgICBpZiAoSGFz
T3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAg
ICAgICAgIGNhY2hlLT5jbGVhcigpOwpAQCAtMTE3MCw4ICsxMjA2LDggQEAgdm9pZCBIZWFwOjpj
b2xsZWN0SW5UaHJlYWQoKQogICAgIH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFM
b2coYWZ0ZXIgLSBiZWZvcmUsICIgbXNdXG4iKTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBhZnRl
ciA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBkYXRhTG9nKChhZnRlciAtIG1fc3Rv
cFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLCBjeWNsZSAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1p
bGxpc2Vjb25kcygpLCAiIG1zXVxuIik7CiAgICAgfQogICAgIAogICAgIHsKQEAgLTExOTMsMTAg
KzEyMjksMzggQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIHN0b3BUaGVNdXRhdG9y
KCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworCisgICAgaWYgKHZtKCktPnR5cGVQcm9m
aWxlcigpKSB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAg
ICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJh
bCgiR0MiKSk7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgeworICAgICAgICBE
ZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIGlmIChKSVRXb3JrbGlzdDo6
aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCisgICAgICAgICAgICBzZXRHQ0Rp
ZEpJVCgpOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorICAgIAorICAgIHZtKCktPnNo
YWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgCisg
ICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1
c2hPbGRUYWJsZXMoKTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAg
CisgICAgbV9zdG9wVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiB2b2lkIEhlYXA6
OnJlc3VtZVRoZVdvcmxkKCkKIHsKKyAgICAvLyBDYWxsaW5nIHJlc3VtZUFsbG9jYXRpbmcgZG9l
cyB0aGUgUmlnaHQgVGhpbmcgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyB0aGUgZW5kIG9m
IGEKKyAgICAvLyBjb2xsZWN0aW9uIGN5Y2xlIG9yIHRoaXMgaXMganVzdCBhIGNvbmN1cnJlbnQg
cGhhc2Ugd2l0aGluIGEgY29sbGVjdGlvbiBjeWNsZToKKyAgICAvLyAtIEF0IGVuZCBvZiBjb2xs
ZWN0aW9uIGN5Y2xlOiBpdCdzIGEgbm8tb3AgYmVjYXVzZSBwcmVwYXJlRm9yQWxsb2NhdGlvbiBh
bHJlYWR5IGNsZWFyZWQgdGhlCisgICAgLy8gICBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICAvLyAt
IER1cmluZyBjb2xsZWN0aW9uIGN5Y2xlOiBpdCByZWluc3RhdGVzIHRoZSBsYXN0IGFjdGl2ZSBi
bG9jay4KKyAgICBtX29iamVjdFNwYWNlLnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKICAgICBS
RUxFQVNFX0FTU0VSVChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsK
ICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAg
ICAgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CkBAIC0xNTQ5LDIzICsxNjEzLDkgQEAgdm9pZCBI
ZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAgICBvYnNlcnZlci0+d2ls
bEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRh
YmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7Ci19Ci0K
IHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewotICAgIGlmIChtX2NvbGxl
Y3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAgICAgICAgbV93cml0ZUJh
cnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
d3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRp
b24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICBtX3dyaXRl
QmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVhcDo6cHJlcGFyZUZvck1h
cmtpbmcoKQpAQCAtMTk0OSw3ICsxOTk5LDcgQEAgYm9vbCBIZWFwOjpjYW5Db2xsZWN0KCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgfHwgbXV0YXRvclN0YXRl
KCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09
IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsyMDIxLDggQEAgYm9vbCBIZWFwOjppc0N1cnJlbnRU
aHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8IG11dGF0b3JTdGF0ZSgp
ICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQg
aW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dHJhTWVtb3J5U2l6
ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3LDEyICsyMDMzLDggQEAgdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRl
IG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNv
dW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29s
bGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6
RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5U2l6ZTsKIAogICAgIGZv
ciAoOzspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIsNiArMjIsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgog
I2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0
LmgiCkBAIC0zNSw3ICszNiw2IEBACiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRl
ICJNdXRhdG9yU3RhdGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJs
b29tRmlsdGVyLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAs
NyArNzAsOSBAQCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNz
IEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tB
cnJheTsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBj
bGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDcg
QEAgcHVibGljOgogICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2Jq
ZWN0U3BhY2U7IH0KICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVy
biBtX21hY2hpbmVUaHJlYWRzOyB9CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0
b3IoKSBjb25zdCB7IHJldHVybiBtX3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNv
bGxlY3RvclNsb3RWaXNpdG9yKCkgeyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0K
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5
Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVk
ZW5BY3Rpdml0eUNhbGxiYWNrKCk7CkBAIC0yMDMsMTEgKzIwNSwxMSBAQCBwdWJsaWM6CiAgICAg
Ly8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJp
Z2dlciBjYXRhc3Ryb3BpYwogICAgIC8vIG1lbW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qp
OwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byBy
ZXBvcnQgdGhlIHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMg
cHJvY2Vzcy4KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5
VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3Qg
ZXh0ZXJuYWxNZW1vcnlTaXplKCkgeyByZXR1cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNl
bmRpZgogCkBAIC0zOTEsNiArMzkzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3Js
ZCgpOwogICAgIHZvaWQgcmVzdW1lVGhlV29ybGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVU
aGVXb3JsZFNjb3BlOworICAgIGZyaWVuZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAg
IAogICAgIHZvaWQgc3RvcFRoZU11dGF0b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3Io
KTsKICAgICAKQEAgLTQyMiw5ICs0MjcsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3Vz
cGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRp
b25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJs
ZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgdm9pZCBzdG9w
QWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAgICAKICAgICB2
b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOwpAQCAtNDQ1LDcgKzQ0OCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKICAgICB2b2lkIHZpc2l0
U2hhZG93Q2hpY2tlbigpOwogICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRp
bmVzKCk7Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAg
IHZvaWQgbWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVP
YmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsK
IApAQCAtNTE3LDcgKzUyMCw3IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21h
Y2hpbmVUaHJlYWRzOwogICAgIAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOwogCiAg
ICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcg
dGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVy
IHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91
bnQgb2YgbWVtb3J5IGZyb20KQEAgLTU3MSw3ICs1NzQsOCBAQCBwcml2YXRlOgogCiAgICAgTG9j
ayBtX21hcmtpbmdNdXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGU7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlx
dWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsK
ICAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAg
IHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJv
b2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs2MDMs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0Jp
dCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25k
aXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAg
Ym9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsK
KyAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8
Q29sbGVjdGlvblNjb3BlPj4gbV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlj
a2V0IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3Bw
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFj
a0FycmF5OjpNYXJrU3RhY2tBcnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRy
YW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRo
aXMgIT0gJm90aGVyKTsKKyAgICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFk
IG9mIHRoZSBvdGhlciBsaXN0LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBt
eUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25z
dCBKU0NlbGwqPiogb3RoZXJIZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7Cisg
ICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07
CisgICAgCisgICAgb3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisg
ICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBt
X251bWJlck9mU2VnbWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVh
ZHMgYmFjayBpbiB0aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7Cisg
ICAgb3RoZXIubV9zZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzKys7CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUg
KCFpc0VtcHR5KCkpIHsKKyAgICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1v
dmVMYXN0KCkpCisgICAgICAgICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9
Cit9CisKIHZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0Fy
cmF5JiBvdGhlcikKIHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBj
ZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBj
bGFzcyBNYXJrU3RhY2tBcnJheSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFy
a1N0YWNrQXJyYXkoKTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJy
YXkmIG90aGVyKTsKLSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYg
b3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJr
U3RhY2tBcnJheSYpOworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkm
KTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBp
ZGxlVGhyZWFkQ291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwp
CiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBt
X3N0YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDAp
CisgICAgOiBtX2J5dGVzVmlzaXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBt
X2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNw
YWNlOjppbml0aWFsVmVyc2lvbikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RW
aXNpdG9yKEhlYXAmIGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAg
IGNsZWFyTWFya1N0YWNrKCk7CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xv
dFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCkBAIC0xMTAsMTUgKzEwOCwxNSBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQog
ewogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBt
X3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CiAg
ICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJN
YXJrU3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBt
X3N0YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0
YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2
YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ2LDcgQEAgdm9pZCBT
bG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3Rh
dGU6Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Okdy
ZXkpOwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTIxMCw3ICsyMDgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNl
dE1hcmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6
CiAgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0
IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVj
dGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBv
bGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6
TmV3R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAg
CiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiAr
MjI2LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAg
ICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCgh
Y2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxT
dGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkp
OworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAg
IAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNl
ICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRv
aW5nIGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hl
biB3ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNW
aXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5k
KGNlbGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQor
eworICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRv
cjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTUsMTAgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1
cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAg
bV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAgICAKLSAgICAvLyBUaGVyZSBp
cyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4g
R3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUgbWFya2luZyB0
aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFuZ2UgdGhlIHN0
YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5LgotICAgIEFTU0VS
VChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRDZWxsU3RhdGUg
PT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQncyBwb3NzaWJs
ZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJyaWVyIHRoZSBv
YmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBtYXJrZWQuIFRo
YXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0J3MKKyAgICAv
LyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHByb2ZpdGFibGUg
dG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJsYWNrLgogICAg
IAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVPckJsYWNrKTsK
ICAgICAKQEAgLTMyNiwyMyArMzI1LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90
QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3
R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAgICAgICAgICAg
ICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxKU0NlbGwqPihj
ZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVs
KCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkm
IGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJl
LXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAogICAgIC8v
IGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAgLy8gQXZvaWQg
bG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20uc2l6ZSgpIDwg
MikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IHNvbWUgc2hh
cmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQogICAgIC8vIHRo
YXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9oZWFwLm1fc2hh
cmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRp
dmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzUxLDQzIEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29uLCBhbmQg
ZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1fc2hhcmVkTWFy
a1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit7
CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVsKG1fbXV0YXRv
clN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisKK3ZvaWQgU2xv
dFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9p
c0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRv
d24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9z
dGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9jb2xsZWN0b3JT
dGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBz
ZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIG1f
aXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQor
ICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5yZW1vdmVMYXN0
KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgLy8gV2Uga25v
dyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ugb2YgdGhlIGJh
cnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBNYXJraW5nIHdp
bGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2lsbCB2aXNpdCBp
dAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5cyBhZnRlciBp
dCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3Rh
Y2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25z
OjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRhdG9yU3RhY2su
Y2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENo
aWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0KICAgICAgICAg
ZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9wYXF1ZVJvb3Rz
SWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNo
YXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5S
ZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVk
RHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBh
cmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTQsNDYgKzQxMCw1OCBAQCB2b2lkIFNsb3RWaXNpdG9y
OjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJz
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xs
ZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9o
ZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3Ig
dGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKKyAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUgZG9u
ZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFw
Lm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2Ugd2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91dCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoc2hhcmVkRHJhaW5Nb2RlID09IFNsYXZlRHJhaW4pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBsZXQgdGhl
IG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgJiYg
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAK
LSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdCgK
LSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAgICBsb2Nr
LCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5t
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIElzIHRo
ZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgog
ICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6RG9uZTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2Vk
KHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6
OlRpbWVkT3V0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29t
ZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1f
aGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX2Nv
bGxlY3RvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFw
Lm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNG
cm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBt
X2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVh
cC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAgICB9CiB9CiAK
QEAgLTQ5NywxMCArNTI1LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFp
bigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVv
dXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsK
IH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCkBAIC01MjYsMTAgKzU1
NCw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAg
bV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFt
JikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKLSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBk
YXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50
ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRl
ckxpc3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3
LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RW
aXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9z
dGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNr
KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRh
dG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJr
U3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAg
ICBjb25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04Niwy
MiArODksMjIgQEAgcHVibGljOgogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0
YXRlKHZvaWQqKSBjb25zdDsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29s
IGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3Rh
Y2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAg
IHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJh
aW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAg
ICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9
OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBj
bGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJh
aW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RX
ZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVy
cygpOwpAQCAtMTQxLDYgKzE0NCw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUm
LCBKU0NlbGwqKTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25z
dCBKU0NlbGwqKTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2Vs
bCopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygp
OwpAQCAtMTUwLDEyICsxNTUsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7Cisg
ICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3Rh
Y2tBcnJheSYgdG8pOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBk
YXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAg
IAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsK
ICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwog
ICAgIApAQCAtMTY1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWls
ZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1
cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAg
ICBib29sIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxMyArMTA1LDE1IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEK
IAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXpl
X3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENl
bGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAg
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlz
aXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2NywxNiBAQCBwdWJs
aWM6CiAgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRl
OyB9CiAgICAgCiAgICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsg
Y29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisg
ICAgYm9vbCBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3Rh
dGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3Rh
dGUsIG5ld1N0YXRlKTsKKyAgICB9CisKKyAgICBDZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hh
bmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25n
KCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMg
cHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsx
ODQsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHZl
cmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29s
LCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
Ym9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
dihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXApJ
bmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0
RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBMaXN0RHVtcEluQ29u
dGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Omxp
c3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RGOjpwb2ludGVy
TGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcgV1RGOjpzb3J0ZWRN
YXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2VuZGlmIC8vIExpc3RE
dW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
Y3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAi
Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgi
CisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xl
ZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRV
bnRpbChmYWtlTG9jaywgdGltZSk7CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIHRpbWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisg
ICAgaWYgKCEodGltZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
dGltZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKIApJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYp
OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYpOworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU7Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6
OnNsZWVwOwogCiAjZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294043</attachid>
            <date>2016-11-06 19:17:17 -0800</date>
            <delta_ts>2016-11-07 11:42:51 -0800</delta_ts>
            <desc>fixed some more races</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>62284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGls
YXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
CiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNv
LCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBv
dXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAg
ICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdp
dGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVk
IHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJs
b2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAg
IEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRE
RkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAg
IAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZl
cG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0
YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRp
dGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29y
a2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0
ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7Cisg
ICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMs
NiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9
CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2Rl
QmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNl
IC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7
Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3Zv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9B
dXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRl
IHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAt
MTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwog
dm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE3ICszNywxMSBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8v
IFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4KICAgICBBbnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAg
Ci0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhl
IG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2lu
ZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBi
ZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBn
cmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVu
dCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdy
ZXkgPSAzCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQuCisgICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJl
c2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9y
QmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRB
cnJheS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1NlZ21lbnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNj
b3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3co
KSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAg
IH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsK
KworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ug
d2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBt
X3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1h
a2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZt
KQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQog
ICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNl
dD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJz
aW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxw
ZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lk
IEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZp
c2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9p
ZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDI0ICs0NzEsMTggQEAgdm9pZCBI
ZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVFdvcmts
aXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0Zv
clZNKCptX3ZtKTsKLSNlbmRpZgogfQogCiB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NT
dGFydFRpbWUpCiB7CiAgICAgVGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrUm9vdHMiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBERkc6
OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKICAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBuZWVkIHRvIG93biB0aGUgbG9jayBmcm9tIG5vdyB1bnRpbCB3ZSdyZSBkb25lCkBAIC00
NzEsNyArNDk3LDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQog
CiAgICAgICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
IHsKICAgICAgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fc2xv
dFZpc2l0b3IuY2xlYXJNYXJrU3RhY2soKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNr
LT5jbGVhcigpOwogICAgICAgICB9CiAKICAgICAgICAgYmVnaW5NYXJraW5nKCk7CkBAIC01MDYs
MzAgKzUzMywxNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRv
ci5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZGlk
U3RhcnRNYXJraW5nKCk7CiAgICAgfQogICAgIAogICAgIHsKICAgICAgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICBUaW1pbmdTY29wZSBjb252
ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnZlcmdlbmNlIik7
Ci0gICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKKyAg
ICAgICAgVGltaW5nU2NvcGUgY29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtSb290cyBlYXJseSBjb252ZXJnZW5jZSIpOworICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBSZXN1bWVUaGVXb3Js
ZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOwogICAgICAgICAKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRp
bWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9v
dHMgY29uc2VydmF0aXZlIHNjYW4iKTsKLSAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNv
bnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKLSAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOwotICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2
YXRpdmVSb290cyk7Ci0gICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0
aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9j
a3MgdGhhdCBhcmUKLSAgICAgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3
ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2Nr
Ci0gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5l
ZWRzIGEgYmFycmllci4KLSAgICAgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3Vy
cmVudGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICB9CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiAKICAgICAgICAgdmlzaXRFeHRlcm5hbFJlbWVt
YmVyZWRTZXQoKTsKICAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKQEAgLTU0MSwxNCArNTU0
LDEyIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKICAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwog
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbik7CiAgICAgfQogICAgIAotICAgIFRpbWluZ1Njb3BlIHBvc3RDb252ZXJn
ZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGFmdGVyIGNvbnZlcmdlbmNl
Iik7CisgICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJI
ZWFwOjptYXJrUm9vdHMgbGF0ZSBjb252ZXJnZW5jZSIpOwogCi0gICAgLy8gV2VhayByZWZlcmVu
Y2VzIG11c3QgYmUgbWFya2VkIGxhc3QgYmVjYXVzZSB0aGVpciBsaXZlbmVzcyBkZXBlbmRzIG9u
Ci0gICAgLy8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCi0g
ICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgIG1hcmtUb0ZpeHBvaW50
KGhlYXBSb290VmlzaXRvcik7CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2Nr
PiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTU2Miw3ICs1NzMsNiBAQCB2b2lkIEhlYXA6Om1h
cmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290
cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPmNs
ZWFyTWFya3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBAIC01ODks
NiArNTk5LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIFRpbWluZ1Njb3BlIHRp
bWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5NYXJraW5nIik7CiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV9jb2RlQmxvY2tz
LT5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2ppdFN0dWJSb3V0aW5lcy0+
Y2xlYXJNYXJrcygpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2NvcGUgY2xlYXJNYXJr
c1RpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmciKTsKQEAgLTU5
OSw3ICs2MTAsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiB2b2lkIEhlYXA6OnZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCkKIHsKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAg
IHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOworICAgIHNj
YW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
ICNlbmRpZgogfQogCkBAIC02MDgsMzAgKzYxOSwyOCBAQCB2b2lkIEhlYXA6OnZpc2l0U21hbGxT
dHJpbmdzKCkKICAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCpt
X2NvbGxlY3Rpb25TY29wZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdm0tPnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgbV92bS0+c21h
bGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdz
OlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBl
bmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7CiAK
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAg
bV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25zZXJ2
YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVh
cDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsg
aS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFr
UmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAg
ZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNl
bmRpZgogfQogCkBAIC03MTAsOSArNzE5LDkgQEAgdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9i
amVjdHMoSGVhcFJvbwogICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsK
IAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAg
ICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CiAKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdEFy
Z3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MjMsOSArNzMyLDkg
QEAgdm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdAogICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogCiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRh
TG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFM
b2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAg
ICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90Vmlz
aXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihI
ZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC03MzcsOSArNzQ2LDkgQEAgdm9pZCBIZWFwOjp2
aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0bwogICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRk
cmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIsIG1fc2xv
dFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOwogCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CiB9CiAKIHZvaWQgSGVh
cDo6dmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKQEAgLTc0Nyw5
ICs3NTYsOSBAQCB2b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpCiAgICAg
bV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTdHJv
bmcgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJTdHJvbmcg
SGFuZGxlczpcbiIsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCi0gICAgbV9zbG90VmlzaXRv
ci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFu
ZERyYWluKCk7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0
b3ImIHZpc2l0b3IpCkBAIC03NTcsOSArNzY2LDkgQEAgdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0
YWNrKEhlYXBSb290VmlzaQogICAgIG1faGFuZGxlU3RhY2sudmlzaXQodmlzaXRvcik7CiAKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9n
KCJIYW5kbGUgU3RhY2s6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKLSAgICBtX3Ns
b3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+
ZG9uYXRlQW5kRHJhaW4oKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIo
KQpAQCAtNzY3LDExICs3NzYsMTEgQEAgdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIo
KQogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewogICAgICAg
ICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCkBAIC03NzksNDcgKzc4OCw5MCBAQCB2b2lkIEhlYXA6
OnZpc2l0U2FtcGxpbmdQcm9maWxlcigpCiAKIHZvaWQgSGVhcDo6dmlzaXRTaGFkb3dDaGlja2Vu
KCkKIHsKLSAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNp
dG9yKTsKKyAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCkKIHsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMobV9zbG90VmlzaXRvcik7CisgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2Vk
U3R1YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29kZSBC
bG9ja3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsICptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKIAotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsK
KyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOwogfQogCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQordm9pZCBI
ZWFwOjptYXJrVG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgVGlt
aW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjp2aXNpdFdlYWtIYW5kbGVzIik7Cisg
ICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpmaXhwb2ludCIpOworICAg
IFNlY29uZHMgY29uY3VycmVudFRpbWU7CisgICAgZG91YmxlIHN0b3BwZWRPdmVyQ29uY3VycmVu
dFJhdGlvID0gMC4xOworICAgIGNvbnN0IGRvdWJsZSByYXRpb1N0ZXAgPSAxLjM7CisgICAgTW9u
b3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIE1vbm90
b25pY1RpbWUgdG9wT2ZMb29wVGltZSA9IGluaXRpYWxUaW1lOwogICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0gdG9wT2ZMb29wVGltZSArIGNv
bmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW87CisgICAgICAgIHN0b3Bw
ZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKKyAgICAgICAgeworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OnZp
c2l0IGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBj
b25zZXJ2YXRpdmVSb290cygqdGhpcyk7CisgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBz
dXBlclNhbXBsZXJTY29wZShmYWxzZSk7CisgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2
YXRpdmVSb290cyk7CisgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2Vy
dmF0aXZlUm9vdHMpOworICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2
YXRpdmVSb290cyk7CisgICAgICAgIH0KKwogICAgICAgICB7CiAgICAgICAgICAgICBUaW1pbmdT
Y29wZSB0aW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwog
ICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwogICAgICAg
ICB9CiAgICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgICAgICB2aXNpdENvbXBp
bGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5p
c0VtcHR5KCkpCisgICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7
CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZl
bHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQorICAgICAg
ICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRv
IGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jaworICAgICAgICAvLyBzbyB0aGF0IHdl
IGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBo
YXMgdG8gaGFwcGVuIGFmdGVyIHRoZQorICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVy
d2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRv
IGRvIHRoaXMKKyAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0
IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKKyAgICAg
ICAgLy8gR0MuCisgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhl
Y3V0aW5nKHRoaXMpOworICAgICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKQogICAgICAgICAgICAgYnJlYWs7
Ci0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFy
ZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAg
ICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAg
ICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+bXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUg
V2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgICAgICBkYXRhTG9nKCJM
aXZlIFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgICAg
ICB7Ci0gICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRv
cik7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAg
ICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJh
aW4pOworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0
ZUFuZERyYWluKHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQgPQorICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4sIHRpbWVU
b1Jlc3VtZSk7CisgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRT
Y29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgICAgIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJh
aW4pOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNb25vdG9u
aWNUaW1lIHRpbWVPZlN0b3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgY29uY3Vy
cmVudFRpbWUgPSB0aW1lT2ZTdG9wIC0gdGltZVRvUmVzdW1lOworICAgICAgICB0b3BPZkxvb3BU
aW1lID0gdGltZU9mU3RvcDsKICAgICB9CiB9CiAKIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291
bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBH
Q0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQgPSBtX3Nsb3RW
aXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAgc2l6ZV90IHZpc2l0Q291bnQgPSBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAgICAgIHZpc2l0Q291bnQgKz0gdGhy
ZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmpl
Y3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0g
Z2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgyNywxOSArODc5LDIyIEBAIHZvaWQgSGVhcDo6dXBk
YXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gMDsK
IAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPSBtX3Nsb3RWaXNpdG9yLmJ5dGVz
VmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CisgICAgbV90b3RhbEJ5dGVzVmlzaXRl
ZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmJ5dGVzVmlzaXRl
ZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAgICAgCiAgICAgbV90b3RhbEJ5
dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlOwogfQogCiB2b2lkIEhl
YXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xvdFZpc2l0b3IucmVzZXQoKTsKKyAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZp
c2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJhbGxlbFZpc2l0b3It
PnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKICAgICAKICAgICBt
X29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAgLTk3NywxNCArMTAzMiwyMCBAQCB2b2lkIEhl
YXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiB7CiAgICAgQVNTRVJUKGNlbGwpOwog
ICAgIEFTU0VSVCghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkFu
dGhyYWNpdGVPckJsYWNrKTsKLSAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIGdy
ZXkgYW5kIHRoYXQgaXQncyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAvLyAtIEEgcmUtZ3Jl
eWVkIG9iamVjdCBkdXJpbmcgYSBjb25jdXJyZW50IGNvbGxlY3Rpb24uCi0gICAgLy8gLSBBbiBv
bGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgLy8gIk9sZEdyZXkiIGRvZXNuJ3QgdGVsbCB1cyB3
aGljaCBvZiB0aGVzZSB0aGluZ3MgaXMgdHJ1ZSwgYnV0IHdlIHVzdWFsbHkgdHJlYXQgdGhlIHR3
byBjYXNlcyB0aGUKLSAgICAvLyBzYW1lLgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3Rh
dGU6Ok9sZEdyZXkpOwotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9NYXJrU3RhY2soY29uc3Rf
Y2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgaWYgKCFIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShjZWxsKSkgeworICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBp
bnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQgcGFzdAorICAgICAgICAv
LyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8gYW4gdW5tYXJrZWQgYmxh
Y2sgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKKyAgICAgICAgLy8gbWFya2VkIGF0IHNvbWUg
dGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBub3JtYWwgbWFya2luZyBw
YXRoLiBXZSBjYW4KKyAgICAgICAgLy8gc2FmZWx5IGlnbm9yZSB0aGVzZSBzdG9yZXMuCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSXQgY291bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdh
cyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvciBtYXkgc2V0IHRo
ZQorICAgIC8vIHN0YXRlIHRvIEdyZXkgYW5kIHRoZW4gdG8gQW50aHJhY2l0ZU9yQmxhY2sgYXQg
YW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvIHJhY2Ugd2l0aCB0aGUKKyAgICAvLyBjb2xsZWN0
b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmpl
Y3QgX3dpbGxfIGdldCBzY2FubmVkIGFnYWluLgorICAgIC8vIElmIHdlIGxvc2UgdGhlbiBzb21l
b25lIGVsc2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3QgYWdhaW4uIFRoYXQgd291bGQgYmUgdW5m
b3J0dW5hdGUgYnV0IG5vdAorICAgIC8vIHRoZSBlbmQgb2YgdGhlIHdvcmxkLgorICAgIGNlbGwt
PnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOworICAgIG1fbXV0YXRvck1hcmtTdGFjay0+
YXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKQEAgLTEw
ODMsMjkgKzExNDQsMTQgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgIAogICAg
IHN0b3BUaGVXb3JsZCgpOwogCi0gICAgZG91YmxlIGJlZm9yZSA9IDA7CisgICAgTW9ub3Rvbmlj
VGltZSBiZWZvcmU7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKICAgICAgICAgZGF0YUxv
ZygiW0dDOiAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBrYiAiKTsKLSAgICAgICAgYmVmb3JlID0g
Y3VycmVudFRpbWVNUygpOworICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
ICAgICB9CiAgICAgCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lOwogICAgIAotICAgIGlmICh2bSgp
LT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhp
cyk7Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhB
U0NJSUxpdGVyYWwoIkdDIikpOwotICAgIH0KLSAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHsK
LSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklU
V29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pKQotICAgICAgICAg
ICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAg
ICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUp
OwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBz
ZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CkBAIC0xMTI1LDEwICsx
MTcxLDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3ZlcmlmaWVy
LT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsK
ICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAgICBz
dG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUq
IGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xl
YXIoKTsKQEAgLTExNzAsOCArMTIxMyw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkK
ICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91Ymxl
IGFmdGVyID0gY3VycmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3Jl
LCAiIG1zXVxuIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1l
Ojpub3coKTsKKyAgICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29u
ZHMoKSwgIiBtcywgY3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBt
c11cbiIpOwogICAgIH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMjM2LDM4IEBAIHZvaWQg
SGVhcDo6c3RvcFRoZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRD
b21waWxlclRocmVhZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNT
dG9wcGVkID0gdHJ1ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAg
ICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9m
aWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0K
KyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBh
d2hpbGUoKnRoaXMpOworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBs
ZXRlQWxsRm9yVk0oKm1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBk
YXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJy
aWVyQnVmZmVyKCk7CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7Cisg
ICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgp
CiB7CisgICAgLy8gQ2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5n
IGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVj
dGlvbiBjeWNsZSBvciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNv
bGxlY3Rpb24gY3ljbGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQn
cyBhIG5vLW9wIGJlY2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRo
ZQorICAgIC8vICAgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlv
biBjeWNsZTogaXQgcmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmpl
Y3RTcGFjZS5yZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JC
ZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVy
VGhyZWFkcygpOwpAQCAtMTU0OSwyMyArMTYyMCw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29s
bGVjdGlvbihPcHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgp
OwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1f
c3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNo
KCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1ZmZl
ci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBtX29i
amVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1
c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5NDks
NyArMjAwNiw3IEBAIGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0
ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6Okhl
bHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTk3MSwxMiArMjAyOCw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAgICAg
cmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3RhdGU6
OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxT
dGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1j
b3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxl
Y3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVk
ZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0K
ICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAgZm9y
ICg7OykgewpAQCAtMTk4NywxMiArMjA0MCw4IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQgSGVh
cDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90
IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6
ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwg
bWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlm
IChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUg
PT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNv
dW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3IgKDs7KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxs
U3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYs
NiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgi
CiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2lu
Y2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3Mg
SklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNz
YXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBN
YXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAg
TWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFk
czsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRv
cigpIHsgcmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJy
YXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNh
bGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVu
QWN0aXZpdHlDYWxsYmFjaygpOwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGljOgogICAgIC8v
IGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUgbWF5IHRyaWdn
ZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQgcmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsK
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVw
b3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lkZSB0aGlzIHBy
b2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAgc2l6ZV90IGV4
dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXplOyB9CiAjZW5k
aWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29ybGQo
KTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3MgUmVzdW1lVGhl
V29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICAK
ICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9yKCk7
CiAgICAgCkBAIC00MjIsOSArNDI4LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3Bl
bmRDb21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9u
YWw8Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVz
KCk7CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFs
bG9jYXRpb24oKTsKICAgICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCiAgICAgdm9p
ZCBtYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKQEAgLTQ0NSw3ICs0NDksNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7CiAgICAgdm9pZCB2aXNpdFNo
YWRvd0NoaWNrZW4oKTsKICAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5l
cygpOwotICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2
b2lkIG1hcmtUb0ZpeHBvaW50KEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdXBkYXRlT2Jq
ZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CiAK
QEAgLTUxNyw3ICs1MjEsOCBAQCBwcml2YXRlOgogCiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNo
aW5lVGhyZWFkczsKICAgICAKLSAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKIAogICAg
IC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRo
cmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0
aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50
IG9mIG1lbW9yeSBmcm9tCkBAIC01NzEsNyArNTc2LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sg
bV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
OwotICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAg
ICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1
bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29s
IG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkBAIC01OTksNiArNjA1LDcg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQg
PSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0
aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJv
b2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07Cisg
ICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENv
bGxlY3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tl
dCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tB
cnJheTo6TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFu
c2ZlclRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlz
ICE9ICZvdGhlcik7CisgICAgCisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBv
ZiB0aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlI
ZWFkID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3Qg
SlNDZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAg
IG1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOwor
ICAgIAorICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOworICAgIAorICAg
IG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cyArPSBtX251bWJlck9mU2VnbWVudHM7CisgICAgbV9u
dW1iZXJPZlNlZ21lbnRzID0gMDsKKyAgICAKKyAgICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRz
IGJhY2sgaW4gdGhlaXIgcGxhY2VzLgorICAgIG1fc2VnbWVudHMucHVzaChteUhlYWQpOworICAg
IG90aGVyLm1fc2VnbWVudHMucHVzaChvdGhlckhlYWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50
cysrOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIAorICAgIHdoaWxlICgh
aXNFbXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY2FuUmVtb3Zl
TGFzdCgpKQorICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQor
fQorCiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJh
eSYgb3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2Vs
bHMuIFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xh
c3MgTWFya1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NTZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtT
dGFja0FycmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5
JiBvdGhlcik7Ci0gICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90
aGVyLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKKyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0
YWNrQXJyYXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7
CisgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRs
ZVRocmVhZENvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MTIsNyArNDEyLDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvck1hcmtpbmco
KQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBBU1NFUlQo
aXNJdGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAgWyZdIChNYXJr
ZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAg
IGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUs
OSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAog
U2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX3N0YWNrKCkKLSAg
ICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDApCisgICAgOiBtX2J5
dGVzVmlzaXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxl
bE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFs
VmVyc2lvbikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAm
IGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIGNsZWFyTWFya1N0
YWNrKCk7CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZygpCkBAIC0xMTAsMTUgKzEwOCwxNSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
aWRTdGFydE1hcmtpbmcoKQogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogewogICAgIG1fYnl0
ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQg
PSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7CiAgICAgQVNTRVJUKCFt
X2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQor
dm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBtX3N0YWNrLmNsZWFy
KCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0YXRvclN0YWNrLmNs
ZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYg
Y29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ2LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkp
OworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogCiAgICAg
ICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3
ICsyMDgsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlCiAgICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAgLy8gSW4g
Y2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4g
dGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBh
IG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJl
ZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7Cisg
ICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgYXBwZW5k
VG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiArMjI2LDE5IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAgICBBU1NFUlQoSGVh
cDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBw
ZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3Jl
eSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpOworICAgIEFTU0VS
VChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGNvbnRh
aW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNlICJqdXN0IHdvcmsi
IGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5n
IGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hlbiB3ZSBkbyBjb25j
dXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNv
bnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworICAg
IG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjph
cHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1fbXV0
YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGls
aWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTUsMTAgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2Nv
cGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAgbV9vbGRDZWxsU3Rh
dGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAgICAKLSAgICAvLyBUaGVyZSBpcyBubyByYWNlIGhl
cmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4gR3JleSBvYmplY3Rz
IGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUgbWFya2luZyB0aHJlYWQuIE5laXRo
ZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuCi0g
ICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5LgotICAgIEFTU0VSVChtX29sZENlbGxT
dGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRl
OjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQncyBwb3NzaWJsZSBmb3IgdGhlIG9i
amVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJyaWVyIHRoZSBvYmplY3QgYXQKKyAg
ICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBtYXJrZWQuIFRoYXQncyBmaW5lLiBJ
dCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0J3MKKyAgICAvLyBub3QgY2xlYXIg
dG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHByb2ZpdGFibGUgdG8gYmFpbCBoZXJl
IGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJsYWNrLgogICAgIAogICAgIGNlbGwt
PnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVPckJsYWNrKTsKICAgICAKQEAgLTMy
NiwyMyArMzI1LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkK
ICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpIHsK
LSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSkKKyAgICAg
ICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAgICAgICAgICAgICBtX2hlYXBTbmFw
c2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAg
fQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3ZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtT
dGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwg
d2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0
IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAgLy8gQXZvaWQgbG9ja2luZyB3aGVu
IGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlm
IChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20uc2l6ZSgpIDwgMikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVl
dWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcg
bW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNr
LnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJ
ZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3Vt
ZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzUxLDQzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdGhlcndpc2Us
IGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29uLCBhbmQgZG9uYXRlLgotICAg
IG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAg
ICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
KQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit7CisgICAgZG9uYXRl
S25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9y
TWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVsKG1fbXV0YXRvclN0YWNrLCAqbV9o
ZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRy
YWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxN
b2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9z
dGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25z
OjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1v
dmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0
YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5
KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkp
IHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011
dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9jb2xs
ZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
bXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgLy8gV2Uga25vdyBmb3Igc3VyZSB0
aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ugb2YgdGhlIGJhcnJpZXIsIG5vdCBi
ZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBNYXJraW5nIHdpbGwgdmlzaXQgYW4g
b2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2lsbCB2aXNpdCBpdAorICAgICAgICAg
ICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5cyBhZnRlciBpdCB3YXMgYWxyZWFk
eSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVt
YmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFz
dCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0
YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0KICAgICAgICAgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nhcnko
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9k
ZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZp
c2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7
CiAgICAgCkBAIC0zOTQsNDYgKzQxMCw1OCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21T
aGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
d2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91dCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2hhcmVkRHJh
aW5Nb2RlID09IFNsYXZlRHJhaW4pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBsZXQgdGhlIG1hc3RlciBrbm93
LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1h
cmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hh
cmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hl
YXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAKLSAgICAgICAgICAg
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdCgKLSAgICAgICAgICAg
ICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAgICBsb2NrLCB0aW1lb3V0LAog
ICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1f
aGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBo
YXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAg
ICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJl
c3VsdDo6RG9uZTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0Owog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgK
LSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNr
LnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAg
ICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBk
cmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAgICB9CiB9CiAKQEAgLTQ5NywxMCAr
NTI1LDEwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25QYXJh
bGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAg
ZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9pZCBT
bG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCkBAIC01MjYsMTAgKzU1NCw5IEBAIHZvaWQg
U2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9oZWFwLm1fdW5j
b25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxs
eSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3Zv
aWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3Ig
KGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRhTG9nKCpjZWxs
LCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChj
b2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKG11
dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRl
ICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5jbHVkZSA8d3Rm
L01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkgKzU4LDExIEBA
IHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAK
LSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQotICAg
IGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
OyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4g
bV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNr
KCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYg
Y29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQor
ICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1
cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYg
dm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NiwyMiArODksMjIgQEAg
cHVibGljOgogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBj
b25zdDsKICAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7
IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsg
fQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAg
dm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAg
ICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0K
LSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29waWVkOyB9
CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0K
IAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQgZG9uYXRl
QW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9ub3Rvbmlj
VGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAgICAgZW51
bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAgIHZvaWQg
ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBTaGFyZWRE
cmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJh
aW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9u
b3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNl
cygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpAQCAtMTQx
LDYgKzE0NCw4IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlw
ZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsK
ICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwqKTsK
KyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwpAQCAtMTUwLDEy
ICsxNTUsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxs
Kik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8p
OwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwogICAgIE9w
YXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVy
ZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIAogICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsKICAgICBzaXplX3Qg
bV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIApAQCAtMTY1
LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsg
bnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAgICBib29sIG1faXNW
aXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDE1
IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKIAogaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsK
LSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6
ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemUp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2NywxNiBAQCBwdWJsaWM6CiAgICAgQ2Vs
bFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CiAgICAgCiAg
ICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxK
U0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisgICAgYm9vbCBhdG9t
aWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3RhdGUgb2xkU3RhdGUs
IENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0Nv
bXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRl
KTsKKyAgICB9CisKKyAgICBDZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRl
U3Ryb25nKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKCZtX2NlbGxTdGF0
ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0
cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsNyBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6
ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0
aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VDb25jdXJy
ZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNlQ29u
Y3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmb3JjZUZl
bmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmli
YmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNp
emVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNl
L1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVt
cC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBMaXN0RHVtcEluQ29udGV4dDxULCBVPiBs
aXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpsaXN0RHVt
cDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Omxpc3REdW1wSW5Db250
ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RGOjpwb2ludGVyTGlzdER1bXA7Cit1
c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcgV1RGOjpzb3J0ZWRNYXBEdW1wOwotdXNp
bmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2VuZGlmIC8vIExpc3REdW1wX2gKIApJbmRl
eDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAiQ29uZGl0aW9uLmgi
CiAjaW5jbHVkZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSA8
Y2Zsb2F0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xlZXAoY29uc3QgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChmYWtlTG9j
aywgdGltZSk7CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmIHRpbWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisgICAgaWYgKCEodGlt
ZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdGltZSA8PSB0aW1l
Lm5vd1dpdGhTYW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIApJbmRleDog
U291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOwogCitXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpOworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWND
bG9ja1R5cGU7Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6OnNsZWVwOwogCiAj
ZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294073</attachid>
            <date>2016-11-07 11:42:51 -0800</date>
            <delta_ts>2016-11-07 12:11:29 -0800</delta_ts>
            <desc>it can collect like seven times before crashing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75662</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGls
YXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
CiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNv
LCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBv
dXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAg
ICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdp
dGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVk
IHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJs
b2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAg
IEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRE
RkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAg
IAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZl
cG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0
YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRp
dGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29y
a2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0
ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7Cisg
ICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMs
NiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9
CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2Rl
QmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNl
IC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7
Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3Zv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9B
dXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRl
IHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAt
MTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwog
dm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE3ICszNywxMSBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8v
IFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4KICAgICBBbnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAg
Ci0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhl
IG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2lu
ZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBi
ZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBn
cmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVu
dCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdy
ZXkgPSAzCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQuCisgICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJl
c2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9y
QmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRB
cnJheS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1NlZ21lbnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNj
b3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3co
KSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAg
IH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsK
KworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ug
d2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBt
X3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1h
a2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZt
KQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQog
ICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNl
dD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJz
aW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxw
ZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lk
IEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZp
c2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9p
ZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDExNiArNDcxLDE3MCBAQCB2b2lk
IEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29y
a2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBn
Y1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1l
KQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgq
dGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9y
IGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVh
cFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAg
ICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCi0KICNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICAv
LyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxvY2sgZnJvbSBub3cgdW50aWwgd2UncmUg
ZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUgU2FtcGxpbmdQcm9maWxlcidzIGRhdGEg
YmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAgICAgICAgIC8vIFNhbXBsaW5nUHJvZmls
ZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQgaXQgdG8gYWNjdW11bGF0ZQotICAgICAg
ICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3JlIHdlIGdldCB0aGUgY2hhbmNlIHRvIG1h
cmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sgaXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0
U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9j
aygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlm
aWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQorICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBz
YW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgIC8v
IE5vdGUgdGhhdCB3ZSBuZWVkIHRvIG93biB0aGUgbG9jayBmcm9tIG5vdyB1bnRpbCB3ZSdyZSBk
b25lCisgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBkYXRhIGJlY2F1
c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCisgICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFj
ayB0cmFjZXMsIHdlIGRvbid0IHdhbnQgaXQgdG8gYWNjdW11bGF0ZQorICAgICAgICAvLyBtb3Jl
IHN0YWNrIHRyYWNlcyBiZWZvcmUgd2UgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayBpdC4KKyAgICAg
ICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIo
KS4KKyAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKKyAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAKLSAgICAgICAgaWYgKG1fY29s
bGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAgICAgbV9v
cGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtT
dGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJraW5nKCk7Ci0KLSAgICAgICAg
bV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0KLSAgICAgICAgbV9oZWxwZXJD
bGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10gKCkgewotICAgICAgICAgICAg
ICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2sp
OwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9y
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
bG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7Ci0gICAg
ICAgICAgICAgICAgfQorICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpIHsKKyAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOworICAgICAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKKyAgICAgICAgbV9tdXRhdG9y
TWFya1N0YWNrLT5jbGVhcigpOworICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0
ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgYmVnaW5NYXJraW5nKCk7CiAK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgcGFyYWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNs
b3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAg
ICAgICAgICAgICAgIH0KKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsK
IAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXZh
aWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlv
bigKKyAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90Vmlz
aXRvcjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFi
bGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9yID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOworICAgICAgICAgICAg
ICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3Ip
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9
Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgV1RGOjpyZWdpc3RlckdDVGhy
ZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2
ZURyYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAg
ICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKIAorICAgIFNlY29uZHMgY29uY3VycmVudFRpbWU7Cisg
ICAgZG91YmxlIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvID0gMC4xOworICAgIGNvbnN0IGRv
dWJsZSByYXRpb1N0ZXAgPSAxLjM7CisgICAgTW9ub3RvbmljVGltZSBpbml0aWFsVGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgIE1vbm90b25pY1RpbWUgdG9wT2ZMb29wVGltZSA9IGlu
aXRpYWxUaW1lOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGlt
ZVRvUmVzdW1lID0gdG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJD
b25jdXJyZW50UmF0aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJh
dGlvU3RlcDsKICAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2Vu
Y2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIp
OworICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAg
ICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAg
ICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhl
ckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3Jh
dGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25z
ZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVk
LCBzbyBlYWNoIGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFs
bCBvZiB0aGVtLgorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5h
bFJlbWVtYmVyZWRTZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgog
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2Vy
dmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQot
ICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUg
c3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAg
IC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVy
LgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNl
dCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFByb3RlY3Rl
ZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMo
aGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RWaXNpdG9y
KTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAg
IHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTYW1wbGlu
Z1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgICAgICB0cmFj
ZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICB9Ci0gICAgCi0g
ICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBt
dXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgotICAg
IC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIHZp
c2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxs
U3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAg
ICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3By
b3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5r
ZXkpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xp
c3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlz
dHMoaGVhcFJvb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZp
c2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RF
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRy
ZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgIG1faGFuZGxlU2V0
LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hhbmRsZVN0
YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9m
aWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxl
ci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5k
b25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygp
LnVubG9jaygpOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQorICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRD
aGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgbV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygp
OworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9jb2xsZWN0b3JTbG90Vmlz
aXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgICAg
ICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3Vy
ZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8gcnVu
bmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0
ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZv
ciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhh
cHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2Ug
bWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlz
CisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5k
IG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0CisgICAgICAgIC8vIEdD
LgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0
aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAgICAK
KyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2Vk
IGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQorICAgICAgICAvLyB3
aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCisgICAgICAgIG1fbXV0
YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9y
TWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRs
ZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgeworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBv
aW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRy
YWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ICE9IFNsb3RW
aXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAgICAgIFJlc3Vt
ZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CisgICAgICAgICAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAg
ICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6
Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAg
ICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVUb1Jlc3VtZTsKKyAgICAgICAg
dG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQogCiAgICAgewogICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjIsNyArNjQ4LDYg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2b2lkIEhlYXA6
OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1faml0
U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tz
KTsKIH0KIApAQCAtNTg5LDYgKzY3NCw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAg
ICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OmJlZ2luTWFya2luZyIpOwog
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAg
ICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgbV9q
aXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAKICAgICB7CiAgICAgICAgIFRpbWlu
Z1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UuYmVnaW5N
YXJraW5nIik7CkBAIC01OTYsNDIgKzY4MiwyMiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygp
CiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCkKLXsK
LSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQo
Km1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTbWFs
bFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV92bS0+c21h
bGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKLSAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLSAgICBtX3Nsb3RWaXNpdG9yLmRv
bmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhD
b25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmQocm9v
dHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7CiAKICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUg
Um9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVhcDo6dmlz
aXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShERkdfSklU
KQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykK
LSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJl
bmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxv
ZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNlbmRpZgog
fQogCkBAIC03MDQsMTIyICs3NzAsMTAgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBz
aG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAgZm9yIChhdXRvJiBwYWly
IDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFp
ci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsIG1fc2xvdFZpc2l0b3Ip
OwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6
OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBp
ZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9t
YXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBI
ZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYg
KCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsK
LSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7Ci0KLSAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMo
SGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhhbmRsZXM6XG4iLCBtX3Nsb3RW
aXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9p
ZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAg
ICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJIYW5kbGUgU3RhY2s6
XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQotewotI2lmIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQ
cm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICBBU1NFUlQoc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAgICBzYW1wbGluZ1By
b2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcg
UHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIG1fc2xvdFZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygp
LnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRTaGFkb3dDaGlja2VuKCkKLXsKLSAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp0
cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKQotewotICAgIG1faml0U3R1YlJvdXRp
bmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhtX3Nsb3RWaXNpdG9yKTsKLQotICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
Q29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0K
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjp2aXNpdFdlYWtIYW5kbGVzIik7Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2Nv
cGUoKnRoaXMsICJtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMiKTsKLSAgICAgICAgICAgIG1f
b2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKLSAgICAgICAgfQotICAgICAgICBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgaWYgKG1fc2xvdFZpc2l0b3IuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4i
LCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9y
LmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2
b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAgIHNp
emVfdCB2aXNpdENvdW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAgIHNp
emVfdCB2aXNpdENvdW50ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgpOwog
ICAgICAgICB2aXNpdENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxv
Z0YoIlxuTnVtYmVyIG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNz
XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CkBAIC04MjcsMTkg
Kzc4MSwyMiBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAg
aWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAg
bV90b3RhbEJ5dGVzVmlzaXRlZCA9IDA7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5
Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgp
OworICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPQorICAgICAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQoKSArCisgICAgICAgIHRocmVhZEJ5dGVzVmlzaXRl
ZCgpOwogICAgIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV90b3RhbEJ5dGVzVmlzaXRl
ZFRoaXNDeWNsZTsKIH0KIAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBtX3Nsb3RW
aXNpdG9yLnJlc2V0KCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKIAog
ICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
ICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCi0gICAgQVNTRVJUKG1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMu
cmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CkBAIC05
NzcsMTQgKzkzNCwyMCBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0Nl
CiB7CiAgICAgQVNTRVJUKGNlbGwpOwogICAgIEFTU0VSVCghT3B0aW9uczo6dXNlQ29uY3VycmVu
dEpJVCgpIHx8ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxs
U3RhdGUoKSA9PSBDZWxsU3RhdGU6OkFudGhyYWNpdGVPckJsYWNrKTsKLSAgICAvLyBJbmRpY2F0
ZSB0aGF0IHRoaXMgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQgaXQncyBvbmUgb2YgdGhlIGZvbGxv
d2luZzoKLSAgICAvLyAtIEEgcmUtZ3JleWVkIG9iamVjdCBkdXJpbmcgYSBjb25jdXJyZW50IGNv
bGxlY3Rpb24uCi0gICAgLy8gLSBBbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgLy8gIk9s
ZEdyZXkiIGRvZXNuJ3QgdGVsbCB1cyB3aGljaCBvZiB0aGVzZSB0aGluZ3MgaXMgdHJ1ZSwgYnV0
IHdlIHVzdWFsbHkgdHJlYXQgdGhlIHR3byBjYXNlcyB0aGUKLSAgICAvLyBzYW1lLgotICAgIGNl
bGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kVG9NYXJrU3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgaWYgKCFI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAvLyBEdXJpbmcgYSBm
dWxsIGNvbGxlY3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBz
dXJpdml2ZWQgcGFzdAorICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEg
c3RvcmUgdG8gYW4gdW5tYXJrZWQgYmxhY2sgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKKyAg
ICAgICAgLy8gbWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBk
b3duIHRoZSBub3JtYWwgbWFya2luZyBwYXRoLiBXZSBjYW4KKyAgICAgICAgLy8gc2FmZWx5IGln
bm9yZSB0aGVzZSBzdG9yZXMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSXQgY291
bGQgYmUgdGhhdCB0aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQg
dGhlIGNvbGxlY3RvciBtYXkgc2V0IHRoZQorICAgIC8vIHN0YXRlIHRvIEdyZXkgYW5kIHRoZW4g
dG8gQW50aHJhY2l0ZU9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvIHJhY2Ug
d2l0aCB0aGUKKyAgICAvLyBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBh
Y2N1cmF0ZSBiZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfIGdldCBzY2FubmVkIGFnYWluLgorICAg
IC8vIElmIHdlIGxvc2UgdGhlbiBzb21lb25lIGVsc2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3Qg
YWdhaW4uIFRoYXQgd291bGQgYmUgdW5mb3J0dW5hdGUgYnV0IG5vdAorICAgIC8vIHRoZSBlbmQg
b2YgdGhlIHdvcmxkLgorICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwor
ICAgIG1fbXV0YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIEhlYXA6OmNv
bGxlY3RBbGxHYXJiYWdlKCkKQEAgLTEwODMsMjkgKzEwNDYsMTQgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0SW5UaHJlYWQoKQogICAgIAogICAgIHN0b3BUaGVXb3JsZCgpOwogCi0gICAgZG91YmxlIGJl
Zm9yZSA9IDA7CisgICAgTW9ub3RvbmljVGltZSBiZWZvcmU7CiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpIHsKICAgICAgICAgZGF0YUxvZygiW0dDOiAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBr
YiAiKTsKLSAgICAgICAgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOworICAgICAgICBiZWZvcmUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICB9CiAgICAgCiAgICAgZG91YmxlIGdjU3RhcnRU
aW1lOwogICAgIAotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICBEZWZl
ckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxv
ZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOwotICAgIH0KLSAgICAK
LSNpZiBFTkFCTEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUo
KnRoaXMpOwotICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxs
Rm9yVk0oKm1fdm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2
bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29s
bGVjdCk7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNv
bGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29w
ZSwgIlxuIik7CkBAIC0xMTI1LDE1ICsxMDczLDEyIEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhy
ZWFkKCkKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVy
OjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQogICAgICAgICAKLSAgICBmbHVzaE9sZFN0
cnVjdHVyZUlEVGFibGVzKCk7Ci0gICAgc3RvcEFsbG9jYXRpb24oKTsKICAgICBwcmVwYXJlRm9y
TWFya2luZygpOwotICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CiAgICAgICAgIAogICAg
IGlmIChIYXNPd25Qcm9wZXJ0eUNhY2hlKiBjYWNoZSA9IHZtKCktPmhhc093blByb3BlcnR5Q2Fj
aGUoKSkKICAgICAgICAgY2FjaGUtPmNsZWFyKCk7CiAgICAgICAgIAotICAgIG1hcmtSb290cyhn
Y1N0YXJ0VGltZSk7CisgICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUpOwogICAgICAgICAK
ICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2Jq
ZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAtMTE3MCw4ICsxMTE1
LDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgIH0KICAgICAKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1T
KCk7Ci0gICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXNdXG4iKTsKKyAgICAgICAg
TW9ub3RvbmljVGltZSBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBkYXRh
TG9nKChhZnRlciAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLCBjeWNsZSAiLCAo
YWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zXVxuIik7CiAgICAgfQogICAgIAog
ICAgIHsKQEAgLTExOTMsMTAgKzExMzgsMzggQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQog
ICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAg
IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworCisgICAg
aWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdo
aWxlKCp0aGlzKTsKKyAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQp
CisgICAgeworICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAg
IGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCisg
ICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQor
ICAgIAorICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENh
bGxGcmFtZSk7CisgICAgCisgICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICBtX3N0
cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BB
bGxvY2F0aW5nKCk7CisgICAgCisgICAgbV9zdG9wVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwogfQogCiB2b2lkIEhlYXA6OnJlc3VtZVRoZVdvcmxkKCkKIHsKKyAgICAvLyBDYWxsaW5nIHJl
c3VtZUFsbG9jYXRpbmcgZG9lcyB0aGUgUmlnaHQgVGhpbmcgZGVwZW5kaW5nIG9uIHdoZXRoZXIg
dGhpcyBpcyB0aGUgZW5kIG9mIGEKKyAgICAvLyBjb2xsZWN0aW9uIGN5Y2xlIG9yIHRoaXMgaXMg
anVzdCBhIGNvbmN1cnJlbnQgcGhhc2Ugd2l0aGluIGEgY29sbGVjdGlvbiBjeWNsZToKKyAgICAv
LyAtIEF0IGVuZCBvZiBjb2xsZWN0aW9uIGN5Y2xlOiBpdCdzIGEgbm8tb3AgYmVjYXVzZSBwcmVw
YXJlRm9yQWxsb2NhdGlvbiBhbHJlYWR5IGNsZWFyZWQgdGhlCisgICAgLy8gICBsYXN0IGFjdGl2
ZSBibG9jay4KKyAgICAvLyAtIER1cmluZyBjb2xsZWN0aW9uIGN5Y2xlOiBpdCByZWluc3RhdGVz
IHRoZSBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICBtX29iamVjdFNwYWNlLnJlc3VtZUFsbG9jYXRp
bmcoKTsKKyAgICAKICAgICBSRUxFQVNFX0FTU0VSVChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNT
dG9wcGVkID0gZmFsc2U7CiAgICAgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CkBAIC0xNDY2LDEw
ICsxNDM5LDE1IEBAIHZvaWQgSGVhcDo6bm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgTG8KIAog
dm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiB7Ci0gICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2Nv
cGUoKnRoaXMpOwotICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Ci0gICAgZGVsZXRl
U291cmNlUHJvdmlkZXJDYWNoZXMoKTsKLSAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAg
ICB7CisgICAgICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKKyAgICAg
ICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKKyAgICAgICAgZGVsZXRlU291cmNlUHJv
dmlkZXJDYWNoZXMoKTsKKyAgICAgICAgc3dlZXBMYXJnZUFsbG9jYXRpb25zKCk7CisgICAgfQor
ICAgIAorICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAgICAgIGNv
bGxlY3RBc3luYygpOwogfQogCiBIZWFwOjpUaWNrZXQgSGVhcDo6cmVxdWVzdENvbGxlY3Rpb24o
T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29wZSkKQEAgLTE1NDksMjMgKzE1MjcsOSBAQCB2
b2lkIEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVy
LT53aWxsR2FyYmFnZUNvbGxlY3QoKTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVy
ZUlEVGFibGVzKCkKLXsKLSAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsK
LX0KLQogdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpCiB7Ci0gICAgaWYgKG1f
Y29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RWRlbikgewotICAgICAgICBtX3dy
aXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV93cml0ZUJhcnJpZXJCdWZmZXIucmVzZXQoKTsKLX0KLQotdm9pZCBIZWFwOjpzdG9wQWxs
b2NhdGlvbigpCi17Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1f
d3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKIH0KIAogdm9pZCBIZWFwOjpwcmVwYXJl
Rm9yTWFya2luZygpCkBAIC0xOTQ5LDcgKzE5MTMsNyBAQCBib29sIEhlYXA6OmNhbkNvbGxlY3Qo
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSB8fCBtdXRhdG9y
U3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKKyAgICBpZiAobXV0YXRvclN0YXRl
KCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5NzEsMTIgKzE5MzUsOCBAQCBib29sIEhlYXA6OmlzQ3Vy
cmVudFRocmVhZEJ1c3koKQogICAgIHJldHVybiBtYXlCZUdDVGhyZWFkKCkgfHwgbXV0YXRvclN0
YXRlKCkgIT0gTXV0YXRvclN0YXRlOjpSdW5uaW5nOwogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBI
ZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBv
cnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkg
PT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3Jl
eSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0cmFNZW1v
cnlTaXplOwogICAgIAogICAgIGZvciAoOzspIHsKQEAgLTE5ODcsMTIgKzE5NDcsOCBAQCB2b2lk
IEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsCiB9CiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCi12b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxs
U3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3Vi
bGUtY291bnQgdGhlIGV4dGVybmFsIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91
cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNj
b3BlOjpFZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0ZXJuYWxNZW1vcnlTaXplOwogCiAg
ICAgZm9yICg7OykgewpAQCAtMjA4Niw0ICsyMDQyLDExIEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9v
cChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6
bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKK3sKKyAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7
CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVj
dEFzeW5jKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5j
bHVkZSAiQ29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRT
ZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRl
ICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9w
dGlvbnMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlE
VGFibGUuaCIKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmgiCkBAIC03MCw3ICs3MCw5IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5l
U2V0OwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKK2NsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZm
ZXI7CitjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xh
c3MgVk07CiAKQEAgLTEyOSw3ICsxMzEsOCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9i
amVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRz
JiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIGNv
bnN0IFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdFZpc2l0
b3I7IH0KKyAgICBTbG90VmlzaXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcjsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgeyByZXR1cm4gKm1fbXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJh
Y2soKTsKQEAgLTE2OCw3ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsKICAgICB2b2lkIGFkZEV4ZWN1
dGFibGUoRXhlY3V0YWJsZUJhc2UqKTsKIAotICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzU2FmZVRv
Q29sbGVjdCgpOwogICAgIGJvb2wgaXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9p
c1NhZmVUb0NvbGxlY3Q7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25h
cHNob3R0aW5nKCkgY29uc3Q7CkBAIC0yMDMsMTEgKzIwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8g
Y2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dl
ciBjYXRhc3Ryb3BpYwogICAgIC8vIG1lbW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBv
cnQgdGhlIHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJv
Y2Vzcy4KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlTaXplKCkgeyByZXR1cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNlbmRp
ZgogCkBAIC0zOTEsNiArMzk0LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgp
OwogICAgIHZvaWQgcmVzdW1lVGhlV29ybGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVUaGVX
b3JsZFNjb3BlOworICAgIGZyaWVuZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIAog
ICAgIHZvaWQgc3RvcFRoZU11dGF0b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsK
ICAgICAKQEAgLTQyMiwzMCArNDI4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdXNw
ZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlv
bmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxl
cygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0b3BB
bGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAotICAgIHZv
aWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCBtYXJrVG9GaXhwb2lu
dChkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhDb25zZXJ2
YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRFeHRlcm5hbFJl
bWVtYmVyZWRTZXQoKTsKLSAgICB2b2lkIHZpc2l0U21hbGxTdHJpbmdzKCk7CiAgICAgdm9pZCB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNp
dENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENv
bXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7Ci0gICAgdm9pZCB2aXNpdFByb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9v
dFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYpOwot
ICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U2FtcGxp
bmdQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgdm9pZCB0
cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZpc2l0V2Vha0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChIZWFwUm9v
dFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRp
bWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTcsNyArNTExLDggQEAgcHJpdmF0
ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCi0gICAgU2xv
dFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0
b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBh
YmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhh
dmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNTcxLDcg
KzU2Niw4IEBAIHByaXZhdGU6CiAKICAgICBMb2NrIG1fbWFya2luZ011dGV4OwogICAgIENvbmRp
dGlvbiBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZTsKLSAgICBNYXJrU3RhY2tBcnJheSBtX3No
YXJlZE1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJh
eT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgeyBmYWxzZSB9OwpAQCAtNTk5LDYgKzU5NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0aGUg
bXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8
dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKICAgICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIE1vbm90b25pY1RpbWUgbV9zdG9wVGlt
ZTsKICAgICAKICAgICBEZXF1ZTxPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+PiBtX3JlcXVlc3Rz
OwogICAgIFRpY2tldCBtX2xhc3RTZXJ2ZWRUaWNrZXQgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsNiArMzYsMzQgQEAgTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0FycmF5KCkKIHsK
IH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6dHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYgb3Ro
ZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAgIAorICAgIC8v
IFJlbW92ZSBvdXIgaGVhZCBhbmQgdGhlIGhlYWQgb2YgdGhlIG90aGVyIGxpc3QuCisgICAgR0NB
cnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG15SGVhZCA9IG1fc2VnbWVudHMucmVtb3ZlSGVh
ZCgpOworICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBvdGhlckhlYWQgPSBvdGhl
ci5tX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBtX251bWJlck9mU2VnbWVudHMtLTsKKyAg
ICBvdGhlci5tX251bWJlck9mU2VnbWVudHMtLTsKKyAgICAKKyAgICBvdGhlci5tX3NlZ21lbnRz
LmFwcGVuZChtX3NlZ21lbnRzKTsKKyAgICAKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMg
Kz0gbV9udW1iZXJPZlNlZ21lbnRzOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDA7CisgICAg
CisgICAgLy8gUHV0IHRoZSBvcmlnaW5hbCBoZWFkcyBiYWNrIGluIHRoZWlyIHBsYWNlcy4KKyAg
ICBtX3NlZ21lbnRzLnB1c2gobXlIZWFkKTsKKyAgICBvdGhlci5tX3NlZ21lbnRzLnB1c2gob3Ro
ZXJIZWFkKTsKKyAgICBtX251bWJlck9mU2VnbWVudHMrKzsKKyAgICBvdGhlci5tX251bWJlck9m
U2VnbWVudHMrKzsKKyAgICAKKyAgICB3aGlsZSAoIWlzRW1wdHkoKSkgeworICAgICAgICByZWZp
bGwoKTsKKyAgICAgICAgd2hpbGUgKGNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgICAgIG90aGVy
LmFwcGVuZChyZW1vdmVMYXN0KCkpOworICAgIH0KK30KKwogdm9pZCBNYXJrU3RhY2tBcnJheTo6
ZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQogewogICAgIC8vIFRyeSB0
byBkb25hdGUgYWJvdXQgMSAvIDIgb2Ygb3VyIGNlbGxzLiBUbyByZWR1Y2UgY29weWluZyBjb3N0
cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw4ICszNSw5IEBAIGNsYXNzIE1hcmtTdGFja0FycmF5IDogcHVibGlj
IEdDU2VnbWVudGUKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tBcnJheSgpOwogCi0gICAgdm9pZCBk
b25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgIHZvaWQgc3RlYWxT
b21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVUaHJlYWRDb3Vu
dCk7CisgICAgdm9pZCB0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBkb25h
dGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNG
cm9tKE1hcmtTdGFja0FycmF5Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEz
Nyw2IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWQKIHZvaWQqIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykK
IHsKICAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmhhc0FueU5ld2x5QWxs
b2NhdGVkKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKICAg
ICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcFRvRnJlZUxpc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEJsb2NrLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIE1hcmtl
ZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1faGFuZGxlKGhhbmRs
ZSkKICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhS
YXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAogdGVtcGxhdGU8TWFya2Vk
QmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KQEAgLTI0MSwyNCArMjQzLDYgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzZXRJc0ZyZWVMaXN0ZQogICAgIG1faXNGcmVlTGlzdGVk
ID0gdHJ1ZTsKIH0KIAotY2xhc3MgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yIDogcHVibGljIE1h
cmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU2V0TmV3bHlBbGxvY2F0ZWRG
dW5jdG9yKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotICAgICAgICA6IG1fYmxvY2soYmxv
Y2spCi0gICAgewotICAgIH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEhlYXBD
ZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChN
YXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCkgPT0gJm1fYmxvY2stPmJsb2NrKCkpOwotICAgICAg
ICBtX2Jsb2NrLT5zZXROZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAgICAgcmV0dXJuIEl0ZXJh
dGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIG1fYmxvY2s7Ci19OwotCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BB
bGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAgICBpZiAoZmFsc2UpCkBA
IC0yNjYsMTIgKzI1MCwxNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0
aW5nCiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykpOwogCiAgICAg
aWYgKCFpc0ZyZWVMaXN0ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHdlIGVpdGhlciBkaWRuJ3QgdXNlIHRoaXMgYmxvY2sgYXQgYWxsIGZv
ciBhbGxvY2F0aW9uIHNpbmNlIGxhc3QgR0MsCiAgICAgICAgIC8vIG9yIHNvbWVvbmUgaGFkIGFs
cmVhZHkgZG9uZSBzdG9wQWxsb2NhdGluZygpIGJlZm9yZS4KICAgICAgICAgQVNTRVJUKGZyZWVM
aXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
KyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIkZyZWUgbGlzdDogIiwgZnJlZUxpc3Qs
ICJcbiIpOworICAgIAogICAgIC8vIFJvbGwgYmFjayB0byBhIGNvaGVyZW50IHN0YXRlIGZvciBI
ZWFwIGludHJvc3BlY3Rpb24uIENlbGxzIG5ld2x5CiAgICAgLy8gYWxsb2NhdGVkIGZyb20gb3Vy
IGZyZWUgbGlzdCBhcmUgbm90IGN1cnJlbnRseSBtYXJrZWQsIHNvIHdlIG5lZWQgYW5vdGhlcgog
ICAgIC8vIHdheSB0byB0ZWxsIHdoYXQncyBsaXZlIHZzIGRlYWQuIApAQCAtMjc5LDEyICsyNjgs
MTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIG1fbmV3
bHlBbGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhl
YXAoKS0+b2JqZWN0U3BhY2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKIAotICAgIFNldE5l
d2x5QWxsb2NhdGVkRnVuY3RvciBmdW5jdG9yKHRoaXMpOwotICAgIGZvckVhY2hDZWxsKGZ1bmN0
b3IpOworICAgIGZvckVhY2hDZWxsKAorICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFw
Q2VsbDo6S2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIHNldE5ld2x5QWxs
b2NhdGVkKGNlbGwpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgICAgIH0pOwogCiAgICAgZm9yRWFjaEZyZWVDZWxsKAogICAgICAgICBmcmVlTGlz
dCwKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICAgICAgaWYgKGZhbHNl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRlcihjZWxs
KSwgIlxuIik7CiAgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgY2VsbC0+emFwKCk7CiAgICAgICAgICAg
ICBjbGVhck5ld2x5QWxsb2NhdGVkKGNlbGwpOwpAQCAtMzA3LDEwICszMDEsMTQgQEAgdm9pZCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogCiBGcmVlTGlzdCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1l
QWxsb2NhdGluZyFcbiIpOwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRo
aXMpKTsKICAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKIAogICAgIGlmICghaGFzQW55TmV3
bHlBbGxvY2F0ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9n
KCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8gVGhpcyBt
ZWFucyB3ZSBoYWQgYWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBlZCBh
bGxvY2F0aW9uLgogICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICB9CkBAIC0zNTQsNiAr
MzUyLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgIAog
ICAgIGlmIChoYW5kbGUoKS5hbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoJmhhbmRsZSgpKQogICAg
ICAgICB8fCAhbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24p
KSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0
aGlzKSwgIjogQ2xlYXJpbmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLlxuIik7
CiAgICAgICAgIC8vIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBibG9jayBpcyBmdWxsIGFuZCBp
cyBhbHJlYWR5IHJlY29nbml6ZWQgYXMgc3VjaCwgb3IgdGhhdCB0aGUKICAgICAgICAgLy8gYmxv
Y2sgZGlkIG5vdCBzdXJ2aXZlIHRoZSBwcmV2aW91cyBHQy4gU28sIHdlIGNhbiBjbGVhciBtYXJr
IGJpdHMgdGhlIG9sZCBmYXNoaW9uZWQKICAgICAgICAgLy8gd2F5LiBOb3RlIHRoYXQgaXQncyBw
b3NzaWJsZSBmb3Igc3VjaCBhIGJsb2NrIHRvIGhhdmUgbmV3bHlBbGxvY2F0ZWQgd2l0aCBhbiB1
cC10by0KQEAgLTM2Miw2ICszNjIsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Ns
b3coSGVhcFZlCiAgICAgICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFsbG9jYXRlZC4KICAgICAg
ICAgbV9tYXJrcy5jbGVhckFsbCgpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmYWxzZSkK
KyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxu
Iik7CiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCkt
Pm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CiAgICAgICAgICAgICAv
LyBNZXJnZSB0aGUgY29udGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdl
IGdldCB0aGUgZnVsbCBzZXQgb2YgYml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEy
LDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvck1hcmtpbmcoKQogCiB2b2lkIE1hcmtl
ZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7
CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN1
bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVU
aGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
UmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0
aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNs
b3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX3N0YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNp
dGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDApCisgICAgOiBtX2J5dGVzVmlzaXRlZCgwKQog
ICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAg
ICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikKQEAgLTkx
LDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCiAKIFNsb3RW
aXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIGNsZWFyTWFya1N0YWNrKCk7CisgICAgY2xl
YXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygp
CkBAIC0xMDksMTYgKzEwNywxNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmco
KQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
b3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV9ieXRl
c0NvcGllZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1
aWxkZXIgPSBudWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50Q2VsbCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1h
cmtTdGFjaygpCit2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQogewotICAgIG1f
c3RhY2suY2xlYXIoKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmNsZWFyKCk7CisgICAgbV9tdXRh
dG9yU3RhY2suY2xlYXIoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKQEAgLTE0OCw3ICsxNDcsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0
ZTo6TmV3R3JleSk7CisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3Jl
eSk7CiAKICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtMjEwLDcgKzIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0
TWFya2UKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdDoK
ICAgICAvLyBJbiBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQg
aXMgZ3JleSBpbiB0aGlzIEdDIGN5Y2xlLgogICAgIC8vIEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0
aW9uOiBpdCdzIGEgbmV3IG9iamVjdCB0aGF0IGJlY2FtZSBncmV5IHJhdGhlciB0aGFuIGFuIG9s
ZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpO
ZXdHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAK
ICAgICBhcHBlbmRUb01hcmtTdGFjayhjb250YWluZXIsIGNlbGwpOwogfQpAQCAtMjI4LDE2ICsy
MjcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUbwogewogICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CiAgICAgQVNTRVJUKCFj
ZWxsLT5pc1phcHBlZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0
YXRlOjpOZXdHcmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6T2xkR3JleSk7
CisgICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6R3JleSk7CiAgICAg
CiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAgICAKLSAgICAvLyBGSVhNRTogVGhlc2Ug
Imp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRzIHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9p
bmcgYW55dGhpbmcgZWxzZS4gQnV0Ci0gICAgLy8gdGhhdCB3b24ndCBiZSB0aGUgY2FzZSB3aGVu
IHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAgbV92aXNpdENvdW50Kys7CiAgICAgbV9ieXRlc1Zp
c2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXplKCk7CiAgICAgCi0gICAgbV9zdGFjay5hcHBlbmQo
Y2VsbCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwqIGNlbGwpCit7
CisgICAgbV9tdXRhdG9yU3RhY2suYXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9y
OjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCkBAIC0yOTQsMTIgKzI5NiwxMCBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgCiAgICAgU2V0Q3Vy
cmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKLSAgICBt
X29sZENlbGxTdGF0ZSA9IGNlbGwtPmNlbGxTdGF0ZSgpOwotICAgIAotICAgIC8vIFRoZXJlIGlz
IG5vIHJhY2UgaGVyZSAtIHRoZSBjZWxsIHN0YXRlIGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LiBH
cmV5IG9iamVjdHMgY2FuIG9ubHkgYmUKLSAgICAvLyB2aXNpdGVkIGJ5IG9uZSBtYXJraW5nIHRo
cmVhZC4gTmVpdGhlciB0aGUgYmFycmllciBub3IgbWFya2luZyB3aWxsIGNoYW5nZSB0aGUgc3Rh
dGUgb2YgYW4KLSAgICAvLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGdyZXkuCi0gICAgQVNTRVJU
KG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSB8fCBtX29sZENlbGxTdGF0ZSA9
PSBDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIC8vIEZ1bm55IHN0b3J5OiBpdCdzIHBvc3NpYmxl
IGZvciB0aGUgb2JqZWN0IHRvIGJlIGJsYWNrIGFscmVhZHksIGlmIHdlIGJhcnJpZXIgdGhlIG9i
amVjdCBhdAorICAgIC8vIGFib3V0IHRoZSBzYW1lIHRpbWUgdGhhdCBpdCdzIG1hcmtlZC4gVGhh
dCdzIGZpbmUuIEl0J3MgYSBnbmFybHkgYW5kIHN1cGVyLXJhcmUgcmFjZS4gSXQncworICAgIC8v
IG5vdCBjbGVhciB0byBtZSB0aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0
byBiYWlsIGhlcmUgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8gYmxhY2suCiAgICAg
CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwog
ICAgIApAQCAtMzI2LDIzICszMjYsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
Ojp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RC
dWlsZGVyKSkgewotICAgICAgICBpZiAobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdH
cmV5KQorICAgICAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKICAgICAgICAgICAg
IG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kTm9kZShjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpKTsKICAgICB9CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwo
KQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYg
ZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUt
dHJ5IG9mdGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8g
YXNzdW1lIHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCiAKICAgICAvLyBBdm9pZCBs
b2NraW5nIHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3Jh
cGguCi0gICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAgICBpZiAoZnJvbS5zaXplKCkgPCAy
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFy
ZWQgd29yayBxdWV1ZWQgdXAsIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhh
dCBkb25hdGluZyBtb3JlIGlzIG5vdCBwcm9maXRhYmxlLgotICAgIGlmIChtX2hlYXAubV9zaGFy
ZWRNYXJrU3RhY2suc2l6ZSgpKQorICAgIGlmICh0by5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIElmIHdlJ3JlIGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2
ZSBhbmQgYXNzdW1lIHRoYXQgYW5vdGhlcgpAQCAtMzUyLDI2ICszNTIsNDMgQEAgdm9pZCBTbG90
VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBk
b25hdGUuCi0gICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2spOworICAgIGZyb20uZG9uYXRlU29tZUNlbGxzVG8odG8pOwogCiAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjpkcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sK
KyAgICBkb25hdGVLbm93blBhcmFsbGVsKG1fY29sbGVjdG9yU3RhY2ssICptX2hlYXAubV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2spOworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9tdXRhdG9y
U3RhY2ssICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKTsKK30KKwordm9pZCBTbG90
VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lz
SW5QYXJhbGxlbE1vZGUpOwogICAgCi0gICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93
biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0
YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENo
aWxkcmVuKG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNl
ZCh0aW1lb3V0KSkgeworICAgICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgbV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZSgpOyBtX2NvbGxlY3RvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisg
ICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX2NvbGxlY3RvclN0YWNrLnJlbW92ZUxhc3Qo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgbV9tdXRhdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICAvLyBXZSBrbm93
IGZvciBzdXJlIHRoYXQgd2UgYXJlIHZpc2l0aW5nIG9iamVjdHMgYmVjYXVzZSBvZiB0aGUgYmFy
cmllciwgbm90IGJlY2F1c2Ugb2YKKyAgICAgICAgICAgIC8vIG1hcmtpbmcuIE1hcmtpbmcgd2ls
bCB2aXNpdCBhbiBvYmplY3QgZXhhY3RseSBvbmNlLiBUaGUgYmFycmllciB3aWxsIHZpc2l0IGl0
CisgICAgICAgICAgICAvLyBwb3NzaWJseSBtYW55IHRpbWVzLCBhbmQgYWx3YXlzIGFmdGVyIGl0
IHdhcyBhbHJlYWR5IG1hcmtlZC4KKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFj
ayA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6
Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5j
YW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfQogICAgICAgICBk
b25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQogICAgIAogICAgIG1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hh
cmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSkKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
c3VsdCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWRE
cmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFy
YWxsZWxNb2RlKTsKICAgICAKQEAgLTM5NCw0NiArNDExLDU4IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewog
ICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMK
LSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0
aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OworICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25l
PwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAu
bV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VS
VChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgLy8gRGlkIHdlIGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUg
bWFzdGVyIGtub3cuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2
ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRN
YXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAmJiBt
X2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAot
ICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KAot
ICAgICAgICAgICAgICAgICAgICBsb2NrLAorICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwoCisgICAgICAgICAgICAgICAgICAgIGxvY2ss
IHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhl
IGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAg
ICAgICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpEb25lOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQo
dGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
VGltZWRPdXQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21l
Q2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9o
ZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fY29s
bGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFs
bGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zy
b20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ssIG1f
aGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0KIApA
QCAtNDUzLDcgKzQ4Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCog
cm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25z
dAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFx
dWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs0OTUsNiBAQCBUcmlTdGF0ZSBTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLWlu
dCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBh
cmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICBy
ZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTE4LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFp
bih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiB7
Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJl
IGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAg
ICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU0Niw5
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9o
ZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikg
Y29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
LSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRh
TG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJM
aXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxp
c3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIK
ICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkg
KzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNp
dG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFj
azsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVy
biBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9y
TWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBj
b25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwyNCAr
ODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9v
dCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZv
aWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1w
dHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1w
dHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7
Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7
CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0
ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29w
aWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQg
ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAg
ICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAg
IHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBT
aGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0
ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpA
QCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZvaWQg
bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBhcHBl
bmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9pZCBh
cHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9pZCBu
b3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwog
CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQg
ZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJr
U3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFja0Fy
cmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVl
Um9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRo
ZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0g
ICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBi
b29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2YXRl
OgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVs
bHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBDZWxs
U3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sg
eyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9u
IDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7
Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUs
IHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFw
KCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2Nyw2ICsxNjcsMTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRl
KENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2Vs
bFN0YXRlID0gZGF0YTsgfQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2Vs
bFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVs
YXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2Vs
bFN0YXRlIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xk
U3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0
b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0
ZSk7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGlu
ZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTEgKzIwMSwxMSBAQCBpbmxp
bmUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sCiAgICAgQVNTRVJUKCF0aGlzLT5z
dHJ1Y3R1cmUoKQogICAgICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMp
LT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsK
LSAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwogICAgIG1fc3RydWN0
dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkudHlwZSgpOwogICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxp
bmUgY29uc3QgTWV0aG9kVGFibGUqIEpTQ2VsbDo6bWV0aG9kVGFibGUoKSBjb25zdApAQCAtMjg0
LDkgKzI4NCwxMiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0cnVjdG9yKFZNJiB2CiAg
ICAgaWYgKGlzWmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoc3RydWN0dXJl
SUQoKSk7Ci0gICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkK
LSAgICAgICAgc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3ko
dGhpcyk7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlz
SW1tb3J0YWwpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVz
dHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAgICAgZGVzdHJveSh0
aGlzKTsKKyAgICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4o
dGhpcyktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwogICAgIHphcCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1h
bCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBO
b3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxz
ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lv
biwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1w
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNv
cnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6
bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRM
aXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJ
bkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2su
aCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRl
IDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCiti
b29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQorewor
ICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0
ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2Nr
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDgg
KzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
aGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcg
V1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294074</attachid>
            <date>2016-11-07 12:11:29 -0800</date>
            <delta_ts>2016-11-07 16:22:09 -0800</delta_ts>
            <desc>starting to work with useConcurrentJIT=false</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75054</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGls
YXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
CiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29k
ZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNv
LCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBv
dXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90
VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAg
ICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdp
dGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVk
IHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJs
b2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAg
IEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRE
RkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAg
IAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZl
cG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0
YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRp
dGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29y
a2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0
ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7Cisg
ICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMs
NiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9
CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2Rl
QmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNl
IC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7
Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3Zv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9B
dXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRl
IHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAt
MTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwog
dm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDE3ICszNywxMSBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8v
IFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4KICAgICBBbnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAg
Ci0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhl
IG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2lu
ZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0
IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBi
ZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBn
cmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVu
dCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdy
ZXkgPSAzCisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQuCisgICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJl
c2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9y
QmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRB
cnJheS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1NlZ21lbnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNj
b3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAg
ICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1
cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3co
KSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAg
IH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsK
KworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRl
OgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ug
d2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBt
X3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1h
a2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZt
KQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQog
ICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNl
dD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJz
aW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3Rk
OjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxw
ZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+
OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRp
dGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVy
ZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lk
IEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZp
c2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9p
ZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDExNiArNDcxLDE1NiBAQCB2b2lk
IEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29y
a2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5z
Rm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBn
Y1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1l
KQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgq
dGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9y
IGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVh
cFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAg
ICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3Bl
ID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgeworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFy
KCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOwor
ICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRp
ZgorICAgIGJlZ2luTWFya2luZygpOwogCi0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQot
ICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNh
bXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8g
b3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1h
cmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkg
dGhlCi0gICAgICAgICAgICAvLyBTYW1wbGluZ1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBk
b24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUKLSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJh
Y2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8g
VGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAg
ICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAg
ICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNj
b3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290
cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0
RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RW
aXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRv
cj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Vu
aXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBt
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkg
eworICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yOworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxv
Y2spOworICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3Jz
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZp
c2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Vu
aXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxs
ZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAg
ICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBh
cmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwotICAgICAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5h
YmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAg
ICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90Vmlz
aXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Nj
b3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVy
Z2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0
b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwor
ICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vj
b25kcyBjb25jdXJyZW50VGltZTsKKyAgICBkb3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9u
aWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgTW9ub3Rvbmlj
VGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlhbFRpbWU7CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3Vy
cmVudFRpbWUgKiBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92
ZXJDb25jdXJyZW50UmF0aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBU
aW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jv
b3RzIGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252
ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0
aXZlIHNjYW4iKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJv
b3RzKCp0aGlzKTsKICAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKICAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9v
dHMpOwogICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsK
ICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7
CiAgICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0
aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3Qg
cmV2aXNpdHMKKyAgICAgICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJM
RUQKKyAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOworI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNt
YWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAg
ICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBt
X3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFp
ci5rZXkpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFy
a0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHMoaGVhcFJvb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUg
dGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCi0gICAgICAgICAgICAvLyBy
dW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICph
ZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBr
bm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuCi0gICAgICAgICAgICBt
X2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgICAgIHZp
c2l0U21hbGxTdHJpbmdzKCk7Ci0gICAgICAgIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9v
dFZpc2l0b3IpOwotICAgICAgICB2aXNpdEFyZ3VtZW50QnVmZmVycyhoZWFwUm9vdFZpc2l0b3Ip
OwotICAgICAgICB2aXNpdEV4Y2VwdGlvbihoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNp
dFN0cm9uZ0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRIYW5kbGVTdGFj
ayhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAg
ICAgICAgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgICAgIHRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcygpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwotICAgIH0KLSAgICAKLSAgICBUaW1pbmdTY29wZSBw
b3N0Q29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBj
b252ZXJnZW5jZSIpOwotCi0gICAgLy8gV2VhayByZWZlcmVuY2VzIG11c3QgYmUgbWFya2VkIGxh
c3QgYmVjYXVzZSB0aGVpciBsaXZlbmVzcyBkZXBlbmRzIG9uCi0gICAgLy8gdGhlIGxpdmVuZXNz
IG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgdmlzaXRXZWFrSGFuZGxlcyho
ZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBpZiAobV92bS0+ZXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwor
ICAgICAgICBpZiAobV92bS0+bGFzdEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RW
aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7CisgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lm
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAg
ICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7
CisgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpc
biIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hh
ZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHVi
Um91dGluZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3Ig
KGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAg
ICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisg
ICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAg
ICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmts
aXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwg
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBj
b25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQg
YXJlCisgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJl
IHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8v
IHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBB
bHNvLCB0aGlzIGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNo
ZWNrIC0gb3RoZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBh
bHNvIHdhbnQgdG8gZG8gdGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQg
YW55dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUg
bmV4dAorICAgICAgICAvLyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJD
dXJyZW50bHlFeGVjdXRpbmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tz
KCptX3ZtKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsg
c3RhY2tzIGFyZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRo
cmVhZCkKKyAgICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVm
ZmVyLgorICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1v
ZGVFbmFibGVyIGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAg
ICAgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChk
cmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAg
ICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRo
aXMpOworICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERy
YWluKCk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9t
U2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1l
VG9SZXN1bWU7CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAog
ICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgp
OwpAQCAtNTYyLDcgKzYzNCw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0
VGltZSkKIAogdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBy
b290cykKIHsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFj
aGluZVRocmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0
aW5lcywgKm1fY29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjAsNyBAQCB2b2lkIEhlYXA6
OmJlZ2luTWFya2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjpiZWdpbk1hcmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29s
bGVjdGlvbigpOworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAg
ICAgewogICAgICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJt
X29iamVjdFNwYWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NjgsMjIgQEAgdm9pZCBI
ZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0
ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12
b2lkIEhlYXA6OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3Ry
aW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90
VmlzaXRvcik7Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0g
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xv
dFZpc2l0b3IuYXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBl
bmQocm9vdHMpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0
YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwog
fQogCiB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9m
V29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhp
c3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRv
cik7CisgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzU2LDEwIEBAIHZvaWQgSGVhcDo6
cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlz
aXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewot
ICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9v
dFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6
XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4o
KTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJr
TGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZm
ZXJzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERy
YWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0
RXhjZXB0aW9uKCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7
Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6
dmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hh
bmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0
YUxvZygiSGFuZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2Zp
bGVyKCkKLXsKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
LSAgICAgICAgQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsK
LSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAg
IGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17
Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7
Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90Vmlz
aXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIs
IG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwot
fQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9y
KQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRz
Iik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0
Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNp
dG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxp
dmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAg
ICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90
VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdj
U3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRD
b3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50
KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0Mg
JWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRD
b3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7
CiAgICAgfQpAQCAtODI3LDE5ICs3NjcsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3Vu
dHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3Rh
bEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0
aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0K
KyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAg
ICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9
IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAot
ICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2Uu
ZW5kTWFya2luZygpOwpAQCAtOTc3LDE0ICs5MjAsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFj
ayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0
J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVy
aW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQg
b2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2Ug
dGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0g
ICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAg
ICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtl
ZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMg
d2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYg
dGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhp
cyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisg
ICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtl
ZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0
ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdz
IE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdl
IHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQg
c2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwg
YmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBu
b3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsK
IH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDMyLDE0
IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQo
KTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwog
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2Fw
YWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMo
KTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAog
ICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVy
KCkpIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2
bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJH
QyIpKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVy
R0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0
YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklU
KCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93
Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBB
U1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewog
ICAgICAgICBkYXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzog
IiwgbV9jb2xsZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEyNSwxNSArMTA1OSwxMiBAQCB2b2lk
IEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVP
YmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAg
ICAgCi0gICAgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9u
KCk7CiAgICAgcHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZl
cigpOwogICAgICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgp
LT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogICAgICAg
ICAKLSAgICBtYXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3Rh
cnRUaW1lKTsKICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJp
Zmllci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5n
KTsKQEAgLTExNzAsOCArMTEwMSw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAg
ICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFm
dGVyID0gY3VycmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAi
IG1zXVxuIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpu
b3coKTsKKyAgICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMo
KSwgIiBtcywgY3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtc11c
biIpOwogICAgIH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMTI0LDM4IEBAIHZvaWQgSGVh
cDo6c3RvcFRoZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21w
aWxlclRocmVhZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkID0gdHJ1ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBE
ZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxl
ckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0KKyAg
ICAKKyNpZiBFTkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hp
bGUoKnRoaXMpOworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRl
QWxsRm9yVk0oKm1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9CisjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRl
KCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKCk7CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7CisgICAg
bV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7
CisgICAgLy8gQ2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRl
cGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlv
biBjeWNsZSBvciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxl
Y3Rpb24gY3ljbGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBh
IG5vLW9wIGJlY2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQor
ICAgIC8vICAgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBj
eWNsZTogaXQgcmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RT
cGFjZS5yZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xs
ZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhy
ZWFkcygpOwpAQCAtMTQ2NiwxMCArMTQyNSwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0
b3BwaW5nKGNvbnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdH
Q1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSgpOwotICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJn
ZUFsbG9jYXRpb25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NT
Y29wZSgqdGhpcyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAg
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxv
Y2F0aW9ucygpOworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKIH0KIAogSGVhcDo6VGlja2V0IEhlYXA6
OnJlcXVlc3RDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0x
NTQ5LDIzICsxNTEzLDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFs
PAogICAgICAgICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVh
cDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxl
LmZsdXNoT2xkVGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoKQogewotICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVk
ZW4pIHsKLSAgICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0K
LXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFs
bG9jYXRpbmcoKTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAK
IHZvaWQgSGVhcDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk0OSw3ICsxODk5LDcgQEAgYm9v
bCBIZWFwOjpjYW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9p
c1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlv
blNjb3BlKCkgfHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisg
ICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsxOTIxLDgg
QEAgYm9vbCBIZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1Ro
cmVhZCgpIHx8IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAot
dm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBz
aXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBz
aXplKQogewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBt
ZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYg
KGNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9
PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291
bnRlciA9ICZtX2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3
LDEyICsxOTMzLDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAog
fQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVh
cDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMg
cmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29w
ZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9s
ZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVy
bmFsTWVtb3J5U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwODYsNCArMjAyOCwxMSBAQCB2
b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNF
KENGKQogCit2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1Nh
ZmVUb0NvbGxlY3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5
KCkpCisgICAgICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIs
NyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3
ICszNiw2IEBACiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3Rh
dGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgi
CiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBj
bGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNz
IE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZO
ZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGljOgog
ICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0K
ICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVU
aHJlYWRzOyB9CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7
IHJldHVybiBtX3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RW
aXNpdG9yKCkgeyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3Rh
Y2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2
aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sq
IGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7
CiAgICAgdm9pZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5v
dGlmeUlzU2FmZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAg
dm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEg
QEAgcHVibGljOgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcg
b25seSBvbmUgbWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgog
ICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3Rh
dGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBV
c2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2
ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVf
dCk7CiAgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxN
ZW1vcnlTaXplOyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzdG9wVGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisg
ICAgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhl
V29ybGRTY29wZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCBy
ZXN1bWVUaGVNdXRhdG9yKCk7CiAgICAgCkBAIC00MjIsMzAgKzQyOCwxOCBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0
YXJ0Q29sbGVjdGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNo
T2xkU3RydWN0dXJlSURUYWJsZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVy
KCk7Ci0gICAgdm9pZCBzdG9wQWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtp
bmcoKTsKICAgICAKLSAgICB2b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAg
IHZvaWQgbWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhl
clN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tS
b290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJv
b3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2
b2lkIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3Ry
aW5ncygpOwogICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290
cyYpOwogICAgIHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAg
ICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlz
aXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihI
ZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hp
Y2tlbigpOwotICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0g
ICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFy
a1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3Vu
dHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE3
LDcgKzUxMSw4IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJl
YWRzOwogICAgIAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2Ug
cG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4g
SXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFu
ZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVt
b3J5IGZyb20KQEAgLTU3MSw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtp
bmdNdXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAg
TWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtTdGFja0FycmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNp
Z25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs1OTUsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8
IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFy
aWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2Nv
bGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25v
dG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlv
blNjb3BlPj4gbV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpN
YXJrU3RhY2tBcnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8o
TWFya1N0YWNrQXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90
aGVyKTsKKyAgICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBv
dGhlciBsaXN0LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBt
X3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwq
Piogb3RoZXJIZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1i
ZXJPZlNlZ21lbnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisg
ICAgb3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9m
U2VnbWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBp
biB0aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIu
bV9zZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7Cisg
ICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5
KCkpIHsKKyAgICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkp
CisgICAgICAgICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZv
aWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhl
cikKIHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8g
cmVkdWNlIGNvcHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2suaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJr
U3RhY2tBcnJheSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJy
YXkoKTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVy
KTsKLSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNp
emVfdCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJh
eSYpOworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFk
Q291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
SW4oTWFya2VkCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxv
Y2s6OkhhbmRsZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJs
b2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVM
aXN0ZWQoKSk7CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODIsNiArODIsOCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmCiAg
ICAgLCBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFsc2Up
CisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CiB9
CiAKIHRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBk
ZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJs
ZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9j
YXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+CkBAIC0y
NDEsMjQgKzI0Myw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUK
ICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVk
RnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAg
IFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0
dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2Nr
LT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0g
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7
CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEyICsyNTAsMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2Nh
dGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZh
bHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVk
LlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0
aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAv
LyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAg
ICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVl
IGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBj
b2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8v
IGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBz
byB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFk
LiAKQEAgLTI3OSwxMiArMjY4LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFs
bG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJz
aW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAg
ICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAg
ICAgICAgICBzZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVy
YXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2Vs
bCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAg
ICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6
ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRl
cy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwt
PnphcCgpOwogICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywx
MCArMzAxLDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAog
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAg
aWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRv
cigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAK
ICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQor
ICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7
CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9j
ayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CiAgICAgfQpAQCAtMzU0LDYgKzM1Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJr
U2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2Nh
dGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJr
aW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBk
YXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcg
YW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUg
YmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQg
dGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNv
LCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdh
eS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5
QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzYyLDggQEAgdm9pZCBNYXJrZWRC
bG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3
bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyks
ICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRl
ZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYg
KGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lv
bikgewogICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5l
d2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwODQxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJr
aW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAgQVNT
RVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAo
TWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAg
ICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1LDkgKzc1LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlm
CiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQotICAgIDogbV9zdGFjaygp
Ci0gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRlc0NvcGllZCgwKQorICAgIDog
bV9ieXRlc1Zpc2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFy
YWxsZWxNb2RlKGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5p
dGlhbFZlcnNpb24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihI
ZWFwJiBoZWFwKQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBjbGVhck1h
cmtTdGFjaygpOworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9y
OjpkaWRTdGFydE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAg
IFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0
ZWQgPSAwOwotICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAg
ICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoIW1fY3VycmVu
dENlbGwpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBT
bG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJr
U3RhY2tzKCkKIHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5j
bGVhcigpOworICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgs
NyArMTQ3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxT
dGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2Vs
bCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0
IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdz
IHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBj
YXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3Jl
eSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxT
dGF0ZTo6R3JleSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxs
KTsKIH0KQEAgLTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kVG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2Vs
bCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNl
bGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBD
ZWxsU3RhdGU6Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxs
U3RhdGU6OkdyZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0g
ICAgLy8gRklYTUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVz
ZSBmaWVsZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29u
J3QgYmUgdGhlIGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3Vu
dCsrOwogICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAot
ICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNl
bGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29u
c3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAt
Mjk0LDEyICsyOTYsMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENo
aQogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywg
Y2VsbCk7CiAgICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAg
ICAKLSAgICAvLyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3Qg
Y2hhbmdlIHJpZ2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRl
ZCBieSBvbmUgbWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcg
d2lsbCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFk
eSBncmV5LgotICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkg
fHwgbV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBz
dG9yeTogaXQncyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBp
ZiB3ZSBiYXJyaWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRo
YXQgaXQncyBtYXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJl
IHJhY2UuIEl0J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3Jy
ZWN0IG9yIHByb2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQor
ICAgIC8vIGJsYWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFu
dGhyYWNpdGVPckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzI2LDIzIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElL
RUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRl
ID09IENlbGxTdGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCiAgICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29u
c3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVLbm93blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxs
ZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBO
T1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2
YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxl
LgogCiAgICAgLy8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVu
ZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAg
aWYgKGZyb20uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUn
cyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5k
IGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAg
ICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBs
b2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiAr
MzUyLDQzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwg
Z28gaWRsZSBzb29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8o
bV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRv
KTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
IH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRl
S25vd25QYXJhbGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0
YWNrLCAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93
blBhcmFsbGVsKG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ayk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkK
IHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9z
dGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdl
ZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQot
ICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hp
bGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1w
dHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3Rv
clN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwo
KTsKKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZT
Y2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkg
JiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0
b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFj
ay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAg
ICAgICAgICAgLy8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3Rz
IGJlY2F1c2Ugb2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBt
YXJraW5nLiBNYXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJh
cnJpZXIgd2lsbCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywg
YW5kIGFsd2F5cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lz
VmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
b3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Uo
KTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAg
ICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7Cisg
ICAgICAgIH0KICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAg
ICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6
ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90Vmlz
aXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFy
ZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAg
ICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTQsNDYgKzQxMSw1OCBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRl
cm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0
aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9z
aGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBr
bm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1l
ZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRo
ZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9z
aGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVh
cC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ugd2FpdC4KLSAgICAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jayk7CisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9j
aywgdGltZW91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoc2hhcmVkRHJhaW5Nb2RlID09IFNsYXZlRHJhaW4pOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRp
b24/IElmIHNvLCBsZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUud2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAg
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAg
ICAgICAgICAgICAgICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10g
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3No
YXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJv
bSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKKworICAgICAgICAgICAg
ICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9z
aGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7
CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAg
ICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9tdXRhdG9yU3Rh
Y2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsK
ICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1l
b3V0KTsKICAgICB9CiB9CiAKQEAgLTQ1Myw3ICs0ODIsNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjph
ZGRPcGFxdWVSb290KHZvaWQqIHJvCiBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJv
b3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7
Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gbV9oZWFw
Lm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7CiB9CiAKQEAgLTQ2NywxMyArNDk1LDYgQEAg
VHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdAogICAgIHJldHVybiBNaXhl
ZFRyaVN0YXRlOwogfQogCi1pbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0g
ICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKLX0K
LQogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCkKIHsKICAg
ICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpCkBAIC00OTcsMTUgKzUxOCwxNCBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGUoKQogICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIH0KIAot
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIGRvbmF0ZSgpOwotICAg
IGRyYWluKCk7CisgICAgZHJhaW4odGltZW91dCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1l
cmdlT3BhcXVlUm9vdHMoKQogewotICAgIEFTU0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
OyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0
eS4KICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29w
YXF1ZVJvb3RzTXV0ZXgpOwogICAgICAgICBmb3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3Rz
KQpAQCAtNTI2LDEwICs1NDYsOSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGCiAgICAgICAgIG1faGVhcC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5l
eHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Cit2b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBKU0NlbGwqIGNlbGwgOiBtYXJrU3Rh
Y2soKSkKLSAgICAgICAgZGF0YUxvZygqY2VsbCwgIlxuIik7CisgICAgb3V0LnByaW50KCJDb2xs
ZWN0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAoY29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0
YXRvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChtdXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1
ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3Bh
cXVlUm9vdFNldC5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkBAIC01Nyw5ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoSGVh
cCYpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFj
aygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbWFya1N0
YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsgfQotCisgICAgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJr
U3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9
CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0
YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgCiAg
ICAgVk0mIHZtKCk7CiAgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgp
IGNvbnN0OwpAQCAtODQsMjQgKzg3LDIzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKICAgICBUcmlTdGF0ZSBjb250YWluc09w
YXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7Ci0gICAgaW50IG9wYXF1ZVJvb3RDb3VudCgp
OwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBt
X211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7
CiAgICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQgY2xlYXJNYXJrU3RhY2soKTsKKyAgICB2b2lk
IGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXNpdENvdW50OyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQg
ZHJhaW4oKTsKLSAgICB2b2lkIGRvbmF0ZUFuZERyYWluKCk7CisgICAgdm9pZCBkcmFpbihNb25v
dG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lk
IGRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6Omlu
ZmluaXR5KCkpOwogICAgIAogICAgIGVudW0gU2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwg
TWFzdGVyRHJhaW4gfTsKLSAgICB2b2lkIGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUp
OworICAgIGVudW0gY2xhc3MgU2hhcmVkRHJhaW5SZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9Owor
ICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAg
dm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKTsKQEAgLTEyNCw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJz
aW9uOyB9CiAKKyAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIApAQCAtMTQx
LDIxICsxNDUsMjMgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJU
eXBlPgogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYsIEpTQ2VsbCop
OwogICAgIAorICAgIHZvaWQgYXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCop
OworICAgIAogICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9v
dHNJZlByb2ZpdGFibGUoKTsKIAogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwq
KTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKKyAgICB2b2lkIGRvbmF0
ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7
CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fY29s
bGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CiAgICAgT3Bh
cXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJl
cyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgCiAgICAgc2l6ZV90
IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBtX2J5dGVzQ29waWVkOwogICAgIHNpemVfdCBt
X3Zpc2l0Q291bnQ7CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgCkBAIC0xNjUs
NyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNu
YXBzaG90QnVpbGRlciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBu
dWxscHRyIH07Ci0gICAgQ2VsbFN0YXRlIG1fb2xkQ2VsbFN0YXRlOworICAgIGJvb2wgbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrIHsgZmFsc2UgfTsKIAogcHVibGljOgogI2lmICFBU1NFUlRfRElT
QUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTUg
QEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYQogCiBpbmxpbmUgdm9p
ZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewot
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXpl
KTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
VVNBR0UpCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNp
dGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNp
dGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JT
dGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZSk7
CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDE2IEBAIHB1YmxpYzoKICAgICBDZWxs
U3RhdGUgY2VsbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAg
ICB2b2lkIHNldENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpT
Q2VsbCo+KHRoaXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21p
Y0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwg
Q2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUp
OworICAgIH0KKworICAgIENlbGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVT
dHJvbmcoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRl
LCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3Ry
dWN0dXJlSURPZmZzZXQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAx
LDExICsyMDEsMTEgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLAog
ICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAg
fHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlk
KCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0
dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgIG1fZmxhZ3Mg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAgICAgbV90eXBlID0g
c3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3Ry
dWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRh
YmxlKCkgY29uc3QKQEAgLTI4NCw5ICsyODQsMTIgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpjYWxs
RGVzdHJ1Y3RvcihWTSYgdgogICAgIGlmIChpc1phcHBlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKHN0cnVjdHVyZUlEKCkpOwotICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0
cnVjdHVyZUlzSW1tb3J0YWwpCi0gICAgICAgIHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpLT5t
ZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lVHlwZUZs
YWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAgICAgICBNZXRob2RUYWJsZTo6RGVz
dHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7
CisgICAgICAgIGRlc3Ryb3kodGhpcyk7CisgICAgfSBlbHNlCiAgICAgICAgIGpzQ2FzdDxKU0Rl
c3RydWN0aWJsZU9iamVjdCo+KHRoaXMpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJv
eSh0aGlzKTsKICAgICB6YXAoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4IEBAIHR5cGVk
ZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXpl
U3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUdlbmVyYXRp
b25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbmN1cnJl
bnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25j
dXJyZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGNvbGxlY3RD
b250aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGZvcmNl
RmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2Ny
aWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwg
c2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3RE
dW1wLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3NywxMCArMTc3LDExIEBAIExpc3REdW1wSW5Db250ZXh0PFQsIFU+
IGxpc3REdW1wSW5Db250ZXgKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Omxpc3RE
dW1wOwotdXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKK3VzaW5nIFdURjo6bGlzdER1bXBJbkNv
bnRleHQ7CiB1c2luZyBXVEY6Om1hcER1bXA7Cit1c2luZyBXVEY6OnBvaW50ZXJMaXN0RHVtcDsK
K3VzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7CiB1c2luZyBXVEY6OnNvcnRlZE1hcER1bXA7Ci11
c2luZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogCiAjZW5kaWYgLy8gTGlzdER1bXBfaAogCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHJldmlz
aW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJDb25kaXRpb24u
aCIKICNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRl
IDxjZmxvYXQ+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKQEAgLTEyOCw2ICsxMzEsMTcgQEAgdm9pZCBzbGVlcChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cAogICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VM
b2NrLCB0aW1lKTsKIH0KIAorYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSYgdGltZSkKK3sKKyAgICAvLyBBdm9pZCBkb2luZyBub3coKS4KKyAgICBpZiAoISh0
aW1lID4gdGltZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcygwKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0aW1lIDw9IHRp
bWUubm93V2l0aFNhbWVDbG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJpdmF0ZToKIAogV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CiAKK1dURl9F
WFBPUlRfUFJJVkFURSBib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJik7CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNlZDsKK3VzaW5nIFdURjo6c2xlZXA7CiAK
ICNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294098</attachid>
            <date>2016-11-07 16:22:09 -0800</date>
            <delta_ts>2016-11-07 18:27:18 -0800</delta_ts>
            <desc>fixing races in JSObject::visitChildren</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDYgKzkxOCw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoV29ybGQpOyAvLyBU
aGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2UuCiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUpOwogICAgICAgICB3cml0
ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCwxNiArNjEwLDM0IEBAIENvbXBpbGF0
aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tz
KCkKK3ZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQog
eworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKKyAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKworICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jayk7CisgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKK30KKwordm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQoreworICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAg
IC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRo
b3V0IHBlcmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0
byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAgICAvLyBhbGwgb3VyIENvZGVCbG9j
a3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAgIEhlYXA6OmhlYXAoY29kZUJsb2Nr
KS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53
cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CiAgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBI
ZWFwOjpoZWFwKHByb2ZpbGVkREZHQ29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2Rl
QmxvY2spOwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAK
LSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgIHZvaWQgbWFya0NvZGVCbG9ja3Mo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogICAgIHZv
aWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRG
R1dvcmtsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHU2FmZXBv
aW50LmgiCkBAIC0zOCw2ICszNiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6
IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZEJvZHkoY29uc3Qg
TG9ja0hvbGRlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEs
IEJveDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRp
b24sIGludCByZWxhdGl2ZVByaW9yaXR5KQpAQCAtMzQ5LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmts
aXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0pOwogfQogCit2b2lkIFdvcmtsaXN0OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2Nr
KTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0
ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVy
LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2NrcyhzbG90VmlzaXRvcik7Cisg
ICAgfQorfQorCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwpAQCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0KICAgICAgICAgUGxhbiogcGxhbiA9
IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAg
ICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0pOwogICAgIH0KIH0KIApAQCAtNTUzLDYg
KzU2NCwxNCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQog
Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykg
eworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29y
a2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJs
b2Nrcyh2bSwgc2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCByZW1lbWJlckNvZGVCbG9j
a3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlz
dHMoKTsgaS0tOykgewpAQCAtNTYxLDcgKzU4MCwyMiBAQCB2b2lkIHJlbWVtYmVyQ29kZUJsb2Nr
cyhWTSYgdm0pCiAgICAgfQogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisjZWxzZSAv
LyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQorewor
fQorCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0
b21hdGljVGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7
IE5vdEtub3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07CkBAIC01Nyw2ICs1Nyw3IEBAIHB1Ymxp
YzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAg
IHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxv
Y2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYp
OwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2
Myw5ICsxNjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQog
ICAgIHJldHVybiAqcmVzdWx0OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUt
PmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9wbGFu
LCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlU3Rv
cmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2lu
T3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9u
KAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUo
KSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5m
bygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0
b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1MSw2ICs0NTEsMTIgQEAgRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgpCiAgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsK
IH0KIAordm9pZCBPdXRwdXQ6OnN0b3JlU3RvcmVGZW5jZSgpCit7CisgICAgRmVuY2VWYWx1ZSog
ZmVuY2UgPSBmZW5jZSgpOworICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZSgpOworfQorCiB2
b2lkIE91dHB1dDo6c3RvcmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVy
KQogewogICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBTdG9yZTgsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTkwLDYgKzE5MCw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExU
eXBlKTsKICAgICB2b2lkIHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyKTsKICAgICBCMzo6RmVu
Y2VWYWx1ZSogZmVuY2UoKTsKKyAgICB2b2lkIHN0b3JlU3RvcmVGZW5jZSgpOwogCiAgICAgTFZh
bHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4
dDMyKFR5cGVkUG9pbnRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxs
U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3Rh
dGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2Vs
bFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywxMSBAQCBlbnVtIGNsYXNzIENl
bGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8vIFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4KICAgICBB
bnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAgCi0gICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVu
LiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJr
ZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3QgaXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRlbi4gRHVy
aW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHll
dC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUu
IGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMg
R0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2luZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVk
ZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4KLSAgICBO
ZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBi
ZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBiZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMg
ZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBncmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJy
ZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBzdG9yZSBiYXJyaWVyIHJlcXVlc3RlZAotICAg
IC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdyZXkgPSAzCisgICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQuCisgICAgR3JleSA9IDIsCiB9OwogCiBzdGF0
aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNo
b2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9yQmxhY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlu
a2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitj
bGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1bWVUaGVX
b3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAgeworICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBk
YXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5taWxsaXNl
Y29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJlc3VtZVRo
ZVdvcmxkKCk7CisgICAgfQorICAgIAorICAgIH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7
CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAg
ICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKworICAgICAgICBkYXRhTG9nKCJbSW5jcmVtZW50
OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5h
bWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7
IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5
U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21h
Y2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9j
b2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykp
CisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFr
ZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjpt
YWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFw
OjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAg
ICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9z
aGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4o
KSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtT
dGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAg
ICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29u
ZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0
OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQg
SGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RX
ZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZp
bmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmlu
YWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpA
QCAtNDM5LDExNiArNDcxLDE2MSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQog
I2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxs
Rm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZv
aWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1Rv
Rml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290
c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUg
bWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7
CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9y
KTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7
CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewor
ICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNs
ZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1i
ZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0jaWYg
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciog
c2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdl
J3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBk
YXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGluZ1By
b2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUKLSAg
ICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5jZSB0
byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdl
dExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52
ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJ
TkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CiAK
LSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkg
ewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90
VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJr
aW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0K
LSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10g
KCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxs
ZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQ
YXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92
ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3Jz
LnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNldEZ1
bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmIChtX2F2
YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3Vmlz
aXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90
VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1Ro
cmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NU
aHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9y
KTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwot
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90
VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygp
OworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9y
cy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxs
ZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9
Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRp
ZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBkb3Vi
bGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIHJh
dGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3Rvbmlj
VGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlhbFRp
bWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7Cisg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiSXRlciMi
LCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0g
dG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAv
LyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZp
eHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgorICAgICAgICAgICAg
CisgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xs
ZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAo
bV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFya0xpc3RT
ZXQpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLT5leGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSk7
CisgICAgICAgIGlmIChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBoZWFwUm9v
dFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5
IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAgICAgICAg
ICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8g
ZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0gICAgICAgICAgICAvLyBzbyB0
aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4KLSAgICAg
ICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAg
ICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgdmlzaXRQcm90ZWN0ZWRPYmplY3Rz
KGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0QXJndW1lbnRCdWZmZXJzKGhlYXBSb290
VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0RXhjZXB0aW9uKGhlYXBSb290VmlzaXRvcik7Ci0gICAg
ICAgIHZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdEhh
bmRsZVN0YWNrKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0U2FtcGxpbmdQcm9maWxl
cigpOwotICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICAgICAgdHJhY2VDb2RlQmxv
Y2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9t
U2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgfQotICAgIAotICAgIFRpbWlu
Z1Njb3BlIHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3Rz
IGFmdGVyIGNvbnZlcmdlbmNlIik7Ci0KLSAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBiZSBt
YXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KLSAgICAvLyB0aGUg
bGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KLSAgICB2aXNpdFdlYWtI
YW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25n
SGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhl
YXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAg
IGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQ
cm9maWxlcigpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2Zp
bGVyLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1Vu
dmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlz
aXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNh
bXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAg
ICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgICAgICAg
ICAgCisgICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKCptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qaXRTdHViUm91
dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVs
U2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKTsKKworICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMo
aGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAg
ICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIERGRzo6
bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAg
Ym9vbCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5pc0VtcHR5KCkg
JiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIAorICAgICAgICAvLyBX
ZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2Fu
IGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQorICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4g
SG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUg
Y29kZSBibG9jaworICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVh
bGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQor
ICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2
ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKKyAgICAgICAgLy8gYXQg
dGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0Mg
Z2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKKyAgICAgICAgLy8gR0MuCisgICAgICAgIG1fY29k
ZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgICAgICBE
Rkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hv
dWxkVGVybWluYXRlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBU
aGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3Rv
ciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCisgICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRo
YXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KKyAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50
cmFuc2ZlclRvKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KQorICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JN
YXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1h
cmtTdGFjaygpLnNpemUoKSwgIiAiKTsKKworICAgICAgICB7CisgICAgICAgICAgICBUaW1pbmdT
Y29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2lu
ZyIpOworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0
ZUFuZERyYWluKHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVk
RHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQgPQorICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4sIHRpbWVU
b1Jlc3VtZSk7CisgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRT
Y29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgICAgIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJh
aW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNb25vdG9u
aWNUaW1lIHRpbWVPZlN0b3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgY29uY3Vy
cmVudFRpbWUgPSB0aW1lT2ZTdG9wIC0gdGltZVRvUmVzdW1lOworICAgICAgICB0b3BPZkxvb3BU
aW1lID0gdGltZU9mU3RvcDsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTU2Miw3ICs2MzksNiBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3Rh
Y2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGlu
ZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBA
IC01ODksNiArNjY1LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIFRpbWluZ1Nj
b3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5NYXJraW5nIik7CiAgICAgaWYgKG1f
Y29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV9jb2Rl
QmxvY2tzLT5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2ppdFN0dWJSb3V0
aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2NvcGUgY2xl
YXJNYXJrc1RpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmciKTsK
QEAgLTU5Niw0MiArNjczLDIyIEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICB9CiB9
CiAKLXZvaWQgSGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQotewotI2lmIEpTQ19P
QkpDX0FQSV9FTkFCTEVECi0gICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgbV9z
bG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncygp
Ci17Ci0gICAgaWYgKCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xs
ZWN0aW9uU2NvcGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZtLT5zbWFsbFN0cmluZ3Mu
dmlzaXRTdHJvbmdSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOwotICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU21hbGwgc3Ry
aW5nczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJh
aW4oKTsKLX0KLQogdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJiByb290cykKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZChyb290cyk7CisgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5kKHJvb3RzKTsKIAogICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2Vy
dmF0aXZlIFJvb3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRv
bmF0ZUFuZERyYWluKCk7CisgICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIs
ICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVy
V29ya2xpc3RXZWFrUmVmZXJlbmNlcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBE
Rkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xv
dFZpc2l0b3IpOworICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNp
dFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZH
IFdvcmtsaXN0czpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJERkcgV29y
a2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTcw
NCwxMjIgKzc2MSwxMCBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyhI
CiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZp
c2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3Rl
Y3RlZFZhbHVlcykKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRBcmd1
bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICghbV9tYXJr
TGlzdFNldCB8fCAhbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0
KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAg
ICAgICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0g
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0
RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fdm0tPmV4
Y2VwdGlvbigpICYmICFtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwotICAgIHZpc2l0
b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhj
ZXB0aW9uczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVB
bmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZp
c2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQotICAgICAgICBkYXRhTG9nKCJTdHJvbmcgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZp
c2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxl
U3RhY2sudmlzaXQodmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xv
dFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12
b2lkIEhlYXA6OnZpc2l0U2FtcGxpbmdQcm9maWxlcigpCi17Ci0jaWYgRU5BQkxFKFNBTVBMSU5H
X1BST0ZJTEVSKQotICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
bV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgIEFTU0VSVChzYW1wbGluZ1Byb2Zp
bGVyLT5nZXRMb2NrKCkuaXNMb2NrZWQoKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZp
c2l0KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBk
YXRhOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVB
bmREcmFpbigpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkudW5sb2NrKCk7
Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLX0KLQotdm9pZCBI
ZWFwOjp2aXNpdFNoYWRvd0NoaWNrZW4oKQotewotICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52
aXNpdENoaWxkcmVuKG1fc2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnRyYWNlQ29kZUJs
b2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpCi17Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb2RlIEJsb2Nr
cyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xv
dFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFdlYWtIYW5k
bGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBUaW1pbmdTY29wZSB0aW1pbmdT
Y29wZSgqdGhpcywgIkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMiKTsKLSAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywg
Im1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9Ci0gICAgICAgIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNl
cygpOwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5h
YmxlcihtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgSGVhcDo6
dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90IHZpc2l0
Q291bnQgPSBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAgc2l6ZV90IHZpc2l0
Q291bnQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAgICAgIHZp
c2l0Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBkYXRhTG9nRigiXG5OdW1i
ZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgyNywxOSArNzcyLDIyIEBA
IHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKICAgICBpZiAobV9jb2xs
ZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX3RvdGFsQnl0
ZXNWaXNpdGVkID0gMDsKIAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPSBtX3Ns
b3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CisgICAgbV90
b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAgICAg
CiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xl
OwogfQogCiB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xvdFZpc2l0b3IucmVz
ZXQoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChh
dXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBw
YXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2su
aXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFj
ay0+aXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwo
KTsKICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAgLTk3NywxNCArOTI1
LDIwIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKIHsKICAgICBB
U1NFUlQoY2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgfHwg
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09
IENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwotICAgIC8vIEluZGljYXRlIHRoYXQgdGhp
cyBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAg
IC8vIC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQgY29sbGVjdGlvbi4K
LSAgICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICAvLyAiT2xkR3JleSIgZG9l
c24ndCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBidXQgd2UgdXN1YWxs
eSB0cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQotICAgIC8vIHNhbWUuCi0gICAgY2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmRUb01h
cmtTdGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICBpZiAoIUhlYXA6OmlzTWFy
a2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVj
dGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBw
YXN0CisgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBh
biB1bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cworICAgICAgICAvLyBt
YXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5v
cm1hbCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAgICAgICAvLyBzYWZlbHkgaWdub3JlIHRoZXNl
IHN0b3Jlcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJdCBjb3VsZCBiZSB0aGF0
IHRoZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVj
dG9yIG1heSBzZXQgdGhlCisgICAgLy8gc3RhdGUgdG8gR3JleSBhbmQgdGhlbiB0byBBbnRocmFj
aXRlT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8gcmFjZSB3aXRoIHRoZQor
ICAgIC8vIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJl
Y2F1c2UgdGhlIG9iamVjdCBfd2lsbF8gZ2V0IHNjYW5uZWQgYWdhaW4uCisgICAgLy8gSWYgd2Ug
bG9zZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fpbi4gVGhh
dCB3b3VsZCBiZSB1bmZvcnR1bmF0ZSBidXQgbm90CisgICAgLy8gdGhlIGVuZCBvZiB0aGUgd29y
bGQuCisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CisgICAgbV9tdXRh
dG9yTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdh
cmJhZ2UoKQpAQCAtMTA4MywyOSArMTAzNywxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVh
ZCgpCiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUgYmVmb3JlID0gMDsK
KyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewog
ICAgICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIpOwotICAg
ICAgICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGJlZm9yZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7CiAgICAg
Ci0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hp
bGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nl
c3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7Ci0gICAgfQotICAgIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0g
ICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92
bSkpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQotICAgIAotICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCkt
PnRvcENhbGxGcmFtZSk7Ci0gICAgCiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0KTsKICAg
ICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVjdGlvbiBz
Y29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6ICIsIG1fY29sbGVjdGlvblNjb3BlLCAiXG4iKTsK
QEAgLTExMjUsMTUgKzEwNjQsMTIgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAg
ICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpC
ZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7
Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCiAgICAgaWYgKEhhc093
blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAg
ICAgICBjYWNoZS0+Y2xlYXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1l
KTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAgIAogICAgIGlmICht
X3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBW
ZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTcwLDggKzExMDYsOCBAQCB2b2lk
IEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAg
ICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNU
aW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVy
IC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJl
Zm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXNdXG4iKTsKICAgICB9CiAgICAgCiAgICAgewpAQCAt
MTE5MywxMCArMTEyOSwzOCBAQCB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAgc3RvcFRo
ZU11dGF0b3IoKTsKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAodm0oKS0+
dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVND
SUlMaXRlcmFsKCJHQyIpKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7Cisg
ICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdv
cmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAg
IHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAg
dm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsK
KyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURU
YWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZv
aWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2Nh
dGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRo
ZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29u
Y3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5k
IG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxv
Y2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgor
ICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3Qg
YWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBm
YWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0NjYsMTAgKzE0MzAsMTUg
QEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMbwogCiB2b2lkIEhlYXA6
OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7
Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKLSAgICBkZWxldGVTb3VyY2VQcm92
aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAgIHsKKyAgICAg
ICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOworICAgICAgICBkZWxldGVV
bm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hl
cygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAg
aWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5j
KCk7CiB9CiAKIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihPcHRpb25hbDxD
b2xsZWN0aW9uU2NvcGU+IHNjb3BlKQpAQCAtMTU0OSwyMyArMTUxOCw5IEBAIHZvaWQgSGVhcDo6
d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJi
YWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMo
KQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQotCiB2b2lk
IEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xsZWN0aW9u
U2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVCYXJyaWVy
QnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dyaXRl
QmFycmllckJ1ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0aW9uKCkK
LXsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0ZUJhcnJp
ZXJCdWZmZXIuZmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5n
KCkKQEAgLTE5NDksNyArMTkwNCw3IEBAIGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgpID09
IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRh
dG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0
cnVlOwogfQpAQCAtMTk3MSwxMiArMTkyNiw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhyZWFk
QnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAhPSBN
dXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9y
dEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHBy
ZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAg
ICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CiAg
ICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk4NywxMiArMTkzOCw4IEBAIHZvaWQgSGVhcDo6cmVw
b3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRT
dGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRl
ZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0
aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rp
b25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4g
JiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAg
ICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3IgKDs7
KSB7CkBAIC0yMDg2LDQgKzIwMzMsMTEgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9v
cFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpub3RpZnlJc1Nh
ZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAgICBpZiAo
T3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xs
ZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2lu
Y2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNw
YWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgog
I2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFz
cyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwor
Y2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNz
IFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApA
QCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2Uo
KSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVU
aHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAg
IFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7
IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBH
Q0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwpAQCAt
MTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZp
bmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQgYWRkRXhlY3V0YWJsZShFeGVj
dXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNT
YWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7
CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29s
bGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRpbmco
KSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJvdGgg
b2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFzdHJv
cGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxs
b2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vi
c2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxT
dGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9y
dEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNpemVfdCBleHRlcm5hbE1lbW9y
eVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAKQEAgLTM5
MSw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9p
ZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBz
dG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAt
NDIyLDMwICs0MjgsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxl
clRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVj
dGlvblNjb3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7CiAgICAg
dm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpb24o
KTsKICAgICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBtYXJrUm9v
dHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBn
Y1N0YXJ0VGltZSk7CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3Rz
Jik7CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAg
ICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNl
dCgpOwotICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3Jr
bGlzdEVudHJpZXMoKTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYp
OwotICAgIHZvaWQgdmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2
aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEhhbmRs
ZVN0YWNrKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVy
KCk7Ci0gICAgdm9pZCB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICB2b2lkIHRyYWNlQ29kZUJs
b2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOwotICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFw
Um9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KEhlYXBSb290VmlzaXRvciYp
OwogICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAg
dm9pZCBlbmRNYXJraW5nKCk7CiAKQEAgLTUxNyw3ICs1MTEsOCBAQCBwcml2YXRlOgogCiAgICAg
TWFjaGluZVRocmVhZHMgbV9tYWNoaW5lVGhyZWFkczsKICAgICAKLSAgICBTbG90VmlzaXRvciBt
X3Nsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0
b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0
YXRvck1hcmtTdGFjazsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBi
eSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAg
ICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNh
Y2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC01NzEsNyArNTY2LDggQEAg
cHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0
YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2s7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFy
a2VycyB7IDAgfTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNl
IH07CkBAIC01OTksNiArNTk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRv
IHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4g
bV93b3JsZFN0YXRlOwogICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCB7IGZhbHNlIH07CisgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAog
ICAgIERlcXVlPE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlj
a2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2
ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lk
IE1hcmtTdGFja0FycmF5Ojp0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAgCisgICAgLy8gUmVtb3ZlIG91
ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVu
dDxjb25zdCBKU0NlbGwqPiogbXlIZWFkID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAg
R0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVu
dHMucmVtb3ZlSGVhZCgpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1f
bnVtYmVyT2ZTZWdtZW50cy0tOworICAgIAorICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1f
c2VnbWVudHMpOworICAgIAorICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cyArPSBtX251bWJl
ck9mU2VnbWVudHM7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzID0gMDsKKyAgICAKKyAgICAvLyBQ
dXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJhY2sgaW4gdGhlaXIgcGxhY2VzLgorICAgIG1fc2VnbWVu
dHMucHVzaChteUhlYWQpOworICAgIG90aGVyLm1fc2VnbWVudHMucHVzaChvdGhlckhlYWQpOwor
ICAgIG1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cysr
OworICAgIAorICAgIHdoaWxlICghaXNFbXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAg
ICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJl
bW92ZUxhc3QoKSk7CisgICAgfQorfQorCiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21l
Q2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBh
Ym91dCAxIC8gMiBvZiBvdXIgY2VsbHMuIFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDIwODQxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDggKzM1LDkgQEAgY2xhc3MgTWFya1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NTZWdtZW50
ZQogcHVibGljOgogICAgIE1hcmtTdGFja0FycmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0ZVNvbWVD
ZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcik7Ci0gICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zy
b20oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKKyAgICB2
b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNvbWVDZWxs
c1RvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0
YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDYgQEAgdm9p
ZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZAogdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewogICAgIEFT
U0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSk7
CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwogICAgIAogICAgIEZyZWVMaXN0
IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVl
TGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgTWFya2VkQmxvY2s6Ok1h
cmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJgogICAgICwgbV9oYW5kbGUoaGFuZGxlKQogICAgICwg
bV92bSgmdm0pCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwogfQogCiB0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFu
ZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUg
c3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpO
ZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpNYXJrc01vZGUgbWFya3NNb2RlPgpAQCAtMjQxLDI0ICsyNDMsNiBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0cnVlOwog
fQogCi1jbGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6
OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IoTWFy
a2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICB7
Ci0gICAgfQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwqIGNlbGws
IEhlYXBDZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1hcmtlZEJsb2Nr
OjpibG9ja0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAgIG1fYmxvY2st
PnNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpDb250aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSog
bV9ibG9jazsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmco
Y29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAgLTI2NiwxMiAr
MjUwLDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICBB
U1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBpZiAoIWlzRnJl
ZUxpc3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRo
ZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9yIGFsbG9jYXRp
b24gc2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxyZWFkeSBkb25l
IHN0b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxpc3QuYWxsb2Nh
dGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChm
YWxzZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwgIlxuIik7Cisg
ICAgCiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhlYXAgaW50cm9z
cGVjdGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIgZnJlZSBsaXN0
IGFyZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAgICAgLy8gd2F5
IHRvIHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI2OCwxNyBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXdseUFsbG9jYXRl
ZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmpl
Y3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3bHlBbGxvY2F0
ZWRGdW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rvcik7CisgICAg
Zm9yRWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5k
KSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxvY2F0ZWQoY2Vs
bCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0LAogICAgICAg
ICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsK
ICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVj
dGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAgIGNsZWFyTmV3
bHlBbGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMwMSwxNCBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnJlc3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhS
YXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5n
IVxuIik7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykpOwogICAg
IEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXdseUFsbG9jYXRl
ZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRoZXJlIGFp
bid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIGhh
ZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9jYXRpb24u
CiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICszNTIsOCBAQCB2
b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAgICAgaWYgKGhh
bmRsZSgpLmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAgICAgIHx8ICFt
YXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikpIHsKKyAgICAg
ICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBD
bGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsKICAgICAgICAg
Ly8gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlzIGFscmVhZHkg
cmVjb2duaXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9jayBkaWQgbm90
IHN1cnZpdmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsgYml0cyB0aGUg
b2xkIGZhc2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIGZv
ciBzdWNoIGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVwLXRvLQpAQCAt
MzYyLDYgKzM2Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUK
ICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAgICBtX21hcmtz
LmNsZWFyQWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAg
ICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4iKTsKICAgICAg
ICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+bmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkVmVy
c2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8vIE1lcmdlIHRo
ZSBjb250ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2UgZ2V0IHRoZSBm
dWxsIHNldCBvZiBiaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRT
cGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBAQCB2b2lk
IE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yTWFya2luZygpCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJl
c3VtZUFsbG9jYXRpbmcoKQogewotICAgIEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAgICBmb3JF
YWNoQWxsb2NhdG9yKAogICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAt
PiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFsbG9jYXRp
bmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVX
b3JsZFNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
UmVzdW1lVGhlV29ybGRTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2b2lkIHZh
bGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3Io
SGVhcCYgaGVhcCkKLSAgICA6IG1fc3RhY2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAg
ICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Zp
c2l0Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFy
a2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyArODksNyBA
QCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0b3I6On5T
bG90VmlzaXRvcigpCiB7Ci0gICAgY2xlYXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1hcmtTdGFj
a3MoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAgLTEwOSwx
NiArMTA3LDE3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQg
U2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290
cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0g
MDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51
bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
bV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkK
K3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFjay5jbGVh
cigpOworICAgIG1fY29sbGVjdG9yU3RhY2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JTdGFjay5j
bGVhcigpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5
KTsKKyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKIAogICAg
ICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOwogICAgICAgICByZXR1cm47CkBAIC0yMTAs
NyArMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZQogICAg
IC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAgIC8vIElu
IGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGlu
IHRoaXMgR0MgY3ljbGUuCiAgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3Mg
YSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVy
ZWQgb2JqZWN0LgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOwor
ICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGFwcGVu
ZFRvTWFya1N0YWNrKGNvbnRhaW5lciwgY2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywxOSBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhl
YXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFw
cGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok5ld0dy
ZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAgICBBU1NF
UlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBjb250
YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3Jr
IiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGlu
ZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29u
Y3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBj
b250YWluZXIuY2VsbFNpemUoKTsKICAgICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKyAg
ICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX211
dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhp
bGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKQEAgLTI5NCwxMiArMjk2LDEwIEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNj
b3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xkQ2VsbFN0
YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7Ci0gICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFjZSBo
ZXJlIC0gdGhlIGNlbGwgc3RhdGUgY2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2JqZWN0
cyBjYW4gb25seSBiZQotICAgIC8vIHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBOZWl0
aGVyIHRoZSBiYXJyaWVyIG5vciBtYXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbgot
ICAgIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRDZWxs
U3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0
ZTo6TmV3R3JleSk7CisgICAgLy8gRnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9yIHRoZSBv
YmplY3QgdG8gYmUgYmxhY2sgYWxyZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0IGF0Cisg
ICAgLy8gYWJvdXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3MgZmluZS4g
SXQncyBhIGduYXJseSBhbmQgc3VwZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90IGNsZWFy
IHRvIG1lIHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJhaWwgaGVy
ZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAgICBjZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAgCkBAIC0z
MjYsMjMgKzMyNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hp
CiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKSB7
Ci0gICAgICAgIGlmIChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkpCisgICAg
ICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9oZWFwU25h
cHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogICAg
IH0KIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJr
U3RhY2tBcnJheSYgdG8pCiB7CiAgICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkgb2Z0ZW4s
IHdlIGNhbiBhZmZvcmQgdG8gYmUgY29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1bWUgdGhh
dCBkb25hdGluZyBpcyBub3QgcHJvZml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tpbmcgd2hl
biBhIHRocmVhZCByZWFjaGVzIGEgZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4KLSAgICBp
ZiAobV9zdGFjay5zaXplKCkgPCAyKQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1
ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0aW5n
IG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFj
ay5zaXplKCkpCisgICAgaWYgKHRvLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
SWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1
bWUgdGhhdCBhbm90aGVyCkBAIC0zNTIsMjYgKzM1Miw0MyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3aXNl
LCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KLSAg
ICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7Cisg
ICAgZnJvbS5kb25hdGVTb21lQ2VsbHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWlu
KCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIGRvbmF0
ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjayk7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywgKm1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpk
cmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVs
TW9kZSk7CiAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1f
c3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9u
czo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVt
b3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9z
dGFjay5yZW1vdmVMYXN0KCkpOworICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0
eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQp
KSB7CisgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3du
ID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fY29s
bGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAg
ICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBt
X211dGF0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1cmUg
dGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBub3Qg
YmVjYXVzZSBvZgorICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0IGFu
IG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAgICAgICAg
ICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFscmVh
ZHkgbWFya2VkLgorICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxh
c3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211
dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0ZUtub3du
UGFyYWxsZWwoKTsKICAgICB9CiAgICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5
KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1v
ZGUgc2hhcmVkRHJhaW5Nb2RlKQorU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RW
aXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSwg
TW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUp
OwogICAgIApAQCAtMzkyLDQ4ICs0MDksNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVyIHRlcm1p
bmF0aW9uIGlzIHJlYWNoZWQsIG9yIHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAgICAgICAg
ICAgICAgIC8vIGZvciB1cyB0byBkby4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWlu
YXRpb24/CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQ
YXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZE1hcmtTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVh
cC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtub3cg
aXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFy
ZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25l
PwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAu
bV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VS
VChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAgICBpZiAo
aGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERy
YWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4K
ICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzCi0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAgICAg
ICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAgICAgICAg
ICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLndhaXRVbnRpbCgKKyAgICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91dCwKICAg
ICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAhbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHko
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hl
YXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVudCBwaGFz
ZSBkb25lPyBJZiBzbywgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAgICAg
ICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1
bHQ6OkRvbmU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21l
Q2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9o
ZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fY29s
bGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFs
bGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zy
b20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ssIG1f
aGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFw
Lm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0KIApA
QCAtNDUzLDcgKzQ4Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCog
cm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25z
dAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFx
dWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250
YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs0OTUsNiBAQCBUcmlTdGF0ZSBTbG90VmlzaXRv
cjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLWlu
dCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBh
cmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICBy
ZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTE4LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0
ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9u
aWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFp
bih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiB7
Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJl
IGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAg
ICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU0Niw5
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9o
ZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikg
Y29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
LSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRh
TG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJM
aXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxp
c3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIK
ICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5j
bHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkg
KzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNp
dG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFj
azsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVy
biBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9y
TWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3Rh
Y2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBj
b25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwyNCAr
ODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9v
dCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qo
dm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZv
aWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1w
dHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsg
cmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1w
dHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7
Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7
CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0
ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29w
aWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291
bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQg
ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9
IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAg
ICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAg
IHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBT
aGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1
bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0
ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpA
QCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5n
VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZvaWQg
bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBhcHBl
bmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9pZCBh
cHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9pZCBu
b3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwog
CiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQg
ZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJr
U3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFja0Fy
cmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBN
YXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVl
Um9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRo
ZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0g
ICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBi
b29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2YXRl
OgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVs
bHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBDZWxs
U3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sg
eyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9u
IDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBTbG90
VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Vmlz
aXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7
Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUs
IHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFw
KCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRl
QmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3Ry
dWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICAgICAg
ICAgIApAQCAtMTAxNiw2ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KEluc3RydWN0aQogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAg
ICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNl
SW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAy
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CkBAIC0xMDI0LDcgKzEwMjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5z
dHJ1Y3RpCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25z
dGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8u
aW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFy
IHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBi
ZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBz
dGF0aWNhbGx5LgpAQCAtMTAzOCwxNCArMTAzNywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxl
SW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgYml0
d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlvbls1XSkpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3
aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29u
c3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNl
IENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZh
cihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0
Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9k
dWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0xMTU3LDExICsxMTU3LDExIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHIKICAgICBpbnQgaW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1
bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgCiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMSk7CiAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0
QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8
VW5rbm93bj4pKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2Nyw2ICsxNjcsMTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0
YXRlID0gZGF0YTsgfQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0
YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhl
ZCgmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0
YXRlIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3Rh
dGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21p
Y0NvbXBhcmVFeGNoYW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7
CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsMTEgKzIwMSwxMiBAQCBpbmxpbmUg
dm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sCiAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1
Y3R1cmUoKQogICAgICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKLSAg
ICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICBt
X2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogICAgIG1f
dHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CiAgICAgbV9pbmRleGluZ1R5cGUg
PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRo
aXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjpt
ZXRob2RUYWJsZSgpIGNvbnN0CkBAIC0yODQsOSArMjg1LDEyIEBAIGlubGluZSB2b2lkIEpTQ2Vs
bDo6Y2FsbERlc3RydWN0b3IoVk0mIHYKICAgICBpZiAoaXNaYXBwZWQoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVJRCgpKTsKLSAgICBpZiAoaW5saW5lVHlwZUZsYWdz
KCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKQotICAgICAgICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKLSAgICBlbHNlCisgICAgaWYgKGlubGlu
ZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFi
bGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5k
ZXN0cm95OworICAgICAgICBkZXN0cm95KHRoaXMpOworICAgIH0gZWxzZQogICAgICAgICBqc0Nh
c3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPih0aGlzKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmRlc3Ryb3kodGhpcyk7CiAgICAgemFwKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niwx
MCArMTQ2LDQ0IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAg
ICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwot
ICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZp
c2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwot
CisgICAgLy8gVGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0cnVjdHVyZSBsYXN0LiBXZSdy
ZSBPSyB3aXRoIHNlZWluZyBhbiBvbGQgc3RydWN0dXJlIGFuZCBuZXcKKyAgICAvLyBidXR0ZXJm
bHksIGJ1dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIExldCdzIGJyZWFrIHRoaXMgZG93biEK
KyAgICAvLworICAgIC8vIENTOiBsb2FkIHN0cnVjdHVyZQorICAgIC8vIENCOiBsb2FkIGJ1dHRl
cmZseQorICAgIC8vIAorICAgIC8vIE1COiBzdG9yZSBidXR0ZXJmbHkKKyAgICAvLyBNUzogc3Rv
cmUgc3RydWN0dXJlCisgICAgLy8gCisgICAgLy8gVGhlIHJ1bGVzIGFyZTogSXQncyBPSyB0byBz
ZWUgYSBuZXcgYnV0dGVyZmx5IGJ1dCBhbiBvbGQgc3RydWN0dXJlLiBJdCdzIHdyb25nIHRvIHNl
ZSBhbiBvbGQKKyAgICAvLyBidXR0ZXJmbHkgYW5kIGEgbmV3IHN0cnVjdHVyZS4KKyAgICAvLyAK
KyAgICAvLyBIZXJlIGFyZSBhbGwgcG9zc2libGUgaW50ZXJsZWF2aW5nczoKKyAgICAvLyAKKyAg
ICAvLyBNQiBDUyBDQiBNUzogQ29sbGVjdG9yIHNlZXMgbmV3IGJ1dHRlcmZseSBhbmQgb2xkIHN0
cnVjdHVyZS4gCisgICAgLy8gTUIgQ1MgTVMgQ0I6IENvbGxlY3RvciBzZWVzIG5ldyBidXR0ZXJm
bHkgYW5kIG9sZCBzdHJ1Y3R1cmUuCisgICAgLy8gTUIgTVMgQ0IgQ1M6IENvbGxlY3RvciBzZWVz
IG5ldyBzdHJ1Y3R1cmUgYW5kIGJ1dHRlcmZseS4KKyAgICAvLyBDUyBNQiBNUyBDQjogQ29sbGVj
dG9yIHNlZXMgbmV3IGJ1dHRlcmZseSBhbmQgb2xkIHN0cnVjdHVyZS4KKyAgICAvLyBDUyBNQiBD
QiBNUzogQ29sbGVjdG9yIHNlZXMgbmV3IGJ1dHRlcmZseSBhbmQgb2xkIHN0cnVjdHVyZS4KKyAg
ICAvLyBDUyBDQiBNQiBNUzogQ29sbGVjdG9yIHNlZXMgb2xkIHN0cnVjdHVyZSBhbmQgYnV0dGVy
Zmx5LgorICAgIC8vCisgICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3
ZSBvYmV5IHRoaXMgb3JkZXIgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZS4KKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOworICAgIAor
ICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOyAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsb2FkLWxvYWQg
ZmVuY2UgYnV0IHRoZSBjb21waWxlciBtaWdodCBub3Qgc2VlIGl0IHdpdGhvdXQgaGVscC4KKyAg
ICAKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpOwor
ICAgIGlmICh3YXNEaWN0aW9uYXJ5KSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseSkgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5sb2NrKCkpOworICAgICAgICAgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkpCisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+dmlz
aXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVj
dC0+bV9idXR0ZXJmbHkuZ2V0KCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRl
cmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIAogI2lmICFB
U1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlv
bGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAt
MjA1LDYgKzIzOSwxMCBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgp
KTsKKyAgICBXVEY6OmNvbXBpbGVGZW5jZSgpOyAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsb2FkIGxv
YWQgZmVuY2UsIGJ1dCB0aGUgY29tcGlsZXIgbWlnaHQgbm90IHNlZSBpdCB3aXRob3V0IGhlbHAu
CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAg
ICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOwog
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CiAgICAg
aWYgKGJ1dHRlcmZseSkKICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRv
ciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwpAQCAtMjEyLDcgKzI1MCw5IEBAIHZvaWQgSlNGaW5h
bE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBz
dHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3Rv
cmFnZVNpemUpOwotCisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+
bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDgsMTAgKzc0OCw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhFeGVjU3RhdGUqKTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
Vk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5Kik7CiAgICAgICAgIAor
ICAgIHZvaWQgc2V0QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5Kik7IC8vIEFsd2F5cyBjaGFuZ2Ug
dGhlIGJ1dHRlcmZseSBiZWZvcmUgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSEKICAgICB2b2lkIHNl
dFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIApAQCAtMTIwNSwxNCArMTIwNCw2
IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc1dpdGhTY29wZSgpIGNvbnMKICAgICByZXR1cm4g
dHlwZSgpID09IFdpdGhTY29wZVR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKCFi
dXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVy
ZS0+aGFzSW5kZXhpbmdIZWFkZXIodGhpcykpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRo
aXMsIGJ1dHRlcmZseSk7Ci0gICAgc2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwotfQotCiBp
bmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMjIwLDcgKzEyMTEsNyBAQCBp
bmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlKFZNJiB2CiAgICAgSlNDZWxsOjpzZXRT
dHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoVk0mIHZtLCBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSkKIHsKICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZs
eSk7CiB9CkBAIC0xNDE3LDE2ICsxNDA4LDE5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW4KICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0
cnVjdHVyZUV4dGVuc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2ls
bEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNp
dHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJm
bHkpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOworICAgICAgICAgICAgICAgIGlmICh0
aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRo
aXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+
c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAg
ICAgICBzZXRCdXR0ZXJmbHkobmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXMtPnN0
cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOwogCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VS
VCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0
aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAg
ICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7
CkBAIC0xNDUwLDggKzE0NDQsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluCiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAg
IHNldEJ1dHRlcmZseShuZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICBzZXRTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKTsKICAgICAgICAg
c2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0xNDk4LDEzICsxNDkzLDEyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW4KICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0
eSk7Ci0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQotICAgICAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7CisgICAgaWYgKG9sZENhcGFjaXR5
ICE9IG5ld0NhcGFjaXR5KSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7Ci0gICAgICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
ICAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIG5ld1N0cnVjdHVy
ZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4
NCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdmVy
Ym9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihi
b29sLCB1c2VDb25jdXJyZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJv
b2wsIGNvbGxlY3RDb250aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4NCwyNyArNzg0LDYgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQogCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBwaW4oKTsKLQotICAgIHJl
dHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAg
cGluKCk7Ci0gICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOwotfQotCiB2b2lkIFN0cnVj
dHVyZTo6cGluKCkKIHsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKQEAgLTk4OSw0OSAr
OTY4LDEyIEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFs
aWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkKLSAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0
aW9uKGZhbHNlKTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwg
dm0pOwotCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5u
ZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
UHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQ
cm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
Ci0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRh
YmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7
Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0Owot
Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFi
bGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotICAgIHJldHVybiBvZmZzZXQ7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtd
IChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAK
IHZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKQEAgLTExMTQsNiArMTA1Niw5
IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAgICAKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+
aXNPYmplY3QoKSkKICAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5j
bGVhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsOSArMTkxLDEzIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBj
YXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihW
TSYsIFByb3BlcnR5TmFtZSk7CisgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0
aW9uLiBWZXJzaW9ucyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBpdCBqdXN0IGJlZm9yZQor
ICAgIC8vIGNvbW1pdGluZyB0byBtYWtlIHRoZSBjaGFuZ2UuIFRoZSBjYWxsYmFjayBpcyBub3Qg
Y2FsbGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBiZWluZyBtYWRlLAorICAgIC8vIGxpa2UgaWYg
eW91IGNhbGwgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVy
dHkgaXMgbm90IGZvdW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVy
dHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bihWTSYsIFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZvaWQgc2V0UHJvdG90eXBl
V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlw
ZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAgICAgYm9vbCBpc0RpY3Rp
b25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5
S2luZDsgfQpAQCAtNTc5LDYgKzU4Myw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9p
ZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRK
SVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTYzMyw3ICs2MzksMTEgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgRGljdGlvbmFyeUtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlKiA9IG51bGxwdHIpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQ
cm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIFBy
b3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9w
ZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBr
ZXlDb3VudCA9IDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEs
NCArMzExLDgwIEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAg
ICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1
ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsK
KyAgICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFt
ZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERv
bnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJv
cGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byByZXAg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAg
ICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBu
ZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7
CisgICAgCisgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCk7CisKKyAgICBwcm9wZXJ0eVRhYmxl
KCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9v
ZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICAKKyAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisKKyAgICBQ
cm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5m
aW5kKHJlcCk7CisgICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmly
c3QtPm9mZnNldDsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworCisgICAgcHJvcGVydHlU
YWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRl
ZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiBv
ZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYgZnVu
YykKK3sKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgbWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CisgICAgCisgICAgcGlu
KCk7CisKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpOworCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVy
R0MpOworCisgICAgcGluKCk7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1bmMp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1w
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNv
cnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6
bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRM
aXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJ
bkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291
cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2su
aCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRl
IDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCiti
b29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQorewor
ICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1l
Q2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0
ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2Nr
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDgg
KzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25z
dCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wg
aGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcg
V1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294110</attachid>
            <date>2016-11-07 18:27:18 -0800</date>
            <delta_ts>2016-11-08 11:49:59 -0800</delta_ts>
            <desc>making the array object model thread-safe</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>133975</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtOTE4LDYgKzkxOCw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoV29ybGQpOyAvLyBU
aGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2UuCiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUpOwogICAgICAgICB3cml0
ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCwxNiArNjEwLDM0IEBAIENvbXBpbGF0
aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tz
KCkKK3ZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQog
eworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVC
bG9jayB3aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywg
d2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKKyAgICAvLyBhbGwgb3Vy
IENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKworICAgIHNsb3RWaXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jayk7CisgICAgc2xvdFZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHByb2ZpbGVkREZHQ29kZUJsb2Nr
KTsKK30KKwordm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQoreworICAgIGlm
ICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAg
IC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRo
b3V0IHBlcmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0
byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAgICAvLyBhbGwgb3VyIENvZGVCbG9j
a3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAgIEhlYXA6OmhlYXAoY29kZUJsb2Nr
KS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53
cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICB2bS5oZWFwLndyaXRl
QmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CiAgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBI
ZWFwOjpoZWFwKHByb2ZpbGVkREZHQ29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2Rl
QmxvY2spOwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRo
cmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAK
LSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgIHZvaWQgbWFya0NvZGVCbG9ja3Mo
U2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogICAgIHZv
aWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICBib29s
IGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRG
R1dvcmtsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHU2FmZXBv
aW50LmgiCkBAIC0zOCw2ICszNiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6
IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZEJvZHkoY29uc3Qg
TG9ja0hvbGRlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEs
IEJveDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRp
b24sIGludCByZWxhdGl2ZVByaW9yaXR5KQpAQCAtMzQ5LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmts
aXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5z
Rm9yVk0odm0pOwogfQogCit2b2lkIFdvcmtsaXN0OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2Nr
KTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0
ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVy
LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2NrcyhzbG90VmlzaXRvcik7Cisg
ICAgfQorfQorCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwpAQCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQg
V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0KICAgICAgICAgUGxhbiogcGxhbiA9
IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQogICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAg
ICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0pOwogICAgIH0KIH0KIApAQCAtNTUzLDYg
KzU2NCwxNCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQog
Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykg
eworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29y
a2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJs
b2Nrcyh2bSwgc2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCByZW1lbWJlckNvZGVCbG9j
a3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlz
dHMoKTsgaS0tOykgewpAQCAtNTYxLDcgKzU4MCwyMiBAQCB2b2lkIHJlbWVtYmVyQ29kZUJsb2Nr
cyhWTSYgdm0pCiAgICAgfQogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisjZWxzZSAv
LyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQorewor
fQorCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUs
NiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAi
REZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0
b21hdGljVGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBu
YW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdCA6
IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7
IE5vdEtub3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07CkBAIC01Nyw2ICs1Nyw3IEBAIHB1Ymxp
YzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAg
IHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxv
Y2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYp
OwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2
Myw5ICsxNjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQog
ICAgIHJldHVybiAqcmVzdWx0OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUt
PmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9wbGFu
LCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlU3Rv
cmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBt
X291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAg
ICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2lu
T3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9u
KAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUo
KSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5m
bygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0
b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1MSw2ICs0NTEsMTIgQEAgRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZSgpCiAgICAg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsK
IH0KIAordm9pZCBPdXRwdXQ6OnN0b3JlU3RvcmVGZW5jZSgpCit7CisgICAgRmVuY2VWYWx1ZSog
ZmVuY2UgPSB0aGlzLT5mZW5jZSgpOworICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZSgpOwor
fQorCiB2b2lkIE91dHB1dDo6c3RvcmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBw
b2ludGVyKQogewogICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkwLDYgKzE5MCw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50
ZXIsIExUeXBlKTsKICAgICB2b2lkIHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyKTsKICAgICBC
Mzo6RmVuY2VWYWx1ZSogZmVuY2UoKTsKKyAgICB2b2lkIHN0b3JlU3RvcmVGZW5jZSgpOwogCiAg
ICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4
WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
ZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE3ICszNywxMSBAQCBlbnVtIGNs
YXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8vIFNsb3RWaXNpdG9ycyBhcmUgZG9uZS4K
ICAgICBBbnRocmFjaXRlT3JCbGFjayA9IDAsCiAgICAgCi0gICAgLy8gVGhlIG9iamVjdCBpcyBp
biBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVl
biBtYXJrZWQgeWV0LgorICAgIC8vIFRoZSBvYmplY3QgaXMgZ29pbmcgdG8gYmUgaXMgaW4gZWRl
bi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90IGJlZW4gbWFy
a2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkg
LSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGlu
IHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2luZyB0byBzY2FuIGl0LiBJZiB0aGlzIGlz
IGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaXMgaW4gZWRlbi4K
LSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQg
d2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBiZWxvbmdzIHRvIG9sZCBnZW4gKGlmIHRo
aXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBncmV5IGEgc2Vjb25kIHRpbWUgaW4gdGhp
cyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBzdG9yZSBiYXJyaWVyIHJlcXVlc3Rl
ZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdyZXkgPSAzCisgICAgLy8gVGhlIG9iamVj
dCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQuCisgICAgR3JleSA9IDIsCiB9Owog
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQgPSAwOyAvLyB4IDw9IGJsYWNr
VGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9yQmxhY2suCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRG91
Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0Mg
ewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsKK3B1YmxpYzoKKyAgICBSZXN1
bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAg
eworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1faGVhcC5tX3N0b3BUaW1lKS5t
aWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAgICAgICAKKyAgICAgICAgbV9oZWFwLnJl
c3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAgIH5SZXN1bWVUaGVXb3JsZFNjb3BlKCkK
KyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAg
ICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKworICAgICAgICBkYXRhTG9nKCJbSW5j
cmVtZW50OiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307
CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMy
ICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMs
OCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJh
TWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAg
LCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAg
ICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigq
dGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3Rh
Y2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0
ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMo
c3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJ
T04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAg
ICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29s
KCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhy
ZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYs
MTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAK
IHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9y
LmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5j
b25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRp
bmcoKQpAQCAtNDM5LDExNiArNDcxLDE2MSBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxh
bnMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBs
ZXRlQWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERG
R19KSVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9
CiAKLXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6
bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1h
cmtSb290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5n
U2NvcGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBv
aW50Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RW
aXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZl
cmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdl
bmNlIik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVs
bCkgeworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9y
U2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3Rh
Y2stPmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6
cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwog
Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9m
aWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVu
dGlsIHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmls
ZXIncyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1w
bGluZ1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxh
dGUKLSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNo
YW5jZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGlu
c2lkZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9j
ZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFs
c2U7CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6
RnVsbCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAg
bV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVn
aW5NYXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFs
c2U7Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBb
dGhpc10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFp
bGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMp
OwotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQo
V1RGTW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZp
c2l0b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50
LnNldEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0
b3IqIHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlm
IChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMp
OworICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUo
bmV3VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVh
ZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJl
YWQoR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RW
aXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVy
KCpzbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFy
a2luZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xv
dFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZp
c2l0b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RW
aXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsK
LSAgICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2Nv
cGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxs
ZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAg
bV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAg
ICBkb3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91
YmxlIHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5p
dGlhbFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9u
KSB7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygi
SXRlciMiLCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVz
dW1lID0gdG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJy
ZW50UmF0aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3Rl
cDsKICAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1p
bmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAg
ICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25z
ZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBl
clNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRo
ZXJTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3Rh
Y2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVm
ZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRp
dmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBl
YWNoIGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0
aGVtLgorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVt
YmVyZWRTZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgorICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgq
bV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0
U3Ryb25nUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAK
KyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAg
ICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFy
a0xpc3RTZXQpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLT5leGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRp
b24oKSk7CisgICAgICAgIGlmIChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBo
ZWFwUm9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZh
dGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKLSAg
ICAgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1
cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCi0gICAgICAgICAgICAv
LyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4K
LSAgICAgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5n
KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQo
KTsKLSAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAgdmlzaXRQcm90ZWN0ZWRP
YmplY3RzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0QXJndW1lbnRCdWZmZXJzKGhl
YXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0RXhjZXB0aW9uKGhlYXBSb290VmlzaXRvcik7
Ci0gICAgICAgIHZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2
aXNpdEhhbmRsZVN0YWNrKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0U2FtcGxpbmdQ
cm9maWxlcigpOwotICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICAgICAgdHJhY2VD
b2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZHJh
aW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgfQotICAgIAotICAg
IFRpbWluZ1Njb3BlIHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFy
a1Jvb3RzIGFmdGVyIGNvbnZlcmdlbmNlIik7Ci0KLSAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVz
dCBiZSBtYXJrZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KLSAgICAv
LyB0aGUgbGl2ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KLSAgICB2aXNp
dFdlYWtIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0
U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hhbmRsZVN0YWNrLnZp
c2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisg
ICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2Ft
cGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGlu
Z1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJv
Y2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxl
ci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAg
ICAgICAgICAgCisgICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKCpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qaXRT
dHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNp
dG9yKTsKKworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3Rz
SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3Bh
cmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKworICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vh
a1NldHMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7
CisgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAg
IERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAg
ICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5pc0Vt
cHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2Ug
cmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQorICAgICAgICAvLyBydW5uaW5nIHJpZ2h0
IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFy
ayB0aGUgY29kZSBibG9jaworICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYg
aXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVy
IHRoZQorICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29w
IGZvcmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKKyAgICAgICAg
Ly8gYXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxh
c3QgR0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKKyAgICAgICAgLy8gR0MuCisgICAgICAg
IG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAg
ICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAorICAgICAgICBp
ZiAoc2hvdWxkVGVybWluYXRlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAg
ICAvLyBUaGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNv
bGxlY3RvciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCisgICAgICAgIC8vIHdpdGhvdXQgbG9j
a3MuIFRoYXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KKyAgICAgICAgbV9tdXRhdG9yTWFya1N0
YWNrLT50cmFuc2ZlclRvKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2so
KSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsICpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xs
ZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiAiKTsKKworICAgICAgICB7CisgICAgICAgICAgICBU
aW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQg
dHJhY2luZyIpOworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRvbmF0ZUFuZERyYWluKHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBTbG90VmlzaXRvcjo6
U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQgPQorICAgICAgICAgICAgICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4s
IHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0
b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAgICAgICAgICAgICAgUmVzdW1lVGhl
V29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFz
dGVyRHJhaW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBN
b25vdG9uaWNUaW1lIHRpbWVPZlN0b3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAg
Y29uY3VycmVudFRpbWUgPSB0aW1lT2ZTdG9wIC0gdGltZVRvUmVzdW1lOworICAgICAgICB0b3BP
Zkxvb3BUaW1lID0gdGltZU9mU3RvcDsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTU2Miw3ICs2MzksNiBAQCB2
b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0
aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHVi
Um91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNl
cnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwog
fQogCkBAIC01ODksNiArNjY1LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5NYXJraW5nIik7CiAgICAg
aWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAg
bV9jb2RlQmxvY2tzLT5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2ppdFN0
dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2Nv
cGUgY2xlYXJNYXJrc1RpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtp
bmciKTsKQEAgLTU5Niw0MiArNjczLDIyIEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAg
ICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQotewotI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92
bSwgbV9zbG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNtYWxsU3Ry
aW5ncygpCi17Ci0gICAgaWYgKCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgq
bV9jb2xsZWN0aW9uU2NvcGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZtLT5zbWFsbFN0
cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOwotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU21h
bGwgc3RyaW5nczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQogdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZChyb290cyk7
CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5kKHJvb3RzKTsKIAogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
Q29uc2VydmF0aXZlIFJvb3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290
czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENv
bXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAg
ICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2Vz
KG1fc2xvdFZpc2l0b3IpOworICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChp
KS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
ZygiREZHIFdvcmtsaXN0czpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJE
RkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAK
QEAgLTcwNCwxMjIgKzc2MSwxMCBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNob3RO
b2RlcyhICiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBt
X3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtl
eSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0K
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICgh
bV9tYXJrTGlzdFNldCB8fCAhbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtM
aXN0U2V0KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3Ip
OwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6
OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1f
dm0tPmV4Y2VwdGlvbigpICYmICFtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwotICAg
IHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKLQotICAgIGlm
IChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
ZygiRXhjZXB0aW9uczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5k
b25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFw
Um9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5k
bGVzKHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTdHJvbmcgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0
b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhl
YXA6OnZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQodmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkhhbmRsZSBTdGFjazpcbiIs
IG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwot
fQotCi12b2lkIEhlYXA6OnZpc2l0U2FtcGxpbmdQcm9maWxlcigpCi17Ci0jaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQotICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2Zp
bGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgIEFTU0VSVChzYW1wbGlu
Z1Byb2ZpbGVyLT5nZXRMb2NrKCkuaXNMb2NrZWQoKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmls
ZXItPnZpc2l0KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9m
aWxlciBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgbV9zbG90VmlzaXRvci5k
b25hdGVBbmREcmFpbigpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkudW5s
b2NrKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdFNoYWRvd0NoaWNrZW4oKQotewotICAgIG1fdm0tPnNoYWRvd0NoaWNr
ZW4oKS52aXNpdENoaWxkcmVuKG1fc2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnRyYWNl
Q29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpCi17Ci0gICAgbV9qaXRTdHViUm91dGluZXMt
PnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb2Rl
IEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAg
IG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFdl
YWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBUaW1pbmdTY29wZSB0
aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMiKTsKLSAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgq
dGhpcywgIm1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwotICAgICAgICAgICAgbV9vYmpl
Y3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9Ci0gICAgICAgIGhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVm
ZXJlbmNlcygpOwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1f
c2xvdFZpc2l0b3IpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVk
KFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQg
SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90
IHZpc2l0Q291bnQgPSBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAgc2l6ZV90
IHZpc2l0Q291bnQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAg
ICAgIHZpc2l0Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBkYXRhTG9nRigi
XG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgyNywxOSArNzcy
LDIyIEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKICAgICBpZiAo
bV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX3Rv
dGFsQnl0ZXNWaXNpdGVkID0gMDsKIAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUg
PSBtX3Nsb3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7Cisg
ICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7
CiAgICAgCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhp
c0N5Y2xlOwogfQogCiB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xvdFZpc2l0
b3IucmVzZXQoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAg
Zm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAg
ICAgICBwYXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11dGF0b3JN
YXJrU3RhY2stPmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1v
dmVBbGwoKTsKICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAgLTk3Nywx
NCArOTI1LDIwIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKIHsK
ICAgICBBU1NFUlQoY2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklU
KCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0
ZSgpID09IENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwotICAgIC8vIEluZGljYXRlIHRo
YXQgdGhpcyBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9sbG93aW5n
OgotICAgIC8vIC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQgY29sbGVj
dGlvbi4KLSAgICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICAvLyAiT2xkR3Jl
eSIgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBidXQgd2Ug
dXN1YWxseSB0cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQotICAgIC8vIHNhbWUuCi0gICAgY2VsbC0+
c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBl
bmRUb01hcmtTdGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICBpZiAoIUhlYXA6
OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIC8vIER1cmluZyBhIGZ1bGwg
Y29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2
aXZlZCBwYXN0CisgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9y
ZSB0byBhbiB1bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cworICAgICAg
ICAvLyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24g
dGhlIG5vcm1hbCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAgICAgICAvLyBzYWZlbHkgaWdub3Jl
IHRoZXNlIHN0b3Jlcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJdCBjb3VsZCBi
ZSB0aGF0IHRoZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUg
Y29sbGVjdG9yIG1heSBzZXQgdGhlCisgICAgLy8gc3RhdGUgdG8gR3JleSBhbmQgdGhlbiB0byBB
bnRocmFjaXRlT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8gcmFjZSB3aXRo
IHRoZQorICAgIC8vIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3Vy
YXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8gZ2V0IHNjYW5uZWQgYWdhaW4uCisgICAgLy8g
SWYgd2UgbG9zZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fp
bi4gVGhhdCB3b3VsZCBiZSB1bmZvcnR1bmF0ZSBidXQgbm90CisgICAgLy8gdGhlIGVuZCBvZiB0
aGUgd29ybGQuCisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CisgICAg
bV9tdXRhdG9yTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVj
dEFsbEdhcmJhZ2UoKQpAQCAtMTA4MywyOSArMTAzNywxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJ
blRocmVhZCgpCiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUgYmVmb3Jl
ID0gMDsKKyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkgewogICAgICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIp
OwotICAgICAgICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGJlZm9yZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7
CiAgICAgCi0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIERlZmVyR0NG
b3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7Ci0gICAgfQotICAgIAotI2lm
IEVOQUJMRShKSVQpCi0gICAgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhp
cyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JW
TSgqbV92bSkpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNlbmRpZiAvLyBF
TkFCTEUoSklUKQotICAgIAotICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCks
IHZtKCktPnRvcENhbGxGcmFtZSk7Ci0gICAgCiAgICAgQVNTRVJUKG1faXNTYWZlVG9Db2xsZWN0
KTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsKICAgICAgICAgZGF0YUxvZygiQ29sbGVj
dGlvbiBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6ICIsIG1fY29sbGVjdGlvblNjb3BlLCAi
XG4iKTsKQEAgLTExMjUsMTUgKzEwNjQsMTIgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQo
KQogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBo
YXNlOjpCZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJr
aW5nKCk7Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCiAgICAgaWYg
KEhhc093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgp
KQogICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3RzKGdjU3Rh
cnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAgIAogICAg
IGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3Rz
KEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTcwLDggKzExMDYsOCBA
QCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsK
LSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25v
dG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2co
KGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRl
ciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXNdXG4iKTsKICAgICB9CiAgICAgCiAgICAg
ewpAQCAtMTE5MywxMCArMTEyOSwzOCBAQCB2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAg
c3RvcFRoZU11dGF0b3IoKTsKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAo
dm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUo
KnRoaXMpOworICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJp
ZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAg
ICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYg
KEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAg
ICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAg
CisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZy
YW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0
dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9j
YXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9
CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1l
QWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlz
IGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0
IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0g
QXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVG
b3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJs
b2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhl
IGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygp
OworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29y
bGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3Bw
ZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0NjYsMTAgKzE0
MzAsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMbwogCiB2b2lk
IEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgq
dGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKLSAgICBkZWxldGVTb3Vy
Y2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAgIHsK
KyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOworICAgICAgICBk
ZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVTb3VyY2VQcm92aWRl
ckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAgICB9CisgICAg
CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVj
dEFzeW5jKCk7CiB9CiAKIEhlYXA6OlRpY2tldCBIZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihPcHRp
b25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQpAQCAtMTU0OSwyMyArMTUxOCw5IEBAIHZvaWQg
SGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndp
bGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQot
CiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xs
ZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVC
YXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0
aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0
ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JN
YXJraW5nKCkKQEAgLTE5NDksNyArMTkwNCw3IEBAIGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0
ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9
PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTk3MSwxMiArMTkyNiw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50
VGhyZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUo
KSAhPSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6
OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24n
dCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVk
IGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBD
b2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQot
ICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNp
emU7CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk4NywxMiArMTkzOCw4IEBAIHZvaWQgSGVh
cDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0
ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5
VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1j
b3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNv
bGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6
OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47
Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBm
b3IgKDs7KSB7CkBAIC0yMDg2LDQgKzIwMzMsMTEgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAg
ICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5
bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRl
ICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5o
IgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1h
cmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJs
ZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7
CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsK
K2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBW
TTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0
U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1h
Y2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3Qg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsg
fQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsgcmV0dXJuICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3Rh
Y2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygp
OwpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQgYWRkRXhlY3V0YWJs
ZShFeGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7
IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xs
ZWN0KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2Fm
ZVRvQ29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hv
dHRpbmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoKICAgICAvLyBjYWxs
IGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNh
dGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRF
eHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0
aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNz
LgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVk
KENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNpemVfdCBleHRlcm5h
bE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAK
QEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAg
ICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxk
U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAg
dm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAg
IApAQCAtNDIyLDMwICs0MjgsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRD
b21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8
Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7
CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9j
YXRpb24oKTsKICAgICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBt
YXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRv
dWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
KTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYp
OwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1i
ZXJlZFNldCgpOwotICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29t
cGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGls
ZXJXb3JrbGlzdEVudHJpZXMoKTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290Vmlz
aXRvciYpOwotICAgIHZvaWQgdmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAg
dm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNp
dEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1By
b2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICB2b2lkIHRyYWNl
Q29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOwotICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxl
cyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KEhlYXBSb290Vmlz
aXRvciYpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7
CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CiAKQEAgLTUxNyw3ICs1MTEsOCBAQCBwcml2YXRlOgog
CiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5lVGhyZWFkczsKICAgICAKLSAgICBTbG90Vmlz
aXRvciBtX3Nsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9j
b2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+
IG1fbXV0YXRvck1hcmtTdGFjazsKIAogICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMg
dXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUg
dG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0
aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCkBAIC01NzEsNyArNTY2
LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9u
IG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVk
TWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRD
b2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBt
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFs
bGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7
IGZhbHNlIH07CkBAIC01OTksNiArNTk1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRh
dG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNp
Z25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVX
b3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgTW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwog
ICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAg
ICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJyYXkoKQogewogfQog
Cit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAgCisgICAgLy8gUmVt
b3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5
U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFkID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7
CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1f
c2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIG90
aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIAorICAgIG90aGVyLm1fc2VnbWVudHMuYXBw
ZW5kKG1fc2VnbWVudHMpOworICAgIAorICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cyArPSBt
X251bWJlck9mU2VnbWVudHM7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzID0gMDsKKyAgICAKKyAg
ICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJhY2sgaW4gdGhlaXIgcGxhY2VzLgorICAgIG1f
c2VnbWVudHMucHVzaChteUhlYWQpOworICAgIG90aGVyLm1fc2VnbWVudHMucHVzaChvdGhlckhl
YWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdt
ZW50cysrOworICAgIAorICAgIHdoaWxlICghaXNFbXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgp
OworICAgICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICAgICAgb3RoZXIuYXBw
ZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQorfQorCiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25h
dGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRv
bmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMuIFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xhc3MgTWFya1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NT
ZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtTdGFja0FycmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0
ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcik7Ci0gICAgdm9pZCBzdGVhbFNvbWVD
ZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsK
KyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNv
bWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20o
TWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDYg
QEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZAogdm9pZCogTWFya2Vk
QWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewog
ICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+aGFzQW55TmV3bHlBbGxvY2F0
ZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwogICAgIAogICAgIEZy
ZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
VG9GcmVlTGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgTWFya2VkQmxv
Y2s6Ok1hcmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJgogICAgICwgbV9oYW5kbGUoaGFuZGxlKQog
ICAgICwgbV92bSgmdm0pCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwogfQogCiB0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlPgpAQCAtMjQxLDI0ICsyNDMsNiBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0
cnVlOwogfQogCi1jbGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0
b3IoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9jaykK
LSAgICB7Ci0gICAgfQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwq
IGNlbGwsIEhlYXBDZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1hcmtl
ZEJsb2NrOjpibG9ja0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAgIG1f
YmxvY2stPnNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogbV9ibG9jazsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9j
YXRpbmcoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAgLTI2
NiwxMiArMjUwLDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBpZiAo
IWlzRnJlZUxpc3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9yIGFs
bG9jYXRpb24gc2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxyZWFk
eSBkb25lIHN0b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxpc3Qu
YWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAg
IGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwgIlxu
Iik7CisgICAgCiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhlYXAg
aW50cm9zcGVjdGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIgZnJl
ZSBsaXN0IGFyZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAgICAg
Ly8gd2F5IHRvIHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI2OCwxNyBA
QCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXdseUFs
bG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgp
LT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3bHlB
bGxvY2F0ZWRGdW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rvcik7
CisgICAgZm9yRWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxs
OjpLaW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxvY2F0
ZWQoY2VsbCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
KyAgICAgICAgfSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0LAog
ICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAi
XG4iKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNE
ZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAgIGNs
ZWFyTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMwMSwxNCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxv
Y2F0aW5nIVxuIik7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykp
OwogICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXdseUFs
bG9jYXRlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRo
ZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5z
IHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9j
YXRpb24uCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICszNTIs
OCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAgICAg
aWYgKGhhbmRsZSgpLmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAgICAg
IHx8ICFtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikpIHsK
KyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMp
LCAiOiBDbGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsKICAg
ICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlzIGFs
cmVhZHkgcmVjb2duaXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9jayBk
aWQgbm90IHN1cnZpdmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsgYml0
cyB0aGUgb2xkIGZhc2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBvc3Np
YmxlIGZvciBzdWNoIGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVwLXRv
LQpAQCAtMzYyLDYgKzM2Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhI
ZWFwVmUKICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAgICBt
X21hcmtzLmNsZWFyQWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4iKTsK
ICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+bmV3
bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxsb2Nh
dGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8vIE1l
cmdlIHRoZSBjb250ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2UgZ2V0
IHRoZSBmdWxsIHNldCBvZiBiaXRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yTWFya2luZygpCiAKIHZvaWQgTWFya2VkU3Bh
Y2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewotICAgIEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAg
ICBmb3JFYWNoQWxsb2NhdG9yKAogICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFs
bG9jYXRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdv
cmxkU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1
bWVUaGVXb3JsZFNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2
b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZp
c2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1fc3RhY2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQo
MCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAg
LCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAs
IG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyAr
ODksNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0
b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgY2xlYXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1h
cmtTdGFja3MoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAg
LTEwOSwxNiArMTA3LDE3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAK
IHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFx
dWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29w
aWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRl
ciA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0
YWNrKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFj
ay5jbGVhcigpOworICAgIG1fY29sbGVjdG9yU3RhY2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JT
dGFjay5jbGVhcigpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZl
Um9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpO
ZXdHcmV5KTsKKyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsK
IAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOwogICAgICAgICByZXR1cm47CkBA
IC0yMTAsNyArMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJr
ZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAg
IC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBn
cmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246
IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJl
bWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dy
ZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAg
IGFwcGVuZFRvTWFya1N0YWNrKGNvbnRhaW5lciwgY2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywx
OSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwt
PmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
Ok5ld0dyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAg
ICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAg
ICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVz
dCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBh
bnl0aGluZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2Ug
ZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRl
ZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKICAgICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxs
KTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBtX211dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKQEAgLTI5NCwxMiArMjk2LDEwIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50
Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xk
Q2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7Ci0gICAgCi0gICAgLy8gVGhlcmUgaXMgbm8g
cmFjZSBoZXJlIC0gdGhlIGNlbGwgc3RhdGUgY2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkg
b2JqZWN0cyBjYW4gb25seSBiZQotICAgIC8vIHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFk
LiBOZWl0aGVyIHRoZSBiYXJyaWVyIG5vciBtYXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBv
ZiBhbgotICAgIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9v
bGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENl
bGxTdGF0ZTo6TmV3R3JleSk7CisgICAgLy8gRnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9y
IHRoZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxyZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0
IGF0CisgICAgLy8gYWJvdXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3Mg
ZmluZS4gSXQncyBhIGduYXJseSBhbmQgc3VwZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90
IGNsZWFyIHRvIG1lIHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJh
aWwgaGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAg
ICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAg
CkBAIC0zMjYsMjMgKzMyNiwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZp
c2l0Q2hpCiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxk
ZXIpKSB7Ci0gICAgICAgIGlmIChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkp
CisgICAgICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9o
ZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkp
OwogICAgIH0KIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2
b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9t
LCBNYXJrU3RhY2tBcnJheSYgdG8pCiB7CiAgICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkg
b2Z0ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUgY29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1
bWUgdGhhdCBkb25hdGluZyBpcyBub3QgcHJvZml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tp
bmcgd2hlbiBhIHRocmVhZCByZWFjaGVzIGEgZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4K
LSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3
b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRv
bmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjay5zaXplKCkpCisgICAgaWYgKHRvLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFu
ZCBhc3N1bWUgdGhhdCBhbm90aGVyCkBAIC0zNTIsMjYgKzM1Miw0MyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3Ro
ZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0
ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFj
ayk7CisgICAgZnJvbS5kb25hdGVTb21lQ2VsbHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAg
IGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENv
bGxlY3Rvck1hcmtTdGFjayk7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFj
aywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNp
dG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBh
cmFsbGVsTW9kZSk7CiAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0g
T3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2su
Y2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRy
ZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOworICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2su
aXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRp
bWVvdXQpKSB7CisgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlz
aXRpbmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291
bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7
IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAg
ICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsK
KyAgICAgICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9y
IHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVy
LCBub3QgYmVjYXVzZSBvZgorICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZp
c2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAg
ICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2Fz
IGFscmVhZHkgbWFya2VkLgorICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0g
dHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWlu
aW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJl
bW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJl
bihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0
ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAgICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVj
ZXNzYXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWRE
cmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQorU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0
IFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWlu
TW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxl
bE1vZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0MDksNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJh
aW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVy
IHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9yIHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAg
ICAgICAgICAgICAgIC8vIGZvciB1cyB0byBkby4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7Cisg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2gg
dGVybWluYXRpb24/CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYm
IG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVz
IGtub3cgaXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBi
ZSBkb25lPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9o
ZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIg
a25vdy4KICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFj
ay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5t
X3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAg
ICAgICAgICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLndhaXRVbnRpbCgKKyAgICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91
dCwKICAgICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRN
dXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVu
dCBwaGFzZSBkb25lPyBJZiBzbywgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAg
ICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJh
aW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3Rl
YWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFj
aywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAg
IG1fY29sbGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICpt
X2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVD
ZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0K
IH0KIApAQCAtNDUzLDcgKzQ4Miw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qo
dm9pZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290
KSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQo
bV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290
cy5jb250YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs0OTUsNiBAQCBUcmlTdGF0ZSBTbG90
VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9
CiAKLWludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1f
aXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsK
LSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RW
aXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1
ZVJvb3RzLmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTE4LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihN
b25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAg
ICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290
cygpCiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBv
bmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRl
eCk7CiAgICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAg
KzU0Niw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAg
ICAgbV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKLSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAg
ICBkYXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBv
aW50ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9p
bnRlckxpc3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlw
ZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0Lmgi
CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNs
b3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4g
bV9zdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0
YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBt
dXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBN
YXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xs
ZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNr
KCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsK
ICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04
NCwyNCArODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3Bh
cXVlUm9vdCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1
ZVJvb3Qodm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0
YXRlKHZvaWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29s
IGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJl
c2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3Rh
Y2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRl
c1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zp
c2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAg
IHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGlt
ZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJh
aW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAg
ICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9
OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBj
bGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJh
aW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RX
ZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVy
cygpOwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAg
IHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9p
ZCBhcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAg
dm9pZCBhcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAg
dm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVl
Um9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJs
ZSgpOwogCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAg
IHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxl
bChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtT
dGFja0FycmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsK
KyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1f
b3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxl
IHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0
ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsK
ICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBw
cml2YXRlOgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVy
IHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAg
ICBDZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9p
ZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5y
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICgh
bV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGlu
ZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNp
emUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxs
U3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAg
ICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjgsNyArMjI2OCw3IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmpl
Y3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkp
OwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBy
ZXN1bHQpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1bHQpOwogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjc4LDcgKzIyNzgs
NyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAgICBvYmplY3QtPnNldEJ1
dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcg
KzEwMDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFu
ZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBz
dG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNj
b3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9j
b2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0g
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJ
bmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJbml0aWFs
aXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRv
IGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0
byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgICAgIGVt
aXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJh
bmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5z
dHJ1Y3Rpb25bNV0pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1
ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAg
ICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTE1
NywxMSArMTE1NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3Ry
CiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAotICAgIGVt
aXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAg
IAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVnVDEsIEFk
ZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBz
aXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihh
cmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAvLyBVU0Uo
SlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0xv
Y2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4
MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgotc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBFOwot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAw
Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgPSAw
eDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgwRTsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAgICAg
ICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAg
ICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAg
ICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3Jh
Z2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3Owog
CiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlw
ZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRo
ZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNj
ZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxkIG9m
IEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgyLDYg
QEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBvZiBh
bGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwgTWF5
SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGluZ1R5
cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+IElu
ZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODQxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
aW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVycmVk
IGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMgdGhl
IGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQgd2ls
bCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqdGhpcyk7
CiAgICAgCiAgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3Vu
dCkgewogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAt
PSBjb3VudDsKICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCAr
IGNvdW50KTsKLSAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZy
b250ICYmIHZlY3Rvckxlbmd0aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9
IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNo
aWZ0Q291bnRTbG93Q2FzZSh2bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkw
LDYgKzEwOTQsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9y
W2kgKyBzdGFydEluZGV4XS5jbGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMCw4ICsxMDAsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0
OwogICAgIGJvb2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBp
c0FQSVZhbHVlV3JhcHBlcigpIGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBi
dWlsdC1pbiBsb2NrLiBDdXJyZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYg
eW91IG5lZWQgaXQuIEl0J3MKKyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRo
YXQgdGhpcyBsb2NrIGlzIGN1cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydz
CisgICAgLy8gb3JkZXJpbmcgd2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3Ry
dWN0dXJlIGxvY2sgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2soKTsKKyAg
ICB2b2lkIHVubG9jaygpOwogCiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0OwogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
OwpAQCAtMTY3LDYgKzE3NCwxNiBAQCBwdWJsaWM6CiAgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CiAgICAgCiAgICAgdm9pZCBzZXRDZWxsU3Rh
dGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9j
ZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisgICAgYm9vbCBhdG9taWNDb21wYXJlRXhjaGFuZ2VD
ZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtS
ZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CisKKyAgICBD
ZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZSBv
bGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0
YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkK
ICAgICB7CkBAIC0xODMsOSArMjAwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTQ2VsbCwgbV90eXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlND
ZWxsLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlND
ZWxsLCBtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZm
X3QgY2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIyOCw3ICsyNDUsNyBAQCBwcml2YXRlOgogICAgIGZy
aWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBTdHJ1Y3R1cmVJRCBtX3N0
cnVjdHVyZUlEOwotICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKKyAgICBJbmRleGlu
Z1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNjOwogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlw
ZUluZm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgSlND
ZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlubGluZSBKU0NlbGw6OkpTQ2VsbChW
TSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9zdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUt
PmlkKCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQor
ICAgICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkp
CiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSkK
ICAgICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCkBAIC03NCw3ICs3NCw3IEBA
IGlubGluZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBpZiAoc3RydWN0
dXJlKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsK
LSAgICAgICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAg
ICAgICBtX2luZGV4aW5nVHlwZUFuZE1pc2MgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKTsKICAgICAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKTsKICAgICAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBl
RmxhZ3MoKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKQEAgLTkxLDkgKzkxLDE0IEBAIGlu
bGluZSBKU1R5cGUgSlNDZWxsOjp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQog
CitpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKK30KKwogaW5saW5lIEluZGV4
aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW5k
ZXhpbmdUeXBlOworICAgIHJldHVybiBpbmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7CiB9
CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTIwMSwx
MSArMjA2LDEyIEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwKICAg
ICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpCiAgICAgICAgIHx8IHRoaXMtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8
IEhlYXA6OmhlYXAodGhpcyktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlLT5pZCgp
KSA9PSBzdHJ1Y3R1cmUpOwotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVy
ZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3Ry
dWN0dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCk7CiAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsK
LSAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgbV9p
bmRleGluZ1R5cGVBbmRNaXNjID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KCk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0KIAog
aW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKQEAg
LTI4NCwxMSArMjkwLDI2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3IoVk0m
IHYKICAgICBpZiAoaXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChzdHJ1
Y3R1cmVJRCgpKTsKLSAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9y
dGFsKQotICAgICAgICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVz
dHJveSh0aGlzKTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0
cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0
dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0
ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0
cm95KHRoaXMpOworICAgIH0gZWxzZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVPYmpl
Y3QqPih0aGlzKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAgICAg
emFwKCk7CiB9CiAKK2lubGluZSB2b2lkIEpTQ2VsbDo6bG9jaygpCit7CisgICAgQXRvbWljPElu
ZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigm
bV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjps
b2NrKCpsb2NrKTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxvY2soKQoreworICAgIEF0
b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGluZ1R5
cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0FsZ29y
aXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw5ICsxMTksMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcgogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICBsb2NrKCk7CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCkKICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgIHVubG9jaygpOwogICAgICAgICBicmVh
azsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTE0NiwxMCArMTQ4LDQ0IEBAIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJm
bHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZs
eSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwotCisgICAgLy8gVGhlIG11
dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0cnVjdHVyZSBsYXN0LiBXZSdyZSBPSyB3aXRoIHNlZWlu
ZyBhbiBvbGQgc3RydWN0dXJlIGFuZCBuZXcKKyAgICAvLyBidXR0ZXJmbHksIGJ1dCBub3QgdGhl
IG90aGVyIHdheSBhcm91bmQuIExldCdzIGJyZWFrIHRoaXMgZG93biEKKyAgICAvLworICAgIC8v
IENTOiBsb2FkIHN0cnVjdHVyZQorICAgIC8vIENCOiBsb2FkIGJ1dHRlcmZseQorICAgIC8vIAor
ICAgIC8vIE1COiBzdG9yZSBidXR0ZXJmbHkKKyAgICAvLyBNUzogc3RvcmUgc3RydWN0dXJlCisg
ICAgLy8gCisgICAgLy8gVGhlIHJ1bGVzIGFyZTogSXQncyBPSyB0byBzZWUgYSBuZXcgYnV0dGVy
Zmx5IGJ1dCBhbiBvbGQgc3RydWN0dXJlLiBJdCdzIHdyb25nIHRvIHNlZSBhbiBvbGQKKyAgICAv
LyBidXR0ZXJmbHkgYW5kIGEgbmV3IHN0cnVjdHVyZS4KKyAgICAvLyAKKyAgICAvLyBIZXJlIGFy
ZSBhbGwgcG9zc2libGUgaW50ZXJsZWF2aW5nczoKKyAgICAvLyAKKyAgICAvLyBNQiBDUyBDQiBN
UzogQ29sbGVjdG9yIHNlZXMgbmV3IGJ1dHRlcmZseSBhbmQgb2xkIHN0cnVjdHVyZS4gCisgICAg
Ly8gTUIgQ1MgTVMgQ0I6IENvbGxlY3RvciBzZWVzIG5ldyBidXR0ZXJmbHkgYW5kIG9sZCBzdHJ1
Y3R1cmUuCisgICAgLy8gTUIgTVMgQ0IgQ1M6IENvbGxlY3RvciBzZWVzIG5ldyBzdHJ1Y3R1cmUg
YW5kIGJ1dHRlcmZseS4KKyAgICAvLyBDUyBNQiBNUyBDQjogQ29sbGVjdG9yIHNlZXMgbmV3IGJ1
dHRlcmZseSBhbmQgb2xkIHN0cnVjdHVyZS4KKyAgICAvLyBDUyBNQiBDQiBNUzogQ29sbGVjdG9y
IHNlZXMgbmV3IGJ1dHRlcmZseSBhbmQgb2xkIHN0cnVjdHVyZS4KKyAgICAvLyBDUyBDQiBNQiBN
UzogQ29sbGVjdG9yIHNlZXMgb2xkIHN0cnVjdHVyZSBhbmQgYnV0dGVyZmx5LgorICAgIC8vCisg
ICAgLy8gU28sIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBvYmV5IHRoaXMgb3Jk
ZXIgYW5kIGV2ZXJ5dGhpbmcgaXMgZmluZS4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRo
aXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOworICAgIAorICAgIFdURjo6Y29tcGls
ZXJGZW5jZSgpOyAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsb2FkLWxvYWQgZmVuY2UgYnV0IHRoZSBj
b21waWxlciBtaWdodCBub3Qgc2VlIGl0IHdpdGhvdXQgaGVscC4KKyAgICAKKyAgICBib29sIHdh
c0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0
aW9uYXJ5KSB7CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSkgeworICAgICAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5sb2NrKCkpOworICAg
ICAgICAgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJm
bHkuZ2V0KCkpCisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlz
aXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0KCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBi
dXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtMjA1LDYgKzI0MSwxMCBA
QCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgSlNDZWxsOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKKyAgICBXVEY6OmNv
bXBpbGVGZW5jZSgpOyAvLyBXaGF0IGZvbGxvd3MgaXMgYSBsb2FkIGxvYWQgZmVuY2UsIGJ1dCB0
aGUgY29tcGlsZXIgbWlnaHQgbm90IHNlZSBpdCB3aXRob3V0IGhlbHAuCisgICAgYm9vbCB3YXNE
aWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlv
bmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOwogICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7CiAgICAgaWYgKGJ1dHRlcmZseSkK
ICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBz
dHJ1Y3R1cmUpOwpAQCAtMjEyLDcgKzI1Miw5IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGlu
ZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwotCisg
ICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLnVubG9jaygp
OworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKICNlbmRpZgpAQCAtMTAwNSw2ICsxMDQ3LDExIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRDb250aWd1b3UKICAgICAgICAgICAgIG5ld1N0b3JhZ2UtPm1fbnVtVmFsdWVzSW5W
ZWN0b3IrKzsKICAgICB9CiAgICAgCisgICAgLy8gRklYTUU6CisgICAgLy8gMSkgSW5zdGFsbCB0
aGUgbmV3IGJ1dHRlcmZseSB3aXRoIHRoZSBsZW5ndGhzIGFydGlmaWNpYWxseSBzZXQgdG8gemVy
by4KKyAgICAvLyAyKSBDaGFuZ2UgdGhlIHN0cnVjdHVyZS4KKyAgICAvLyAzKSBTZXQgdGhlIGxl
bmd0aHMgdG8gc29tZXRoaW5nIHJlYWwuCisgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
dHJhbnNpdGlvbik7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKQEAg
LTI3NjIsNiArMjgwOSw3IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZt
LCAKICAgICAKICAgICB1bnNpZ25lZCBhdmFpbGFibGVPbGRMZW5ndGggPQogICAgICAgICBCdXR0
ZXJmbHk6OmF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwg
b2xkVmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG51bGxwdHI7
CiAgICAgaWYgKGF2YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgY2FzZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0b3IgbGVuZ3Ro
IHRoYXQgY2F1c2VkIGludGVybmFsCiAgICAgICAgIC8vIGZyYWdtZW50YXRpb24uIElmIHdlIGRp
ZCBvdXIgam9icyByaWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJIGJldCB3ZSB3
aWxsIG1lc3MKQEAgLTI3NzYsMTEgKzI4MjQsOSBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5n
dGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsK
KyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFzRG91Ymxl
KGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JM
ZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKQEAgLTI3ODksNiArMjgzNSwxNSBAQCBib29s
IEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBidXR0ZXJm
bHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIH0KIAorICAgIGlmIChuZXdCdXR0ZXJm
bHkpIHsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9idXR0ZXJmbHku
c2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI4MDIs
OSArMjg1NywxMCBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgp
LCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0
KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhp
cywgbmV3QnV0dGVyZmx5KTsKIH0KIAogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGlu
ZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwODQxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc0OCwxMCArNzQ4LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVpZnlBbGxTdGF0aWNQ
cm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5
KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6
ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoVk0mLCBC
dXR0ZXJmbHkqKTsKICAgICAgICAgCisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJm
bHkqKTsgLy8gQWx3YXlzIGNoYW5nZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUg
c3RydWN0dXJlIQogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAg
dm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkq
KTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYp
OwogCkBAIC0xMjA1LDE0ICsxMjA0LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzV2l0aFNj
b3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlwZTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLXsKLSAgICBBU1NFUlQoc3Ry
dWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0aGlzKSkpOwotICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKLSAgICBzZXRTdHJ1Y3R1cmUo
dm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKTsK
QEAgLTEyMjAsNyArMTIxMSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmUo
Vk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShW
TSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1
dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIG1fYnV0dGVyZmx5
LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTE0MTcsMTYgKzE0MDgsMTkgQEAgQUxX
QVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgICAgICBpZiAoKG1vZGUg
PT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKHRo
aXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAg
ICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3Ry
dWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+
c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVj
dHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAg
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CisgICAgICAgICAgICAg
ICAgaWYgKHRoaXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkg
eworICAgICAgICAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVj
dHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0g
ICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
LSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgc2xvdC5zZXRO
ZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQ
cm9wZXJ0aWVzKCk7CkBAIC0xNDUwLDggKzE0NDQsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OnB1dERpcmVjdEluCiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE0OTgsMTMgKzE0OTMsMTIgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHNpemVfdCBvbGRDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBzaXplX3QgbmV3Q2FwYWNp
dHkgPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgQVNTRVJUKG9sZENh
cGFjaXR5IDw9IG5ld0NhcGFjaXR5KTsKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNp
dHkpCi0gICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKLSAgICBlbHNlIHsK
KyAgICBpZiAob2xkQ2FwYWNpdHkgIT0gbmV3Q2FwYWNpdHkpIHsKICAgICAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5l
d0NhcGFjaXR5KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVy
Zmx5KTsKICAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRT
dHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIG5ld1N0
cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE1NTgsMTMgKzE1
NTIsMTYgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIGlm
IChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5l
d0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VD
YXBhY2l0eSgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgp
OwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAoYXR0
cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9u
bHlQcm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOwotICAgIHN0
cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKKyAgICBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisgICAg
ICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgIFsmXSAoY29uc3QgR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBib29sIHNo
b3VsZE9wdGltaXplID0gZmFsc2U7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZh
bHVlRm9yTmV3VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgfSk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNPYmplY3QqIFJlZ2lzdGVyOjpvYmplY3QoKSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODQsNiArMTg0LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgY29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWws
IG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJh
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRv
IGhhdmUgYSBsb2NrIGluIGl0LgogY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1
YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4NCwyNyArNzg0LDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQ
aW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBwaW4oKTsKLQotICAgIHJldHVybiBhZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAgcGluKCk7Ci0g
ICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOwotfQotCiB2b2lkIFN0cnVjdHVyZTo6cGlu
KCkKIHsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKQEAgLTk4OSw0OSArOTY4LDEyIEBA
IFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQo
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAg
aWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAg
ICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNl
KTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwotCi0g
ICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0
KG1faW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlN
YXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFBy
b3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgYXV0
byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5k
X2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAgaWYg
KCFwb3NpdGlvbi5maXJzdCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAgcHJv
cGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+YWRk
RGVsZXRlZE9mZnNldChvZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJl
dHVybiBvZmZzZXQ7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3Ry
dWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2Vy
JiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKQEAgLTExMTQsNiArMTA1Niw5IEBAIHZvaWQg
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAgICAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNPYmplY3Qo
KSkKICAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5jbGVhcigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsOSArMTkxLDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAg
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3Bl
cnR5TmFtZSk7CisgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiBWZXJz
aW9ucyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBpdCBqdXN0IGJlZm9yZQorICAgIC8vIGNv
bW1pdGluZyB0byBtYWtlIHRoZSBjaGFuZ2UuIFRoZSBjYWxsYmFjayBpcyBub3QgY2FsbGVkIGlm
IHRoZXJlIGlzIG5vIGNoYW5nZSBiZWluZyBtYWRlLAorICAgIC8vIGxpa2UgaWYgeW91IGNhbGwg
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90
IGZvdW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQg
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRy
YW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0s
IHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBj
b25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQpA
QCAtMjMwLDcgKzIzNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyBy
ZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAKICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpICYgQWxsQXJyYXlU
eXBlczsgfQotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpOyB9CisgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOyB9CiAgICAgICAgIAogICAgIGJvb2wgbWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKICAgICB7CkBAIC00MzMsOSArNDM3LDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFz
c0luZm8pOwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5
cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7Cisg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0
dXJlSURCbG9iOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQog
ICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCkBA
IC01NzksNiArNTgzLDggQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1bXBDb250
ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAgICAgCisgICAgQ29uY3VycmVudEpJVExvY2smIGxv
Y2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
CiBwcml2YXRlOgpAQCAtNjMzLDcgKzYzOSwxMSBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0
aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0g
bnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zm
c2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVu
YyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZz
ZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKICAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0g
MCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
REJsb2IuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsKICAgICB9CiAKLSAg
ICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBTdHJ1Y3R1cmVJREJs
b2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewogICAgICAgICB1
LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1LmZpZWxkcy5pbmRl
eGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICB1
LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVU
eXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAgICAgdS5maWVsZHMu
ZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVy
KSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAgIAogICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7
IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gdS5maWVs
ZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7IH0K
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lk
IHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZs
YWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlubGluZVR5cGVG
bGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0cnVjdHVyZUlEKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZp
ZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
IFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6
SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAgIENlbGxTdGF0ZSBk
ZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTEsNCArMzExLDgwIEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcK
ICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2
YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMp
Cit7CisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFw
KTsKKyAgICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5
TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAm
IERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byBy
ZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAg
ICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7CisKKyAgICBQcm9wZXJ0eU9mZnNl
dCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0
eSk7CisgICAgCisgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCk7CisKKyAgICBwcm9wZXJ0eVRh
YmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwg
bV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICAK
KyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBp
ZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisKKyAg
ICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgp
LT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGlu
dmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24u
Zmlyc3QtPm9mZnNldDsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworCisgICAgcHJvcGVy
dHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVs
ZXRlZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVy
biBvZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYg
ZnVuYykKK3sKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CisgICAgCisgICAg
cGluKCk7CisKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1
bmMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRl
ZmVyR0MpOworCisgICAgcGluKCk7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1
bmMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBA
QAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0Mx
MDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJ
CTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FC
NTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0Yg
LyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVm
Q291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZB
NTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4
RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5o
ICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RE
RDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMw
MEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNo
TWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAK
IAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkw
RkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZG
RkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMg
LyogTG9ja0FsZ29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBM
b2NrZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3Vt
dWxhdG9yLmggKi8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQu
Y3BwICovLApAQCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIz
RkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0
aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJy
ZW50VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8q
IERhdGFMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAv
KiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5n
ZS5oCiAgICAgTGlzdEhhc2hTZXQuaAogICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAog
ICAgIExvY2tlci5oCiAgICAgTUQ1LmgKICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAu
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlz
dER1bXBJbkNvbnRleAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7
Ci11c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4
dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNp
bmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5n
IFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xv
Y2suY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTE2ICszMCwyMiBAQAogI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIK
ICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgogI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1p
dGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJlYWQ+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNl
Ojpsb2NrU2xvdygpCit2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQg
c3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBi
ZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3Qg
dW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1
aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBs
b2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdl
IGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVW
YWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQg
YW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJv
dW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBz
cGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAg
ICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRp
bmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5k
Ci0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBh
dCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2Vk
Qml0KQotICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRC
eXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNI
ZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgot
ICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAg
UGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2Vk
Qml0KTsKLSAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAg
ICAgICBjYXNlIERpcmVjdEhhbmRvZmY6Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2Fz
IG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJl
YWQgdGhhdCBkaWQKLSAgICAgICAgICAgICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdy
ZSBkb25lIQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToK
LSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0
aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVsZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAg
ICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bw
b3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIg
dGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJv
dW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFy
a2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAot
ICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tB
bGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Ns
b3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdv
cml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsK
IH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2NrRmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xv
d0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93
SW1wbChGYWlybmVzcyBmYWlybmVzcykKLXsKLSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNh
dXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVz
ZSB0aGVyZSBpcwotICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29w
OiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAg
Ly8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFz
IHdlIGFyZSB1bmxvY2tpbmcuCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5
dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVW
YWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xkQnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJr
ZWRCaXQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0
KSB7Ci0gICAgICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0
LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBv
bmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAv
LyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBh
cyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5s
b2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNl
IHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgot
ICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwK
LSAgICAgICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50
cHRyX3QgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2Fu
IGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAg
ICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5v
dy4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwg
aGFzUGFya2VkQml0KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVU
b0JlRmFpcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRo
aW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAg
ICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IERpcmVjdEhhbmRvZmY7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5z
dG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbV9ieXRlLnN0b3JlKDApOwotICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bw
b3J0dW5pdHk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBE
ZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3Jp
dGhtOjpGYWlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDgg
KzI2LDcgQEAKICNpZm5kZWYgV1RGX0xvY2tfaAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0zNyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVj
dG9yOwogCiBuYW1lc3BhY2UgV1RGIHsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3Qs
IDEsIDI+IERlZmF1bHRMb2NrQWxnb3JpdGhtOworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRp
dmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFz
dCBwYXRocyB0aGF0IGFyZQogLy8gY29tcGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5k
ZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24g
aXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRo
IHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gc3RkOjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyAr
NTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9j
aygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAg
ICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29y
aXRobTo6bG9ja0Zhc3QobV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0K
IAogICAgIGJvb2wgdHJ5TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
ICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1
cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9j
a0FsZ29yaXRobTo6dHJ5TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2
ZXJzaW9uIGZvciBzdGQ6OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExv
Y2tCYXNlIHsKICAgICAvLyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBh
bHdheXMgZ2V0IGEgZmFpciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAg
IGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQg
YW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9j
a0FsZ29yaXRobTo6dW5sb2NrRmFzdChtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3co
KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRl
ZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAg
LTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZv
aWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkp
IHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNs
b3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
RmFzdChtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsKICAgICB9CiAK
ICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgICAgIHJldHVy
biBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAgICB9CiAKICAgICBi
b29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHByb3RlY3RlZDoKICAg
ICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwogICAgIHN0YXRpYyBj
b25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9j
a1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tGYWlybHlTbG93KCk7
Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0gICAgICAgIFVuZmFp
cgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7Ci0gICAgCi0gICAg
ZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAgICAgICAgRGlyZWN0
SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVzdGluZyBvbmx5Lgog
ICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tB
bGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRobV9oCisjZGVmaW5l
IFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYv
QXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CisjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgdGhlIGFsZ29y
aXRobSB1c2VkIGJ5IFdURjo6TG9jay4KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExv
Y2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0PgorY2xhc3MgTG9ja0FsZ29y
aXRobSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7
CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBz
dGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
bG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFsb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICBsb2NrU2xvdyhsb2NrKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgdHJ5TG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAg
IHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZh
bHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlz
SGVsZEJpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
bG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hl
bGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93
KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHVubG9ja0ZhaXJs
eShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF1
bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgRmFpcik7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0IEF0b21pYzxMb2NrVHlw
ZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUg
c3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8gVGhpcyBtYWdpYyBudW1i
ZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmlt
ZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisgICAg
ICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxv
Y2subG9hZCgpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50
Qnl0ZVZhbHVlLCAiXG4iKSk7CisKKyAgICAgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0
byBiYXJnZSBpbi4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRC
aXQpCisgICAgICAgICAgICAgICAgJiYgbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRC
eXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQg
d2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQu
CisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBz
cGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAg
ICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOZWVkIHRvIHBhcmsu
IFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFy
a2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdh
c24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICAgICAgaWYgKCEo
Y3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAgICAgICAmJiAhbG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBoYXNQYXJrZWRCaXQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBs
b25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCisgICAgICAgICAgICBQYXJraW5n
TG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQorICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6
OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAg
ICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sg
d2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0
aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVh
bnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2Nr
ZWQobG9jaykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Y2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxl
YXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3
b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9j
ay4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBz
byB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQg
YmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAg
ICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAgICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAg
fTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxk
IGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91
c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisgICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywg
d2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhl
bGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0
dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCB8fCBvbGRC
eXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7CisgICAgICAgICAgICAgICAg
aWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDApKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFNvbWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUg
dGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0byB0aGF0IHRocmVhZAorICAgICAgICAgICAg
Ly8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUg
YXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBiYXJnaW5nLgorICAgICAgICAgICAgLy8gV2hlbiB3
ZSB1bmxvY2ssIHdlIG1heSBsZWF2ZSB0aGUgcGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBj
aGFuY2UgdGhhdCB0aGVyZSBhcmUgc3RpbGwKKyAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMg
cGFya2VkLgorICAgICAgICAgICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwg
aGFzUGFya2VkQml0KSk7CisgICAgICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCisgICAg
ICAgICAgICAgICAgJmxvY2ssCisgICAgICAgICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBh
cmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9y
IHRoZSBoYXNQYXJrZWRCaXQsCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBz
dGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChsb2NrLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFk
ICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQsIHdl
IGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdhcworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RI
YW5kb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nr
LnN0b3JlKGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2suc3RvcmUoMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBCYXJnaW5nT3Bwb3J0dW5pdHk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGVudW0gVG9rZW4g
eworICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCisgICAgICAgIERpcmVjdEhhbmRvZmYKKyAg
ICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TG9ja0FsZ29yaXRo
bTsKKworI2VuZGlmIC8vIFdURl9Mb2NrQWxnb3JpdGhtX2gKKwpJbmRleDogU291cmNlL1dURi93
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBT
b3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAiQ29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiTG9j
ay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1
ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChmYWtlTG9jaywgdGltZSk7CiB9CiAK
K2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWUpCit7
CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisgICAgaWYgKCEodGltZSA+IHRpbWUud2l0aFNh
bWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
c3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdGltZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xv
Y2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIApJbmRleDogU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9X
VEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
OCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKGNv
bnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9v
bCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOworCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7Cit1c2lu
ZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6OnNsZWVwOwogCiAjZW5kaWYgLy8gV1RGX1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294172</attachid>
            <date>2016-11-08 11:49:59 -0800</date>
            <delta_ts>2016-11-08 15:03:59 -0800</delta_ts>
            <desc>implementing more of JSObject thread safety</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>159655</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltJbmNyZW1lbnQ6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVh
cCYgbV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJn
ZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpA
QCAtMjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0
b3IoKnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBt
X2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2pp
dFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAt
MjY2LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE2ICs0NzEsMTYxIEBAIHZvaWQgSGVhcDo6Y29t
cGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5z
dGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92
bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAg
VGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMi
KTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVn
aW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxv
Y2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUg
U2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAg
ICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQg
aXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3Jl
IHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sg
aXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigK
LSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNp
dG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5l
d1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAg
ICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3
VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3Vmlz
aXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5h
cHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFs
bGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0
YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwot
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1
cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsK
KyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5p
dGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9m
TG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7
IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9w
cGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAg
ICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAg
ICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBi
YXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAg
ICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhj
ZXB0aW9uKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRo
aXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2Nr
cyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdl
IG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sK
LSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVl
ZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2
aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsg
cmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVw
ZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBl
bnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8v
IHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQg
KmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25v
dyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNl
IHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8g
dGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhl
IGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAv
LyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nl
c3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAg
Ly8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAg
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3Vs
dCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7
CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYy
LDcgKzYzOSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAog
dm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVh
ZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1f
Y29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1h
cmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpG
dWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigp
OworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAg
ICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNw
YWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NzMsMjIgQEAgdm9pZCBIZWFwOjpiZWdp
bk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJl
ZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6
OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMp
OwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29u
c2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lk
IEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzYxLDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwg
bV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9u
KCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJv
bmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsK
LSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAg
QVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZv
aWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewot
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOwor
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0
Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAg
ICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29r
ICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpA
QCAtODI3LDE5ICs3NzIsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlz
aXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRC
eXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxC
eXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0g
ICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VS
VChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwpAQCAtOTc3LDE0ICs5MjUsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
Y2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29u
Y3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlz
IHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2Ft
ZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwor
ICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8g
RHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3Qg
dGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5p
ZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVj
dCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0
IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8v
IHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5
IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1
cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVu
IHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBh
Z2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0
aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9p
ZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDM3LDE0IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJs
ZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2bSgpLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAg
ICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hp
bGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5j
b21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAg
fQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigp
LnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9p
c1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBk
YXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xs
ZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEyNSwxNSArMTA2NCwxMiBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhl
YXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAg
Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAg
cHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAg
ICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Q
cm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogICAgICAgICAKLSAgICBt
YXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsK
ICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0
aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTEx
NzAsOCArMTEwNiw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICB9CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFmdGVyID0gY3Vy
cmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1zXVxuIik7
CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcywg
Y3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtc11cbiIpOwogICAg
IH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMTI5LDM4IEBAIHZvaWQgSGVhcDo6c3RvcFRo
ZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxlclRocmVh
ZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1
ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0KKyAgICAKKyNpZiBF
TkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0o
Km1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2
bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7
CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7CisgICAgbV9vYmplY3RT
cGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7CisgICAgLy8g
Q2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRlcGVuZGluZyBv
biB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlvbiBjeWNsZSBv
ciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxlY3Rpb24gY3lj
bGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBhIG5vLW9wIGJl
Y2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQorICAgIC8vICAg
bGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBjeWNsZTogaXQg
cmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RTcGFjZS5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpA
QCAtMTQ2NiwxMCArMTQzMCwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNv
bnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhl
bHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwot
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRp
b25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhp
cyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0
ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygp
OworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQor
ICAgICAgICBjb2xsZWN0QXN5bmMoKTsKIH0KIAogSGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RD
b2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xNTQ5LDIzICsx
NTE4LDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAg
ICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xk
VGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewot
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAg
ICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVh
cDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVh
cDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk0OSw3ICsxOTA0LDcgQEAgYm9vbCBIZWFwOjpj
YW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0Nv
bGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkg
fHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11
dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsxOTI2LDggQEAgYm9vbCBI
ZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8
IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6
ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhh
dCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rp
b25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3Rh
dGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZt
X2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3LDEyICsxOTM4
LDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQg
aW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5
U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwODYsNCArMjAzMywxMSBAQCB2b2lkIEhlYXA6
OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2
b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1NhZmVUb0NvbGxl
Y3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAg
ICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNlbGxTdGF0
ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlU
aW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGljOgogICAgIE1hcmtl
ZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNo
aW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9
CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkg
eyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYg
bXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJh
Y2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rp
dml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7CiAgICAgdm9p
ZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGlj
OgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUg
bWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBB
UEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lk
ZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXpl
OyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9w
VGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3Mg
UmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29w
ZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVN
dXRhdG9yKCk7CiAgICAgCkBAIC00MjIsMzAgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVj
dGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAg
dm9pZCBzdG9wQWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAg
ICAKLSAgICB2b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwog
ICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJl
bW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZl
cnMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE3LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3MSw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
OCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmCiAgICAgLCBtX2hh
bmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CiB9CiAKIHRlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+CkBAIC0yNDEsMjQgKzI0
Myw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lz
RnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5
QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBt
X2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0
b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygp
KTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYg
KGZhbHNlKQpAQCAtMjY2LDEyICsyNTAsMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMp
KTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2Nr
IGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21l
b25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFT
U0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIs
IGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBz
dGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRl
ZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVk
IGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3
OSwxMiArMjY4LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZl
cnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAK
LSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNo
Q2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBz
ZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAg
ICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAg
IGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1Bv
aW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwog
ICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzAxLDE0
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0Fs
bG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAo
IWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAg
ICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAg
IC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdl
IHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpA
QCAtMzU0LDYgKzM1Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFw
VmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5k
bGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtp
bmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcg
ZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMg
ZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAg
ICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4g
Y2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0
aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVk
IHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzYyLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0
ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5n
IHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2Nh
dGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAog
dm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRl
cmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxs
b2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1
LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RW
aXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQotICAgIDogbV9zdGFjaygpCi0gICAgLCBt
X2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRlc0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNp
b24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
KQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygp
OworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFy
dE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwot
ICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkK
IHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOwor
ICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkg
YW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJz
dCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVk
ZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIg
dGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3Jl
eSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAg
LTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAg
IEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Okdy
ZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklY
TUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMg
YmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhl
IGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAg
IG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3Rh
Y2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQor
Cit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxs
KiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBT
bG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsy
OTYsMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAog
ICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAg
ICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAgICAKLSAgICAv
LyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJp
Z2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUg
bWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFu
Z2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5Lgot
ICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRD
ZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQn
cyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJy
aWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBt
YXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0
J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHBy
b2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJs
YWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVP
ckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzI2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVh
cFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxT
dGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAg
ICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0
YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNh
dXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFu
ZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAg
Ly8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUg
b2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20u
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5
IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQog
ICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9o
ZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBj
b25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzUyLDQzIEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBz
b29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJh
bGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVs
KG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBB
U1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAg
ICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYg
IWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAg
ICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdl
ZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRk
b3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5y
ZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAg
Ly8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ug
b2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBN
YXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2ls
bCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5
cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRh
dG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAg
ICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0K
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1v
ZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJU
KG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQwOSw2MCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgLy8gV2Fp
dCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMg
c29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgogICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRp
bWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBz
bGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0
aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2spOworICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKGxv
Y2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBs
ZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFw
Lm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxs
KCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAg
ICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0
aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjaywgbV9oZWFwLm1f
bnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
KTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAgICAgICAgZHJhaW4odGlt
ZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDgyLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUp
OwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIG1faGVh
cC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00NjcsMTMgKzQ5NSw2IEBA
IFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQotewot
ICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290
cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5zaXplKCk7Ci19
Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCiB7CiAg
ICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1ICs1MTgsMTQgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBkb25hdGUoKTsKLSAg
ICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1w
dHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9v
cGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290
cykKQEAgLTUyNiwxMCArNTQ2LDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVO
ZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogbWFya1N0
YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAgIG91dC5wcmludCgiQ29s
bGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtTdGFjaygpKSwgIl0sIE11
dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFjaygpKSwgIl0iKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9w
YXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEhl
YXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3Rh
Y2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG1hcmtT
dGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIAog
ICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJpU3RhdGUgY29udGFpbnNP
cGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBvcGFxdWVSb290Q291bnQo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygp
OwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0YWNrKCk7CisgICAgdm9p
ZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKLSAgICB2b2lk
IGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAgIHZvaWQgZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgdm9p
ZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7IFNsYXZlRHJhaW4s
IE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2Rl
KTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9uZSwgVGltZWRPdXQgfTsK
KyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAg
IHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVibGljOgogICAgIAogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE0
MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVy
VHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwq
KTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwq
KTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxs
Kik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8p
OwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwogICAgIE9w
YXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVy
ZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIAogICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsKICAgICBzaXplX3Qg
bV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIApAQCAtMTY1
LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsg
bnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAgICBib29sIG1faXNW
aXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDE1
IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKIAogaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsK
LSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6
ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemUp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw3
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RT
dHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUg
PSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFu
Y2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFI
SW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRleGluZ1R5cGUubGluaygm
aml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlVwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4
KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlw
ZSk7CisgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJl
Z2lzdGVySUQgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjY4LDcgKzIyNjgsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCCiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjI3OCw3ICsyMjc4LDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0
LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgbmV3U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0s
IHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwog
ICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwogICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEds
b2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0ICsxMDM3LDE1IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVd
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTExNTcsMTEgKzExNTcs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhJbnN0cgogICAgIGludCBp
bmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtODg3LDcgKzg4
Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKICAgICBjb25z
dCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIAogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAogICAgIHN0b3JlaSBzY3JhdGNoLCBBcnJheVBy
b2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtwcm9maWxlXQotICAgIGxvYWRiIEpTQ2VsbDo6
bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5nVHlwZQorICAgIGxvYWRiIEpTQ2VsbDo6bV9p
bmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRleGluZ1R5cGUKIGVuZAogCiBtYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDIxICs1MywyNSBAQCB0
eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJ
c0FycmF5ICAgICAgICAgICAgICAgICAgPSAweDAxOwogCiAvLyBUaGUgc2hhcGUgb2YgdGhlIGlu
ZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhp
bmdTaGFwZU1hc2sgICAgICAgID0gMHgwRTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9J
bmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
VW5kZWNpZGVkU2hhcGUgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5
cy4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0g
MHgwNDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAg
ID0gMHgwNjsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAg
ICAgID0gMHgwODsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUg
ICAgICAgID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3Rv
cmFnZVNoYXBlID0gMHgwQzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFw
ZU1hc2sgICAgICAgICAgICAgICA9IDB4MEU7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5v
SW5kZXhpbmdTaGFwZSAgICAgICAgICAgICAgICAgPSAweDAwOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1
c2VmdWwgZm9yIGFycmF5cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERv
dWJsZVNoYXBlICAgICAgICAgICAgICAgICAgICAgPSAweDA2Oworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwODsKK3N0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgICAgICAgICA9IDB4MEE7
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAgICAg
ICAgPSAweDBDOwogCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlm
dCAgICAgICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdT
aGFwZXMgICA9IDc7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlm
dCAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOdW1iZXJPZklu
ZGV4aW5nU2hhcGVzICAgICAgICAgID0gNzsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJh
Y2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNr
ZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSAweDEwOworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgICAgICAgID0gMHgxMDsKKwor
Ly8gVGhlIEluZGV4aW5nVHlwZSBmaWVsZCBvZiBKU0NlbGxzIGlzIHN0b2xlbiBmb3IgbG9ja3Mu
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQgICAgICAg
ICAgPSAweDIwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVMb2NrSGFz
UGFya2VkICAgICAgID0gMHg0MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVz
Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
QWxsQXJyYXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0
aGUgaGlzdG9yeS4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhp
c3RvcnkgID0gQWxsQXJyYXlUeXBlcyB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogCit0eXBl
ZGVmIExvY2tBbGdvcml0aG08SW5kZXhpbmdUeXBlLCBJbmRleGluZ1R5cGVMb2NrSXNIZWxkLCBJ
bmRleGluZ1R5cGVMb2NrSGFzUGFya2VkPiBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw5IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAg
ICAKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRl
cmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAKKyAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNjMsMTMg
KzEwNjUsMTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAg
IC8vIE5lZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBhcm91bmQgdGhlIHVuc2hpZnRDb3VudFNsb3dD
YXNlKCksIHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBidXR0ZXJmbHkgaW4KICAgICAvLyBhIHdlaXJk
IHN0YXRlOiBzb21lIHBhcnRzIG9mIGl0IHdpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLCB3aGlj
aCB3ZSB3aWxsIGZpbGwgaW4gaGVyZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CiAgICAgCiAgICAgaWYgKG1v
dmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewogICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVj
dHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsKICAgICAgICAg
c3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsKLSAgICAgICAg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0
aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZSh2
bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkwLDYgKzEwOTQsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2kgKyBzdGFydEluZGV4XS5j
bGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAs
MzIgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwogICAgIGJvb2wgaW5oZXJp
dHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigp
IGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBidWlsdC1pbiBsb2NrLiBDdXJy
ZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYgeW91IG5lZWQgaXQuIEl0J3MK
KyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRoYXQgdGhpcyBsb2NrIGlzIGN1
cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydzCisgICAgLy8gb3JkZXJpbmcg
d2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3RydWN0dXJlIGxvY2sgbXVzdCBi
ZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2tJbnRlcm5hbExvY2soKTsKKyAgICB2b2lk
IHVubG9ja0ludGVybmFsTG9jaygpOworICAgIAorICAgIGNsYXNzIEludGVybmFsTG9ja2VyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEludGVybmFsTG9ja2VyKEpTQ2VsbCogY2VsbCkKKyAgICAg
ICAgICAgIDogbV9jZWxsKGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+bG9j
a0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+SW50ZXJuYWxM
b2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPnVubG9ja0ludGVybmFsTG9j
aygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTQ2VsbCog
bV9jZWxsOworICAgIH07CiAKICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0OworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3Q7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSgpIGNvbnN0OwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Q7
CkBAIC0xNjcsNiArMTkxLDE2IEBAIHB1YmxpYzoKICAgICBDZWxsU3RhdGUgY2VsbFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAgICB2b2lkIHNldENlbGxTdGF0
ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2VsbCo+KHRoaXMpLT5tX2Nl
bGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNl
bGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1Jl
bGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0KKworICAgIENl
bGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcoQ2VsbFN0YXRlIG9s
ZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjph
dG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3Rh
dGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQog
ICAgIHsKQEAgLTE4Myw5ICsyMTcsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Nl
bGwsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Nl
bGwsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZf
dCBjZWxsU3RhdGVPZmZzZXQoKQpAQCAtMjI4LDcgKzI2Miw3IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3Ry
dWN0dXJlSUQ7Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5n
VHlwZSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7CiAgICAgSlNUeXBlIG1fdHlwZTsKICAgICBUeXBl
SW5mbzo6SW5saW5lVHlwZUZsYWdzIG1fZmxhZ3M7CiAgICAgQ2VsbFN0YXRlIG1fY2VsbFN0YXRl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMu
aAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSBKU0Nl
bGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFQKIAogaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFZN
JiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBtX3N0cnVjdHVyZUlEKHN0cnVjdHVyZS0+
aWQoKSkKLSAgICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisg
ICAgLCBtX2luZGV4aW5nVHlwZUFuZE1pc2Moc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkpCiAgICAgLCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSkK
ICAgICAsIG1fZmxhZ3Moc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKQog
ICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKQEAgLTc0LDcgKzc0LDcgQEAg
aW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIGlmIChzdHJ1Y3R1
cmUpIHsKICNlbmRpZgogICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwot
ICAgICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAg
ICAgIG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpOwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVG
bGFncygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEsOSArOTEsMTQgQEAgaW5s
aW5lIEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAK
K2lubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQorCiBpbmxpbmUgSW5kZXhp
bmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbmRl
eGluZ1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlw
ZXM7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAg
LTE5NSwxNyArMjAwLDI3IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIo
KSAKICAgICByZXR1cm4gbV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5cGU7CiB9CiAKLWlubGlu
ZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0
aGlzLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0
dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6aGVhcCh0aGlzKS0+c3Ry
dWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0cnVjdHVyZSk7Ci0gICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwogICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9m
bGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICBtX3R5
cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwotICAgIG1faW5kZXhpbmdUeXBlID0g
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdU
eXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgaWYg
KG1faW5kZXhpbmdUeXBlQW5kTWlzYyAhPSBuZXdJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgQVNT
RVJUKCEobmV3SW5kZXhpbmdUeXBlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSk7CisgICAg
ICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBvbGRWYWx1ZSA9IG1faW5k
ZXhpbmdUeXBlQW5kTWlzYzsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBuZXdWYWx1ZSA9IChv
bGRWYWx1ZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkgfCBzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmIChXVEY6OmF0b21pY0NvbXBh
cmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2luZGV4aW5nVHlwZUFuZE1pc2MsIG9sZFZhbHVlLCBu
ZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
dm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0
IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKQEAgLTI4NCwxMSArMjk5
LDI2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3IoVk0mIHYKICAgICBpZiAo
aXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVJRCgpKTsK
LSAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKQotICAgICAg
ICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsK
LSAgICBlbHNlCisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRh
bCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7
CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0g
Y2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KHRoaXMpOwor
ICAgIH0gZWxzZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPih0aGlzKS0+
Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAgICAgemFwKCk7CiB9CiAK
K2lubGluZSB2b2lkIEpTQ2VsbDo6bG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWljPElu
ZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigm
bV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjps
b2NrKCpsb2NrKTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxvY2tJbnRlcm5hbExvY2so
KQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21p
YzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdU
eXBlTG9ja0FsZ29yaXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxNyArMTEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVz
LgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9y
YWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIAotICAgIC8vIE1hcmsgdGhl
IGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkp
IHsKKworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KTsKKyAgICBzd2l0Y2ggKG9sZFR5cGUpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAg
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwot
ICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXApOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAg
ICAgICAgLy8gVGhpcyBsb2NrIGlzIGhlcmUgdG8gcHJvdGVjdCBDb250aWd1b3VzLT5BcnJheVN0
b3JhZ2UgdHJhbnNpdGlvbnMsIGJ1dCB3ZSBjb3VsZCBtYWtlIHRoYXQKKyAgICAgICAgLy8gcmFj
ZSB3b3JrIGlmIHdlIG5lZWRlZCB0by4KKyAgICAgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBs
b2NrZXIodGhpcyk7CisgICAgICAgIEluZGV4aW5nVHlwZSBuZXdUeXBlID0gdGhpcy0+aW5kZXhp
bmdUeXBlKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAg
ICBzd2l0Y2ggKG5ld1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVMKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNDYsMTAgKzE1Nyw0MCBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0
LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2Jq
ZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpKTsKLQorICAgIC8vIFRoZSBtdXRhdG9yIGFsd2F5cyBzZXRzIHRo
ZSBzdHJ1Y3R1cmUgbGFzdC4gV2UncmUgT0sgd2l0aCBzZWVpbmcgYW4gb2xkIHN0cnVjdHVyZSBh
bmQgbmV3CisgICAgLy8gYnV0dGVyZmx5LCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLiBM
ZXQncyBicmVhayB0aGlzIGRvd24hCisgICAgLy8KKyAgICAvLyBDUzogbG9hZCBzdHJ1Y3R1cmUK
KyAgICAvLyBDQjogbG9hZCBidXR0ZXJmbHkKKyAgICAvLyAKKyAgICAvLyBNQjogc3RvcmUgYnV0
dGVyZmx5CisgICAgLy8gTVM6IHN0b3JlIHN0cnVjdHVyZQorICAgIC8vIAorICAgIC8vIFRoZSBy
dWxlcyBhcmU6IEl0J3MgT0sgdG8gc2VlIGEgbmV3IGJ1dHRlcmZseSBidXQgYW4gb2xkIHN0cnVj
dHVyZS4gSXQncyB3cm9uZyB0byBzZWUgYW4gb2xkCisgICAgLy8gYnV0dGVyZmx5IGFuZCBhIG5l
dyBzdHJ1Y3R1cmUuCisgICAgLy8gCisgICAgLy8gSGVyZSBhcmUgYWxsIHBvc3NpYmxlIGludGVy
bGVhdmluZ3M6CisgICAgLy8gCisgICAgLy8gTUIgQ1MgQ0IgTVM6IENvbGxlY3RvciBzZWVzIG5l
dyBidXR0ZXJmbHkgYW5kIG9sZCBzdHJ1Y3R1cmUuIAorICAgIC8vIE1CIENTIE1TIENCOiBDb2xs
ZWN0b3Igc2VlcyBuZXcgYnV0dGVyZmx5IGFuZCBvbGQgc3RydWN0dXJlLgorICAgIC8vIE1CIE1T
IENCIENTOiBDb2xsZWN0b3Igc2VlcyBuZXcgc3RydWN0dXJlIGFuZCBidXR0ZXJmbHkuCisgICAg
Ly8gQ1MgTUIgTVMgQ0I6IENvbGxlY3RvciBzZWVzIG5ldyBidXR0ZXJmbHkgYW5kIG9sZCBzdHJ1
Y3R1cmUuCisgICAgLy8gQ1MgTUIgQ0IgTVM6IENvbGxlY3RvciBzZWVzIG5ldyBidXR0ZXJmbHkg
YW5kIG9sZCBzdHJ1Y3R1cmUuCisgICAgLy8gQ1MgQ0IgTUIgTVM6IENvbGxlY3RvciBzZWVzIG9s
ZCBzdHJ1Y3R1cmUgYW5kIGJ1dHRlcmZseS4KKyAgICAvLworICAgIC8vIFNvLCB3ZSBqdXN0IG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugb2JleSB0aGlzIG9yZGVyIGFuZCBldmVyeXRoaW5nIGlz
IGZpbmUuCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
dmlzaXRvci52bSgpKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpOworICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpKSB7CisgICAgICAgIGlm
ICh3YXNEaWN0aW9uYXJ5KSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzdHJ1Y3R1cmUtPmxvY2soKSk7CisgICAgICAgICAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkKKyAgICAgICAgICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlz
aXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNSw2ICsy
NDYsMTEgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7CisgICAg
Ym9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAo
d2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIGVs
c2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKICAgICBpZiAoYnV0dGVyZmx5KQogICAgICAg
ICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVy
ZSk7CkBAIC0yMTIsNyArMjU4LDkgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgp
OwogICAgIGlmIChzdG9yYWdlU2l6ZSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7Ci0KKyAgICBpZiAo
d2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAg
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2Vu
ZGlmCkBAIC02NjYsNyArNzE0LDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SQogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0g
MDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7
CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0
aGlzLCBtYXApOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKIH0KQEAgLTczMSw3ICs3ODAsOSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZt
LCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlv
bjo6QWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC03NDIs
NyArNzkzLDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAg
ICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNJbnQzMigpOwogfQogCkBAIC03NTMsNyArODA2LDkgQEAgQ29udGlndW91c0RvdWJsZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gUE5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlRG91YmxlKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpOwogfQogCkBAIC03NjQsNyArODE5LDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cyk7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIApAQCAtNzk3LDcgKzg1NCw5IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFnZUJ1dHRlcmZseSh2bSwgdGhpcywgc3RydWN0
dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwgbV9idXR0ZXJmbHkuZ2V0KCkpOwogICAgIEFycmF5
U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigp
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODgwLDcgKzkzOSw5IEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHN0b3JhZ2U7CiB9
CiAKQEAgLTkzNSw3ICs5OTYsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24p
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9y
YWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUo
dm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTk4MSw3
ICsxMDQ0LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAg
IH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0xMDA2LDcgKzEwNzEsMjIg
QEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwor
CisgICAgLy8gVGhpcyBoYXMgYSBjcmF6eSByYWNlIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdG9y
LiBXaGVuIGNoYW5naW5nIHRoZSBidXR0ZXJmbHkgYW5kIHN0cnVjdHVyZSwKKyAgICAvLyB0aGUg
bXV0YXRvciBhbHdheXMgc2V0cyB0aGUgc3RydWN0dXJlIGxhc3QuIFRoZSBjb2xsZWN0b3Igd2ls
bCBhbHdheXMgcmVhZCB0aGUgc3RydWN0dXJlCisgICAgLy8gZmlyc3QuIFdlIHByb2JhYmx5IGhh
dmUgdG8gZm9sbG93IHRoYXQgY29udmVudGlvbiBoZXJlIGFzIHdlbGwuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sbGVjdG9yCisgICAgLy8gd2lsbCBzb21ldGltZXMgc2VlIHRoZSBuZXcgYnV0dGVy
Zmx5ICh0aGUgb25lIHdpdGggQXJyYXlTdG9yYWdlKSB3aXRoIHRoZSBvbmx5IHN0cnVjdHVyZSAo
dGhlCisgICAgLy8gb25lIHRoYXQgc2F5cyB0aGF0IHRoZSBidXR0ZXJmbHkgaXMgQ29udGlndW91
cykuIFdoZW4gc2Nhbm5pbmcgQ29udGlndW91cywgdGhlIGNvbGxlY3RvciB3aWxsCisgICAgLy8g
bWFyayB3b3JkIGF0IGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGJ1dHRl
cmZseSBwb2ludGVyLCB1cCB0byB0aGUgcHVibGljTGVuZ3RoCisgICAgLy8gaW4gdGhlIGJ1dHRl
cmZseS4gQnV0IGFuIEFycmF5U3RvcmFnZSBoYXMgc29tZSBub24tcG9pbnRlciBoZWFkZXIgZGF0
YSBhdCBsb3cgcG9zaXRpdmUKKyAgICAvLyBvZmZzZXRzIGZyb20gdGhlIGJ1dHRlcmZseSAtIHNv
IHdoZW4gdGhpcyByYWNlIGhhcHBlbnMsIHRoZSBjb2xsZWN0b3Igd2lsbCBzdXJlbHkgY3Jhc2gK
KyAgICAvLyBiZWNhdXNlIGl0IHdpbGwgZmFpbCB0byBkZWNvZGUgdHdvIGNvbnNlY3V0aXZlIGlu
dDMycyBhcyBpZiBpdCB3YXMgYSBKU1ZhbHVlLgorICAgIC8vCisgICAgLy8gRm9ydHVuYXRlbHks
IHdlIGhhdmUgdGhlIEpTQ2VsbCBsb2NrIGZvciB0aGlzIHB1cnBvc2UhCisgICAgCisgICAgSW50
ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsxNTQ4LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0cnVj
dHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBb
XSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgb2Zmc2V0KSk7CiAKQEAgLTI3MjUsNyArMjgwNSw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3Jl
YXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLSAg
ICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJm
bHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
QEAgLTI3NDIsNyArMjgyMyw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3Ro
KFZNJiAKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTI3NjIsNiArMjg0NCw3IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNs
b3coVk0mIHZtLCAKICAgICAKICAgICB1bnNpZ25lZCBhdmFpbGFibGVPbGRMZW5ndGggPQogICAg
ICAgICBCdXR0ZXJmbHk6OmF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlD
YXBhY2l0eSwgb2xkVmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG51bGxwdHI7CiAgICAgaWYgKGF2YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0
b3IgbGVuZ3RoIHRoYXQgY2F1c2VkIGludGVybmFsCiAgICAgICAgIC8vIGZyYWdtZW50YXRpb24u
IElmIHdlIGRpZCBvdXIgam9icyByaWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJ
IGJldCB3ZSB3aWxsIG1lc3MKQEAgLTI3NzYsMTEgKzI4NTksOSBAQCBib29sIEpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0
dGVyZmx5KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAg
IGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAo
aGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
bGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKQEAgLTI3ODksNiArMjg3MCwx
NSBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAg
ICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOwogICAgIH0KIAorICAgIGlmIChu
ZXdCdXR0ZXJmbHkpIHsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9i
dXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9y
TGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTI4MDIsOSArMjg5MiwxMCBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5r
QnV0dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0
cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0
ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgo
bGVuZ3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVyZmx5LnNl
dCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAogQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jv
d091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
CkBAIC0zMDkyLDE1ICszMTgzLDIwIEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25h
cnkoVk0mIHYKICAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0K
IAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBz
aXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFm
dGVyKQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVm
b3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKKyAgICAvLyBUaGlzIGRvZXMg
c2hhZHkgdGhpbmdzIGZvciBjb25jdXJyZW50IEdDLCBidXQgdGhpcyBpcyBjYWxsZWQgb25seSBm
cm9tCisgICAgLy8gU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSwgYW5kIHRo
YXQgaG9sZHMgdGhlIFN0cnVjdHVyZSdzIGxvY2suIFNpbmNlIHRoaXMKKyAgICAvLyBkb2VzIG5v
dCBjaGFuZ2UgdGhlIHN0cnVjdHVyZSwgYW5kIHNpbmNlIGJlZm9yZSB0aGUgbG9jayB3YXMgYWNx
dWlyZWQgdGhlIHN0cnVjdHVyZQorICAgIC8vIGNsYWltZWQgdG8gYmUgYSBkaWN0aW9uYXJ5LCB3
ZSBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgZG9lcyBub3QgaW50ZXJsZWF2ZSB3aXRoCisgICAgLy8g
dmlzaXRCdXR0ZXJmbHkuCiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKICAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSB0aGlzLT5idXR0ZXJmbHlQcmVDYXBhY2l0
eSgpOwogICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5
LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKICAgICB2b2lkKiBuZXdCYXNlID0gYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSk7CiAKICAgICBtZW1t
b3ZlKG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCB0aGlzLT5idXR0ZXJmbHlUb3RhbFNpemUoKSk7Ci0g
ICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBCdXR0ZXJmbHk6OmZy
b21CYXNlKG5ld0Jhc2UsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKSk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0Jhc2UsIHByZUNhcGFj
aXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKSk7CiB9CiAKIHVpbnQzMl90IEpTT2JqZWN0Ojpn
ZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQ4LDEwICs3NDgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWlmeUFsbFN0
YXRpY1Byb3BlcnRpZXMoRXhlY1N0YXRlKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0
ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBu
ZXdTaXplKTsKLSAgICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShW
TSYsIEJ1dHRlcmZseSopOwogICAgICAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYsIEJ1
dHRlcmZseSopOyAvLyBBbHdheXMgY2hhbmdlIHRoZSBidXR0ZXJmbHkgYmVmb3JlIGNoYW5naW5n
IHRoZSBzdHJ1Y3R1cmUhCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsK
LSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1dHRl
cmZseSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5
KFZNJik7CiAKQEAgLTc1OSw3ICs3NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzdHJ1
Y3R1cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQot
ICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mLCBzaXplX3Qgb3V0T2ZM
aW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2
b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGlu
ZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNv
bnN0CiAgICAgewpAQCAtMTIwNSwxNCArMTIwNCw2IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojpp
c1dpdGhTY29wZSgpIGNvbnMKICAgICByZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7CiB9
CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCi17Ci0gICAgQVNT
RVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIodGhpcykp
KTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7Ci0gICAgc2V0U3Ry
dWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3Ry
dWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVj
dHVyZSk7CkBAIC0xMjIwLDcgKzEyMTEsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3Ry
dWN0dXJlKFZNJiB2CiAgICAgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiB9
CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1
Y3R1cmUoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK2lubGluZSB2b2lkIEpTT2JqZWN0
OjpzZXRCdXR0ZXJmbHkoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBtX2J1
dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiB9CkBAIC0xNDE3LDE2ICsxNDA4LDIw
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgaWYg
KChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAg
IGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0g
ICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRo
aXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBvZmZzZXQgPSB0aGlz
LT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgICAg
IHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBbJl0gKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAg
ICAgICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9y
YWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGlu
ZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlz
LT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwor
ICAgICAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAg
ICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0
aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9KTsKIAotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAg
ICBBU1NFUlQodGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwpAQCAtMTQ1MCw4ICsxNDQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW4KIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgICAgIHNsb3Quc2V0
TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpA
QCAtMTQ5OCwxMyArMTQ5NSwxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEluCiAgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAg
IGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZt
LCBuZXdTdHJ1Y3R1cmUpOwotICAgIGVsc2UgeworICAgIGlmIChvbGRDYXBhY2l0eSAhPSBuZXdD
YXBhY2l0eSkgewogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOwogICAgIH0KICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICBzbG90LnNldE5ld1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAg
bmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAtMTU1OCwx
MyArMTU1NSwxNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAg
ICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKCk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlm
IChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0g
ICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigK
KyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZdIChjb25z
dCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7Cisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJv
b2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0
b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRP
cHRpbWl6ZSk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNP
YmplY3QqIFJlZ2lzdGVyOjpvYmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDgg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3Nl
U2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNl
R2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNl
Q29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IHVzZUNvbmN1cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwg
Y29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9v
bCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYo
ZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZh
bHVlTWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBA
QCBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGlu
IGl0LgogY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewog
cHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyMSwxMyArNjIxLDEzIEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5
VGEKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5k
KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktp
bmQpOwotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsK
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4
aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNp
dGlvbktpbmQpOwogICAgIAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdUeXBlKHRyYW5zaXRpb25L
aW5kKSkgewogICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVj
dHVyZS0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmpl
Y3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVz
dWx0LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsKICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CkBAIC02MzgsNyArNjM4
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIFN0cnVj
dHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJs
ZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRp
b24tPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmlidXRlcyk7Ci0gICAgICAgIEFTU0VS
VChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBp
bmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7
CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNjQ2
LDcgKzY0Niw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAg
ICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAg
dHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgIHRy
YW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnMo
dHJhbnNpdGlvbktpbmQpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXREaWRQcmV2ZW50RXh0ZW5z
aW9ucyh0cnVlKTsKQEAgLTczNiw2ICs3MzYsOCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Zmxh
dHRlbkRpY3Rpb25hcnlTCiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFT
U0VSVChpc0RpY3Rpb25hcnkoKSk7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKIAogICAgIHNpemVfdCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
IHsKQEAgLTc3MywzOCArNzc1LDE3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVMKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFm
dGVyIGZsYXR0ZW5pbmcvY29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAog
ICAgICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBk
ZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KICAg
ICAgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkg
JiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3Qt
PnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgICAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseSh2bSwgbnVsbHB0cik7CiAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qg
d2FzIGRvd24tc2l6ZWQgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBCdXR0ZXJm
bHkgaXMgbm8gbG9uZ2VyIHdpdGhpbiB0aGUgCiAgICAgICAgIC8vIGZpcnN0IENvcGllZEJsb2Nr
OjpibG9ja1NpemUgYnl0ZXMsIHdlJ2xsIGdldCB0aGUgd3JvbmcgYW5zd2VyIGlmIHdlIHRyeSB0
byBtYXNrIHRoZSBiYXNlIGJhY2sgdG8gCiAgICAgICAgIC8vIHRoZSBDb3BpZWRCbG9jayBoZWFk
ZXIuIFRvIHByZXZlbnQgdGhpcyBjYXNlIHdlIG5lZWQgdG8gbWVtbW92ZSB0aGUgQnV0dGVyZmx5
IGRvd24uCiAgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkpCi0gICAgICAgICAg
ICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKHZtLCBiZWZvcmVPdXRPZkxp
bmVDYXBhY2l0eSwgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBvYmplY3Qt
PnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGxvY2tlciwgdm0sIGJlZm9yZU91dE9mTGlu
ZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4g
dGhpczsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0g
ICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VS
VChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZt
LCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1l
KTsKLX0KLQogdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCiB7CiAgICAgQVNTRVJUKHByb3BlcnR5VGFi
bGUoKSk7CkBAIC05ODksNDkgKzk3MCwxMiBAQCBWZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gU3Ry
dWN0dXJlOjpnZXRQCiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKLSAgICBHQ1Nh
ZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIAotICAg
IEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwotCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwg
cHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vz
c0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5
TmFtZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICBjcmVhdGVQ
cm9wZXJ0eU1hcChsb2NrZXIsIHZtKTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9
IHByb3BlcnR5VGFibGUoKS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKLQotICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJp
YnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2Up
OwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gbmV3T2Zmc2V0Owor
ICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgW10gKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKIH0KIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwot
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0
OwotCi0gICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHByb3BlcnR5
VGFibGUoKS0+ZmluZChyZXApOwotICAgIGlmICghcG9zaXRpb24uZmlyc3QpCi0gICAgICAgIHJl
dHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRp
b24uZmlyc3QtPm9mZnNldDsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+cmVtb3ZlKHBvc2l0aW9u
KTsKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKLQotICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gb2Zmc2V0OworICAgIHJldHVybiByZW1v
dmUocHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgdW5zaWduZWQgY2FwYWNpdHkp
CkBAIC0xMTE0LDYgKzEwNTgsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7Cisg
ICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAg
ICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY2Fj
aGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDkgKzE5MSwx
MyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIC8vIFRoZXNlIHNo
b3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3Bl
cnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIC8vIFRoZXNlIHNob3Vs
ZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gVmVyc2lvbnMgdGhhdCB0YWtlIGEgZnVuYyB3aWxsIGNh
bGwgaXQganVzdCBiZWZvcmUKKyAgICAvLyBjb21taXRpbmcgdG8gbWFrZSB0aGUgY2hhbmdlLiBU
aGUgY2FsbGJhY2sgaXMgbm90IGNhbGxlZCBpZiB0aGVyZSBpcyBubyBjaGFuZ2UgYmVpbmcgbWFk
ZSwKKyAgICAvLyBsaWtlIGlmIHlvdSBjYWxsIHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24oKSBhbmQgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24o
Vk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAg
ICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90
b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAgICAg
IAogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQo
KSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KQEAgLTIyOSw4ICsyMzMsOCBAQCBwdWJsaWM6CiAg
ICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVG
bGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5p
c09iamVjdCgpOyB9CiAKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpICYgQWxsQXJyYXlUeXBlczsgfQotICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9i
bG9iLmluZGV4aW5nVHlwZSgpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgJiBBbGxB
cnJheVR5cGVzOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
OyB9CiAgICAgICAgIAogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29u
c3QKICAgICB7CkBAIC00MzMsOSArNDM3LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KICAgICAgICAgCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
cHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCkBAIC01NzksNiArNTgzLDggQEAgcHVibGljOgog
ICAgIAogICAgIHN0YXRpYyB2b2lkIGR1bXBDb250ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAg
ICAgCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAg
ICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAtNjMzLDcgKzYzOSwx
MSBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFk
ZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBj
b25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAK
ICAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVX
b3JkID0gMHhiYmFkYmVlZjsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZv
JiB0eXBlSW5mbykKKyAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQs
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8pCiAgICAgewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVj
dHVyZUlEOwotICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7Cisg
ICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlw
ZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVU
eXBlRmxhZ3MoKTsKICAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0
ZTo6TmV3V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9y
PShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUu
ZG91YmxlV29yZDsgfQogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3Qg
eyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9p
ZCBzZXRJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5p
bmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVs
ZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3Rvcnk7IH0KICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7
IH0KICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0
IHsgcmV0dXJuIHUuZmllbGRzLmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJ
REJsb2IsIHUuZmllbGRzLnN0cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlm
Zl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwot
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBl
IHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVG
bGFnczsKICAgICAgICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNCArMzExLDgwIEBAIGlubGluZSB2b2lk
IFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgR0NTYWZlQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIUpTQzo6
aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51
bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisK
KyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9j
a2VyLCB2bSk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxl
KCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgCisgICAgZnVuYyhsb2NrZXIs
IG5ld09mZnNldCk7CisKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5
KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGlu
ZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgYXV0byByZXAg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAg
ICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisKKyAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJh
dG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3Np
dGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAgIGZ1bmMo
bG9ja2VyLCBvZmZzZXQpOworCisgICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24p
OworICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOworCisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlu
bmluZyh2bSwgZGVmZXJHQyk7CisgICAgCisgICAgcGluKCk7CisKKyAgICByZXR1cm4gYWRkKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0
IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwor
CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOworCisgICAgcGluKCk7CisgICAg
cmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1bmMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAv
KiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9
OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdC
NkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZB
NzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5
dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFC
QjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBA
CiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0
Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0Fs
Z29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGht
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVm
Q291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFz
aE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIz
RkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyog
TG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLywK
KwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovLAogCQkJ
CUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFD
RDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9yLmggKi8sCiAJCQkJQThBNDcyQzYx
NTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICovLApAQCAtMTMyMyw2ICsxMzI2LDcg
QEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAv
KiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1
MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRkNEREUx
REQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgc2V0
KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlzdEhhc2hTZXQuaAogICAg
IExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5oCiAgICAgTUQ1LmgKICAg
ICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291
cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcsMTEg
QEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNvcnRlZExpc3REdW1w
OwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsKK3Vz
aW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKIHVz
aW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiAK
ICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTE2ICszMCwy
MiBAQAogI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKICNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVh
bS5oIgogI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJlYWQ+
CiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tCYXNl
Ojpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRo
aXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlr
ZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0g
ICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBt
X2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVW
YWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBp
bi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAg
ICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVj
aCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAg
ICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWll
bGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVl
ZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFu
ZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQg
Yml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAo
IShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ug
bm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0
aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVz
dWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmso
Jm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtSZXN1
bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+
KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFu
ZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAgICAg
ICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVs
ZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tl
biB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4g
QnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBi
ZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUg
Y2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7
CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBs
KFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBE
ZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2Nr
RmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVSX0lO
TElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykKLXsK
LSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2so
KSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVvbmUg
cGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9j
ayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNv
bWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAgZm9y
ICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xkQnl0
ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9ieXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVv
bmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUg
bG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxv
Y2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJh
cmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtl
ZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAg
ICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVl
ID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5w
YXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0
IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0
aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZh
aXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBs
b2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwotICAg
ICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
U2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9M
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xvY2tf
aAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0z
Nyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsKIAor
dHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3JpdGht
OworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVz
IDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29tcGV0
ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBp
cyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcg
YW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gc3Rk
OjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiBz
dHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElL
RUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3QobV9ieXRlKSkpCisg
ICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgdHJ5TG9jaygpCiAgICAg
ewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFs
dWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBp
c0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYg
KG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dHJ5TG9jayhtX2J5dGUp
OwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBzdGQ6OnVuaXF1ZV9sb2Nr
LgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyBndWFyYW50ZWVz
IHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEgZmFpciBsb2NrLgogICAg
IHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsK
LSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja1Nsb3coKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdChtX2J5
dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3coKTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlz
IGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRlZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sg
ZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAgLTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExv
Y2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZvaWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAw
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVs
ZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdChtX2J5dGUpKSkKKyAgICAgICAgICAg
IHVubG9ja0ZhaXJseVNsb3coKTsKICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSkgJiBpc0hlbGRCaXQ7CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNM
b2NrZWQobV9ieXRlKTsKICAgICB9CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEy
NiwyMSArMTA5LDEwIEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBpc0hlbGRCaXQgPSAxOwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9
IDI7Ci0KKyAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCB1bmxvY2tGYWlybHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7
Ci0gICAgICAgIEZhaXIsCi0gICAgICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tT
bG93SW1wbChGYWlybmVzcyk7Ci0gICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdp
bmdPcHBvcnR1bml0eSwKLSAgICAgICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBN
ZXRob2QgdXNlZCBmb3IgdGVzdGluZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfTG9ja0FsZ29yaXRobV9oCisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2lu
Y2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9D
b21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1Bhcmtp
bmdMb3QuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFRoaXMgaXMgdGhlIGFsZ29yaXRobSB1c2VkIGJ5IFdURjo6TG9jay4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUg
aGFzUGFya2VkQml0PgorY2xhc3MgTG9ja0FsZ29yaXRobSB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3Qo
QXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBh
cmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2Nr
KQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFsb2NrRmFzdChsb2NrKSkpCisgICAgICAg
ICAgICBsb2NrU2xvdyhsb2NrKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgdHJ5TG9j
ayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAg
ICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAg
ICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1
cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
dW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExv
Y2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChs
b2NrKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQor
ICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAg
ICAgIHVubG9ja1Nsb3cobG9jaywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IGlzTG9ja2VkKGNvbnN0IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0Owor
ICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWlj
PExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7
CisKKyAgICAgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwg
YmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
IHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7CisKKyAgICAg
ICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAgICAgICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAgICAgJiYgbG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8g
SWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3
ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAg
ICAgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUg
cGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAg
ICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBz
ZXR0aW5nIGl0LgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bhcmtl
ZEJpdCkKKyAgICAgICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJl
bnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1
ZSB0byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2Ug
Y2FuIHBhcmsuCisgICAgICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQg
PQorICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5w
YXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJr
UmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMg
aGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFk
IHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQg
YW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAgICAgICAgICAgICAgICAg
IC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBp
cyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhh
dmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAg
ICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVz
cykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsg
Q0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisg
ICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlm
IHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJl
IGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBh
cmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IG9s
ZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xk
Qnl0ZVZhbHVlID09IGlzSGVsZEJpdCB8fCBvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhh
c1BhcmtlZEJpdCkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0g
aXNIZWxkQml0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vh
ayhpc0hlbGRCaXQsIDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNvbWVvbmUg
aXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9j
ayB0byB0aGF0IHRocmVhZAorICAgICAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5s
b2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBi
YXJnaW5nLgorICAgICAgICAgICAgLy8gV2hlbiB3ZSB1bmxvY2ssIHdlIG1heSBsZWF2ZSB0aGUg
cGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGVyZSBhcmUgc3RpbGwK
KyAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgorICAgICAgICAgICAgQVNTRVJU
KG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgICAg
ICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCisgICAgICAgICAgICAgICAgJmxvY2ssCisgICAgICAg
ICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJf
dCB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2Fu
IGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCisgICAgICAg
ICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdo
dCBub3cuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NrLmxvYWQoKSA9PSAoaXNIZWxk
Qml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJl
c3VsdC50aW1lVG9CZUZhaXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQsIHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVh
ZCB0aGF0IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMp
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrLnN0b3JlKGhhc1BhcmtlZEJpdCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2suc3RvcmUo
MCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIGVudW0gVG9rZW4geworICAgICAgICBCYXJnaW5nT3Bwb3J0dW5p
dHksCisgICAgICAgIERpcmVjdEhhbmRvZmYKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6TG9ja0FsZ29yaXRobTsKKworI2VuZGlmIC8vIFdURl9Mb2NrQWxn
b3JpdGhtX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVk
ZSAiQ29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFt
LmgiCisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9E
YXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQg
c2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndh
aXRVbnRpbChmYWtlTG9jaywgdGltZSk7CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmIHRpbWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCku
CisgICAgaWYgKCEodGltZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5j
ZUVwb2NoKCkudmFsdWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1
cm4gdGltZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIApJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZSYpOwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZSYpOworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBX
VEY6OnNsZWVwOwogCiAjZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294191</attachid>
            <date>2016-11-08 15:03:59 -0800</date>
            <delta_ts>2016-11-08 15:38:52 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>166891</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltJbmNyZW1lbnQ6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVh
cCYgbV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJn
ZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpA
QCAtMjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0
b3IoKnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBt
X2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2pp
dFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAt
MjY2LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE2ICs0NzEsMTYxIEBAIHZvaWQgSGVhcDo6Y29t
cGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5z
dGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92
bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAg
VGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMi
KTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVn
aW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxv
Y2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUg
U2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAg
ICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQg
aXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3Jl
IHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sg
aXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigK
LSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNp
dG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5l
d1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAg
ICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3
VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3Vmlz
aXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5h
cHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFs
bGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0
YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwot
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1
cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsK
KyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5p
dGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9m
TG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7
IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9w
cGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAg
ICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAg
ICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBi
YXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAg
ICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhj
ZXB0aW9uKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRo
aXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2Nr
cyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdl
IG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sK
LSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVl
ZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2
aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsg
cmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVw
ZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBl
bnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8v
IHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQg
KmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25v
dyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNl
IHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8g
dGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhl
IGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAv
LyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nl
c3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAg
Ly8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAg
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3Vs
dCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7
CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYy
LDcgKzYzOSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAog
dm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVh
ZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1f
Y29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1h
cmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpG
dWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigp
OworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAg
ICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNw
YWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NzMsMjIgQEAgdm9pZCBIZWFwOjpiZWdp
bk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJl
ZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6
OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMp
OwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29u
c2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lk
IEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzYxLDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwg
bV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9u
KCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJv
bmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsK
LSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAg
QVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZv
aWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewot
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOwor
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0
Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAg
ICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29r
ICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpA
QCAtODI3LDE5ICs3NzIsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlz
aXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRC
eXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxC
eXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0g
ICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VS
VChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwpAQCAtOTc3LDE0ICs5MjUsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
Y2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29u
Y3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlz
IHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2Ft
ZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwor
ICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8g
RHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3Qg
dGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5p
ZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVj
dCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0
IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8v
IHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5
IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1
cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVu
IHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBh
Z2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0
aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9p
ZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDM3LDE0IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJs
ZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2bSgpLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAg
ICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hp
bGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5j
b21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAg
fQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigp
LnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9p
c1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBk
YXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xs
ZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEyNSwxNSArMTA2NCwxMiBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhl
YXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAg
Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAg
cHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAg
ICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Q
cm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogICAgICAgICAKLSAgICBt
YXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsK
ICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0
aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTEx
NzAsOCArMTEwNiw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICB9CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFmdGVyID0gY3Vy
cmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1zXVxuIik7
CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcywg
Y3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtc11cbiIpOwogICAg
IH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMTI5LDM4IEBAIHZvaWQgSGVhcDo6c3RvcFRo
ZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxlclRocmVh
ZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1
ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0KKyAgICAKKyNpZiBF
TkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0o
Km1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2
bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7
CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7CisgICAgbV9vYmplY3RT
cGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7CisgICAgLy8g
Q2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRlcGVuZGluZyBv
biB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlvbiBjeWNsZSBv
ciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxlY3Rpb24gY3lj
bGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBhIG5vLW9wIGJl
Y2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQorICAgIC8vICAg
bGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBjeWNsZTogaXQg
cmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RTcGFjZS5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpA
QCAtMTQ2NiwxMCArMTQzMCwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNv
bnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhl
bHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwot
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRp
b25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhp
cyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0
ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygp
OworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQor
ICAgICAgICBjb2xsZWN0QXN5bmMoKTsKIH0KIAogSGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RD
b2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xNTQ5LDIzICsx
NTE4LDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAg
ICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xk
VGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewot
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAg
ICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVh
cDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVh
cDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk0OSw3ICsxOTA0LDcgQEAgYm9vbCBIZWFwOjpj
YW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0Nv
bGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkg
fHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11
dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsxOTI2LDggQEAgYm9vbCBI
ZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8
IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6
ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhh
dCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rp
b25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3Rh
dGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZt
X2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3LDEyICsxOTM4
LDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQg
aW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5
U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwODYsNCArMjAzMywxMSBAQCB2b2lkIEhlYXA6
OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2
b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1NhZmVUb0NvbGxl
Y3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAg
ICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNlbGxTdGF0
ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlU
aW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGljOgogICAgIE1hcmtl
ZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNo
aW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9
CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkg
eyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYg
bXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJh
Y2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rp
dml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7CiAgICAgdm9p
ZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGlj
OgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUg
bWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBB
UEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lk
ZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXpl
OyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9w
VGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3Mg
UmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29w
ZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVN
dXRhdG9yKCk7CiAgICAgCkBAIC00MjIsMzAgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVj
dGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAg
dm9pZCBzdG9wQWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAg
ICAKLSAgICB2b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwog
ICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJl
bW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZl
cnMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE3LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3MSw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
OCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmCiAgICAgLCBtX2hh
bmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CiB9CiAKIHRlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+CkBAIC0yNDEsMjQgKzI0
Myw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lz
RnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5
QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBt
X2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0
b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygp
KTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYg
KGZhbHNlKQpAQCAtMjY2LDEyICsyNTAsMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMp
KTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2Nr
IGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21l
b25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFT
U0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIs
IGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBz
dGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRl
ZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVk
IGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3
OSwxMiArMjY4LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZl
cnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAK
LSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNo
Q2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBz
ZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAg
ICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAg
IGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1Bv
aW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwog
ICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzAxLDE0
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0Fs
bG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAo
IWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAg
ICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAg
IC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdl
IHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpA
QCAtMzU0LDYgKzM1Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFw
VmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5k
bGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtp
bmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcg
ZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMg
ZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAg
ICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4g
Y2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0
aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVk
IHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzYyLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0
ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5n
IHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2Nh
dGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAog
dm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRl
cmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxs
b2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1
LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RW
aXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQotICAgIDogbV9zdGFjaygpCi0gICAgLCBt
X2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRlc0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNp
b24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
KQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygp
OworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFy
dE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwot
ICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkK
IHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOwor
ICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkg
YW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJz
dCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVk
ZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIg
dGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3Jl
eSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAg
LTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAg
IEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Okdy
ZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklY
TUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMg
YmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhl
IGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAg
IG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3Rh
Y2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQor
Cit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxs
KiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBT
bG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsy
OTYsMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAog
ICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAg
ICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAgICAKLSAgICAv
LyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJp
Z2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUg
bWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFu
Z2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5Lgot
ICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRD
ZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQn
cyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJy
aWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBt
YXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0
J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHBy
b2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJs
YWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVP
ckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzI2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVh
cFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxT
dGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAg
ICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0
YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNh
dXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFu
ZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAg
Ly8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUg
b2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20u
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5
IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQog
ICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9o
ZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBj
b25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzUyLDQzIEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBz
b29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJh
bGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVs
KG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBB
U1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAg
ICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYg
IWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAg
ICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdl
ZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRk
b3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5y
ZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAg
Ly8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ug
b2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBN
YXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2ls
bCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5
cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRh
dG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAg
ICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0K
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1v
ZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJU
KG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQwOSw2MCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgLy8gV2Fp
dCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMg
c29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgogICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRp
bWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBz
bGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0
aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2spOworICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKGxv
Y2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBs
ZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFw
Lm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxs
KCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAg
ICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0
aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjaywgbV9oZWFwLm1f
bnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
KTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAgICAgICAgZHJhaW4odGlt
ZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDgyLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUp
OwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIG1faGVh
cC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00NjcsMTMgKzQ5NSw2IEBA
IFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQotewot
ICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290
cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5zaXplKCk7Ci19
Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCiB7CiAg
ICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1ICs1MTgsMTQgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBkb25hdGUoKTsKLSAg
ICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1w
dHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9v
cGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290
cykKQEAgLTUyNiwxMCArNTQ2LDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVO
ZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogbWFya1N0
YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAgIG91dC5wcmludCgiQ29s
bGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtTdGFjaygpKSwgIl0sIE11
dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFjaygpKSwgIl0iKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9w
YXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEhl
YXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3Rh
Y2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG1hcmtT
dGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIAog
ICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJpU3RhdGUgY29udGFpbnNP
cGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBvcGFxdWVSb290Q291bnQo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygp
OwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0YWNrKCk7CisgICAgdm9p
ZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKLSAgICB2b2lk
IGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAgIHZvaWQgZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgdm9p
ZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7IFNsYXZlRHJhaW4s
IE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2Rl
KTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9uZSwgVGltZWRPdXQgfTsK
KyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAg
IHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVibGljOgogICAgIAogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE0
MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVy
VHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwq
KTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwq
KTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxs
Kik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8p
OwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwogICAgIE9w
YXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVy
ZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIAogICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsKICAgICBzaXplX3Qg
bV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIApAQCAtMTY1
LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsg
bnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAgICBib29sIG1faXNW
aXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDE1
IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKIAogaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsK
LSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6
ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemUp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw3
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RT
dHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUg
PSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFu
Y2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFI
SW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRleGluZ1R5cGUubGluaygm
aml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlVwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4
KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlw
ZSk7CisgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJl
Z2lzdGVySUQgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjY4LDcgKzIyNjgsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCCiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkpOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjI3OCw3ICsyMjc4LDcgQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0
LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSwgbmV3U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0s
IHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwog
ICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdU
MSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwogICAgICAgICAgICAgc3RvcmVQdHIocmVn
VDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9m
ZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEds
b2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0
UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVj
ayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFog
Y2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0ICsxMDM3LDE1IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFs
VmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZh
bHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVd
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRQdXRD
bG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTExNTcsMTEgKzExNTcs
MTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhJbnN0cgogICAgIGludCBp
bmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1Qw
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtODg3LDcgKzg4
Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKICAgICBjb25z
dCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIAogICAgIGxvYWRpIEpTQ2VsbDo6
bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAogICAgIHN0b3JlaSBzY3JhdGNoLCBBcnJheVBy
b2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtwcm9maWxlXQotICAgIGxvYWRiIEpTQ2VsbDo6
bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5nVHlwZQorICAgIGxvYWRiIEpTQ2VsbDo6bV9p
bmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRleGluZ1R5cGUKIGVuZAogCiBtYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJTcGVjdWxh
dGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDIxICs1MywyNSBAQCB0
eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJ
c0FycmF5ICAgICAgICAgICAgICAgICAgPSAweDAxOwogCiAvLyBUaGUgc2hhcGUgb2YgdGhlIGlu
ZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhp
bmdTaGFwZU1hc2sgICAgICAgID0gMHgwRTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9J
bmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
VW5kZWNpZGVkU2hhcGUgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5
cy4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0g
MHgwNDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAg
ID0gMHgwNjsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAg
ICAgID0gMHgwODsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUg
ICAgICAgID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3Rv
cmFnZVNoYXBlID0gMHgwQzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFw
ZU1hc2sgICAgICAgICAgICAgICA9IDB4MEU7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5v
SW5kZXhpbmdTaGFwZSAgICAgICAgICAgICAgICAgPSAweDAwOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1
c2VmdWwgZm9yIGFycmF5cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERv
dWJsZVNoYXBlICAgICAgICAgICAgICAgICAgICAgPSAweDA2Oworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwODsKK3N0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgICAgICAgICA9IDB4MEE7
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAgICAg
ICAgPSAweDBDOwogCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlm
dCAgICAgICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdT
aGFwZXMgICA9IDc7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlm
dCAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOdW1iZXJPZklu
ZGV4aW5nU2hhcGVzICAgICAgICAgID0gNzsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJh
Y2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNr
ZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSAweDEwOworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgICAgICAgID0gMHgxMDsKKwor
Ly8gVGhlIEluZGV4aW5nVHlwZSBmaWVsZCBvZiBKU0NlbGxzIGlzIHN0b2xlbiBmb3IgbG9ja3Mu
CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQgICAgICAg
ICAgPSAweDIwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVMb2NrSGFz
UGFya2VkICAgICAgID0gMHg0MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVz
Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
QWxsQXJyYXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0
aGUgaGlzdG9yeS4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhp
c3RvcnkgID0gQWxsQXJyYXlUeXBlcyB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogCit0eXBl
ZGVmIExvY2tBbGdvcml0aG08SW5kZXhpbmdUeXBlLCBJbmRleGluZ1R5cGVMb2NrSXNIZWxkLCBJ
bmRleGluZ1R5cGVMb2NrSGFzUGFya2VkPiBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOworCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw5IEBAIGJvb2wg
SlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAg
ICAKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRl
cmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAKKyAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNjMsMTMg
KzEwNjUsMTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAg
IC8vIE5lZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBhcm91bmQgdGhlIHVuc2hpZnRDb3VudFNsb3dD
YXNlKCksIHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBidXR0ZXJmbHkgaW4KICAgICAvLyBhIHdlaXJk
IHN0YXRlOiBzb21lIHBhcnRzIG9mIGl0IHdpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLCB3aGlj
aCB3ZSB3aWxsIGZpbGwgaW4gaGVyZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Cisg
ICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CiAgICAgCiAgICAgaWYgKG1v
dmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewogICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVj
dHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsKICAgICAgICAg
c3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsKLSAgICAgICAg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0
aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZSh2
bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkwLDYgKzEwOTQsNyBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2kgKyBzdGFydEluZGV4XS5j
bGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAs
MzIgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwogICAgIGJvb2wgaW5oZXJp
dHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigp
IGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBidWlsdC1pbiBsb2NrLiBDdXJy
ZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYgeW91IG5lZWQgaXQuIEl0J3MK
KyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRoYXQgdGhpcyBsb2NrIGlzIGN1
cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydzCisgICAgLy8gb3JkZXJpbmcg
d2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3RydWN0dXJlIGxvY2sgbXVzdCBi
ZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2tJbnRlcm5hbExvY2soKTsKKyAgICB2b2lk
IHVubG9ja0ludGVybmFsTG9jaygpOworICAgIAorICAgIGNsYXNzIEludGVybmFsTG9ja2VyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEludGVybmFsTG9ja2VyKEpTQ2VsbCogY2VsbCkKKyAgICAg
ICAgICAgIDogbV9jZWxsKGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+bG9j
a0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+SW50ZXJuYWxM
b2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPnVubG9ja0ludGVybmFsTG9j
aygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTQ2VsbCog
bV9jZWxsOworICAgIH07CiAKICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0OworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3Q7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSgpIGNvbnN0OwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Q7
CkBAIC0xNjcsNiArMTkxLDE2IEBAIHB1YmxpYzoKICAgICBDZWxsU3RhdGUgY2VsbFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAgICB2b2lkIHNldENlbGxTdGF0
ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2VsbCo+KHRoaXMpLT5tX2Nl
bGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNl
bGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1Jl
bGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0KKworICAgIENl
bGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcoQ2VsbFN0YXRlIG9s
ZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjph
dG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3Rh
dGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQog
ICAgIHsKQEAgLTE4Myw5ICsyMTcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTQ2VsbCwgbV90eXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90
IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgLy8gRE8gTk9UIHN0b3JlIHRvIHRoaXMgZmllbGQu
IEFsd2F5cyB1c2UgYSBDQVMgbG9vcCwgc2luY2Ugc29tZSBiaXRzIGFyZSBmbGlwcGVkIHVzaW5n
IENBUworICAgIC8vIGZyb20gb3RoZXIgdGhyZWFkcyBkdWUgdG8gdGhlIGludGVybmFsIGxvY2su
IE9uZSBleGNlcHRpb246IHlvdSBkb24ndCBuZWVkIHRoZSBDQVMgaWYgdGhlCisgICAgLy8gb2Jq
ZWN0IGhhcyBub3QgZXNjYXBlZCB5ZXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5
cGVBbmRNaXNjT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNDZWxsLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNDZWxsLCBtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJk
aWZmX3QgY2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIyOCw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBTdHJ1Y3R1cmVJRCBt
X3N0cnVjdHVyZUlEOwotICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKKyAgICBJbmRl
eGluZ1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNjOyAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBm
aWVsZC4gQWx3YXlzIENBUy4KICAgICBKU1R5cGUgbV90eXBlOwogICAgIFR5cGVJbmZvOjpJbmxp
bmVUeXBlRmxhZ3MgbV9mbGFnczsKICAgICBDZWxsU3RhdGUgbV9jZWxsU3RhdGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxs
KENyZWF0aW5nRWFybHlDZWxsVAogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJlLT5pZCgpKQotICAg
ICwgbV9pbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAsIG1faW5k
ZXhpbmdUeXBlQW5kTWlzYyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
KSkKICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9m
bGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCiAgICAgLCBtX2Nl
bGxTdGF0ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQpAQCAtNzQsNyArNzQsNyBAQCBpbmxpbmUgdm9p
ZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgaWYgKHN0cnVjdHVyZSkgewogI2Vu
ZGlmCiAgICAgICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgIG1f
aW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgbV9pbmRl
eGluZ1R5cGVBbmRNaXNjID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
KCk7CiAgICAgICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CiAgICAg
ICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAj
aWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkBAIC05MSw5ICs5MSwxNCBAQCBpbmxpbmUgSlNUeXBl
IEpTQ2VsbDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHlwZTsKIH0KIAoraW5saW5lIElu
ZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2luZGV4aW5nVHlwZUFuZE1pc2M7Cit9CisKIGlubGluZSBJbmRleGluZ1R5cGUgSlND
ZWxsOjppbmRleGluZ1R5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2luZGV4aW5nVHlwZTsK
KyAgICByZXR1cm4gaW5kZXhpbmdUeXBlQW5kTWlzYygpICYgQWxsQXJyYXlUeXBlczsKIH0KIAog
aW5saW5lIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdApAQCAtMTk1LDE3ICsy
MDAsMjcgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQSVZhbHVlV3JhcHBlcigpIAogICAgIHJl
dHVybiBtX3R5cGUgPT0gQVBJVmFsdWVXcmFwcGVyVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlND
ZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0FMV0FZU19J
TkxJTkUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IHRoaXMtPnN0cnVj
dHVyZSgpLT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1Y3R1cmUoKQogICAg
ICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRh
YmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKLSAgICB2bS5oZWFwLndy
aXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CiAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICBtX2ZsYWdzID0gc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogICAgIG1fdHlwZSA9IHN0cnVj
dHVyZS0+dHlwZUluZm8oKS50eXBlKCk7Ci0gICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUgPSBzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICBpZiAobV9pbmRleGlu
Z1R5cGVBbmRNaXNjICE9IG5ld0luZGV4aW5nVHlwZSkgeworICAgICAgICBBU1NFUlQoIShuZXdJ
bmRleGluZ1R5cGUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpKTsKKyAgICAgICAgZm9yICg7
OykgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG9sZFZhbHVlID0gbV9pbmRleGluZ1R5cGVB
bmRNaXNjOworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1ZhbHVlID0gKG9sZFZhbHVlICYg
fkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSB8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpOworICAgICAgICAgICAgaWYgKFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdl
V2Vha1JlbGF4ZWQoJm1faW5kZXhpbmdUeXBlQW5kTWlzYywgb2xkVmFsdWUsIG5ld1ZhbHVlKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB2bS5oZWFwLndy
aXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgY29uc3QgTWV0aG9kVGFi
bGUqIEpTQ2VsbDo6bWV0aG9kVGFibGUoKSBjb25zdApAQCAtMjg0LDExICsyOTksMjYgQEAgaW5s
aW5lIHZvaWQgSlNDZWxsOjpjYWxsRGVzdHJ1Y3RvcihWTSYgdgogICAgIGlmIChpc1phcHBlZCgp
KQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHN0cnVjdHVyZUlEKCkpOwotICAgIGlmIChp
bmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpCi0gICAgICAgIHN0cnVjdHVy
ZSh2bSktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwotICAgIGVsc2UK
KyAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB7CisgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAg
ICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8t
Pm1ldGhvZFRhYmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kodGhpcyk7CisgICAgfSBlbHNl
CiAgICAgICAgIGpzQ2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KHRoaXMpLT5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKICAgICB6YXAoKTsKIH0KIAoraW5saW5lIHZv
aWQgSlNDZWxsOjpsb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBl
PiogbG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5n
VHlwZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OmxvY2soKmxvY2sp
OworfQorCitpbmxpbmUgdm9pZCBKU0NlbGw6OnVubG9ja0ludGVybmFsTG9jaygpCit7CisgICAg
QXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5n
VHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxn
b3JpdGhtOjp1bmxvY2soKmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEyLDE3ICsxMTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0
Ojp2aXNpdEJ1dHRlcgogICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlz
aXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0
b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgCi0gICAgLy8gTWFyayB0aGUgYXJyYXkgaWYg
YXBwcm9wcmlhdGUuCi0gICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgeworCisgICAg
SW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHN3
aXRjaCAob2xkVHlwZSkgewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91
cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9y
LCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlm
IChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKLSAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Cisg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAvLyBU
aGlzIGxvY2sgaXMgaGVyZSB0byBwcm90ZWN0IENvbnRpZ3VvdXMtPkFycmF5U3RvcmFnZSB0cmFu
c2l0aW9ucywgYnV0IHdlIGNvdWxkIG1ha2UgdGhhdAorICAgICAgICAvLyByYWNlIHdvcmsgaWYg
d2UgbmVlZGVkIHRvLgorICAgICAgICBKU0NlbGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlz
KTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1R5cGUgPSB0aGlzLT5pbmRleGluZ1R5cGUoKTsK
KyAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgICAgIHN3aXRjaCAo
bmV3VHlwZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1
b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OiAvLyBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcCkKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTE0NiwxMCArMTU3LDM0IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVy
Zmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0
QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0
b3Iudm0oKSkpOwotCisgICAgLy8gV2Ugd2FudCB0byBkZWZlbmQgYWdhaW5zdCBtdWx0aXBsZSBw
b3NzaWJsZSByYWNlcyB3aXRoIHRoZSBtdXRhdG9yOgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBp
bnN0YWxsIGEgYmlnZ2VyIGJ1dHRlcmZseSBhbmQgdGhlbiBpbnN0YWxsIGEgc3RydWN0dXJlIHRo
YXQgY2xhaW1zIG1vcmUKKyAgICAvLyAgIHByb3BlcnRpZXMuIFRoaXMgdHJpdmlhbGx5IHdvcmtz
LgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBtdXRhdGUgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJl
LiBIZW5jZSwgd2UgaG9sZCB0aGUgc3RydWN0dXJlIGxvY2sgZm9yCisgICAgLy8gICBkaWN0aW9u
YXJ5IHN0cnVjdHVyZXMuCisgICAgLy8gLSBUaGUgYnV0dGVyZmx5IGNvdWxkIHNocmluaywgYnV0
IHRoaXMgY291bGQgb25seSBoYXBwZW4gaWYgdGhlIG9iamVjdCB3YXMgYSBkaWN0aW9uYXJ5Lgor
ICAgIC8vICAgVXN1YWxseSwgdGhpcyBtZWFucyB0aGF0IHdlIHdvdWxkIGdldCB0aGUgZGljdGlv
bmFyeSBzdHJ1Y3R1cmUgYW5kIGFjcXVpcmUgYSBsb2NrLiBUaGF0CisgICAgLy8gICB0cml2aWFs
bHkgd29ya3MuIEJ1dCB3ZSBjb3VsZCBsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBvYmpl
Y3QgYmVjYW1lIGEgZGljdGlvbmFyeQorICAgIC8vICAgYW5kIHRoZW4gbG9hZCB0aGUgYnV0dGVy
Zmx5IHRoYXQgd2FzIHNocnVuay4gV2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgY2FzZSBieSBjaGVj
a2luZworICAgIC8vICAgdGhlIHN0cnVjdHVyZSBhIHNlY29uZCB0aW1lIGJlZm9yZSBzY2Fubmlu
ZyB0aGUgYnV0dGVyZmx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGJ1dHRlcmZseQorICAgIC8vICAg
aXMgYXQgd29yc3QgdGhlIGJ1dHRlcmZseSB0aGF0IHRoZSBtdXRhdG9yIGhhZCBpbnN0YWxsZWQg
anVzdCBwcmlvciB0byBmbGlwcGluZyB0aGUKKyAgICAvLyAgIHN0dXJjdHVyZS4gU28gaWYgdGhl
IHN0cnVjdHVyZSB3ZSBzZWUgaXMgYSBub24tZGljdGlvbmFyeSB0aGVuIHRoZSBidXR0ZXJmbHkg
Y2Fubm90IHlldAorICAgIC8vICAgaGF2ZSBiZWVuIHNocnVuay4KKyAgICBWTSYgdm0gPSB2aXNp
dG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCku
bG9jaygpOworICAgIH0gZWxzZQorICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBp
ZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkg
eworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZUlEKCkgPT0gc3RydWN0dXJlLT5pZCgpKQorICAgICAgICAgICAgdGhpc09iamVj
dC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0K
KyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2Nr
KCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0
aW9uOwogI2VuZGlmCkBAIC0yMDQsMTUgKzIzOSwyNSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNP
YmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAg
ICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVj
dHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZs
eSgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBpZiAoc3RydWN0
dXJlLT5pZCgpID09IHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7Cisg
ICAgfQogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCk7
CiAgICAgaWYgKHN0b3JhZ2VTaXplKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKLQorICAgIGlmICh3
YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0
TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5k
aWYKQEAgLTY2Niw3ICs3MTEsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rp
b25hcnlJCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAw
OwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsK
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRo
aXMsIG1hcCk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpOwogfQpAQCAtNzMxLDcgKzc3Nyw5IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0s
IGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
OjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZt
LCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CiB9CiAKQEAgLTc0Miw3
ICs3OTAsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAg
ICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
c0ludDMyKCk7CiB9CiAKQEAgLTc1Myw3ICs4MDMsOSBAQCBDb250aWd1b3VzRG91YmxlcyBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91
YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVy
ZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
RG91YmxlKCk7CiB9CiAKQEAgLTc2NCw3ICs4MTYsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJu
IG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCkBAIC03OTcsNyArODUxLDkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1
cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlT
dG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkp
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04ODAsNyArOTM2LDkgQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5z
ZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gc3RvcmFnZTsKIH0K
IApAQCAtOTM1LDcgKzk5Myw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQz
MlRvQXIKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7
Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3Jh
Z2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1
dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtOTgxLDcg
KzEwNDEsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJm
bHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVj
dHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTEwMDYsNyArMTA2OCwyMiBA
QCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFu
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisK
KyAgICAvLyBUaGlzIGhhcyBhIGNyYXp5IHJhY2Ugd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Iu
IFdoZW4gY2hhbmdpbmcgdGhlIGJ1dHRlcmZseSBhbmQgc3RydWN0dXJlLAorICAgIC8vIHRoZSBt
dXRhdG9yIGFsd2F5cyBzZXRzIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gVGhlIGNvbGxlY3RvciB3aWxs
IGFsd2F5cyByZWFkIHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBmaXJzdC4gV2UgcHJvYmFibHkgaGF2
ZSB0byBmb2xsb3cgdGhhdCBjb252ZW50aW9uIGhlcmUgYXMgd2VsbC4gVGhpcyBtZWFucyB0aGF0
IHRoZSBjb2xsZWN0b3IKKyAgICAvLyB3aWxsIHNvbWV0aW1lcyBzZWUgdGhlIG5ldyBidXR0ZXJm
bHkgKHRoZSBvbmUgd2l0aCBBcnJheVN0b3JhZ2UpIHdpdGggdGhlIG9ubHkgc3RydWN0dXJlICh0
aGUKKyAgICAvLyBvbmUgdGhhdCBzYXlzIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBDb250aWd1b3Vz
KS4gV2hlbiBzY2FubmluZyBDb250aWd1b3VzLCB0aGUgY29sbGVjdG9yIHdpbGwKKyAgICAvLyBt
YXJrIHdvcmQgYXQgYWRkcmVzc2VzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYnV0dGVy
Zmx5IHBvaW50ZXIsIHVwIHRvIHRoZSBwdWJsaWNMZW5ndGgKKyAgICAvLyBpbiB0aGUgYnV0dGVy
Zmx5LiBCdXQgYW4gQXJyYXlTdG9yYWdlIGhhcyBzb21lIG5vbi1wb2ludGVyIGhlYWRlciBkYXRh
IGF0IGxvdyBwb3NpdGl2ZQorICAgIC8vIG9mZnNldHMgZnJvbSB0aGUgYnV0dGVyZmx5IC0gc28g
d2hlbiB0aGlzIHJhY2UgaGFwcGVucywgdGhlIGNvbGxlY3RvciB3aWxsIHN1cmVseSBjcmFzaAor
ICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBmYWlsIHRvIGRlY29kZSB0d28gY29uc2VjdXRpdmUgaW50
MzJzIGFzIGlmIGl0IHdhcyBhIEpTVmFsdWUuCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwg
d2UgaGF2ZSB0aGUgSlNDZWxsIGxvY2sgZm9yIHRoaXMgcHVycG9zZSEKKyAgICAKKyAgICBJbnRl
cm5hbExvY2tlciBsb2NrZXIodGhpcyk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdl
LT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAg
IHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0xNDY4LDcgKzE1NDUsNyBAQCBib29sIEpTT2Jq
ZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0
dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtd
IChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBvZmZzZXQpKTsKIApAQCAtMjcyNSw3ICsyODAyLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVh
c2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5n
dGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAg
ICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApA
QCAtMjc0Miw3ICsyODIwLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgo
Vk0mIAogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5j
bGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
aW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjc2Miw2ICsyODQxLDcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xv
dyhWTSYgdm0sIAogICAgIAogICAgIHVuc2lnbmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAg
ICAgIEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNh
cGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
bnVsbHB0cjsKICAgICBpZiAoYXZhaWxhYmxlT2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3Rv
ciBsZW5ndGggdGhhdCBjYXVzZWQgaW50ZXJuYWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4g
SWYgd2UgZGlkIG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkg
YmV0IHdlIHdpbGwgbWVzcwpAQCAtMjc3NiwxNyArMjg1NiwyNCBAQCBib29sIEpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0
dGVyZmx5KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAg
IGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAo
aGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
bGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRl
cmZseS0+aW5kZXhpbmdQYXlsb2FkPGRvdWJsZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9y
TGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVh
cigpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVy
PFVuZGVmaW5lZD4+KClbaV0uY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAobmV3QnV0dGVyZmx5
KSB7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNl
dCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjgwMiwxMiArMjg4
OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0
aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxl
bmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3
QnV0dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3Jh
Z2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpT
T2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAK
QEAgLTMwOTIsMTUgKzMxODAsMzMgQEAgdm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFy
eShWTSYgdgogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQog
Ci12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhWTSYgdm0sIHNp
emVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0
ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90
IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikK
IHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwotICAgIHNp
emVfdCBwcmVDYXBhY2l0eSA9IHRoaXMtPmJ1dHRlcmZseVByZUNhcGFjaXR5KCk7Ci0gICAgdm9p
ZCogY3VycmVudEJhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2Fw
YWNpdHksIG91dE9mTGluZUNhcGFjaXR5QmVmb3JlKTsKKyAgICAvLyBUaGlzIGNvdWxkIGludGVy
bGVhdmUgdmlzaXRDaGlsZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZl
IGJlZW4gYSBub24KKyAgICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBj
cmF6eSBjYXJlZnVsLiBCdXQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKKyAgICAv
LyB0aGUgc3RydWN0dXJlJ3MgbG9jayByaWdodCBub3csIGFuZCB0aGF0IGhlbHBzIGEgYml0Lgor
ICAgIAorICAgIEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7Cisg
ICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5C
eXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gaGFzSW5kZXhpbmdIZWFkZXIoKTsK
KyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFj
aXR5ID0gYnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUp
OworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IGJ1dHRlcmZseS0+aW5kZXhp
bmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgdGhpcywgcHJlQ2FwYWNpdHksIG91
dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyk7CiAKLSAgICBtZW1tb3ZlKG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCB0aGlzLT5i
dXR0ZXJmbHlUb3RhbFNpemUoKSk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0Jhc2UsIHByZUNhcGFjaXR5LCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKSk7CisgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJm
bHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQq
IG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFj
aXR5QmVmb3JlKTsKKworICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwog
fQogCiB1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1
YmxpYzoKICAgICBib29sIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0
dXJlKCktPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3Rh
dGljUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRl
cmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZN
JiwgQnV0dGVyZmx5Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0
ZU1vcmVPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsK
ICAgICAgICAgCisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3
YXlzIGNoYW5nZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQog
ICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTks
NyArNzU4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRl
bkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0
dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3Jl
LCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZs
eUFmdGVyRmxhdHRlbmluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBzaXplX3Qg
b3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsK
IAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdAogICAgIHsKQEAgLTEy
MDUsMTQgKzEyMDQsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25z
CiAgICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwot
ICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0ZXJm
bHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0
dXJlKTsKLX0KLQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIyMCw3
ICsxMjExLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgogICAg
IEpTQ2VsbDo6c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBK
U09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZN
JiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0
aGlzLCBidXR0ZXJmbHkpOwogfQpAQCAtMTI4Miw3ICsxMjczLDcgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICByZXR1cm4gZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOwogICAgIH0KLQorICAgIAogICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMgb24gdGhp
cyBtZXRob2QgbmV2ZXIgcmV0dXJuaW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNTRVJUKCFw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwogCkBAIC0xNDE3LDE2ICsxNDA4LDIwIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgaWYgKChtb2RlID09
IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmICh0aGlz
LT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdP
dXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVj
dHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0
cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkgeworICAgICAgICAgICAgICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dl
c3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0QnV0dGVyZmx5
KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2
YWxpZGF0ZU9mZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0
KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNl
dChvZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAg
ICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmli
dXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRh
aW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CkBAIC0xNDQ1LDEzICsxNDQwLDE1IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBu
ZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChu
ZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGFs
bG9jYXRlTW9yZU9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAg
IH0KIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE0OTgsMTMgKzE0OTUsMTMgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHNpemVfdCBvbGRDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBzaXplX3QgbmV3Q2FwYWNp
dHkgPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgQVNTRVJUKG9sZENh
cGFjaXR5IDw9IG5ld0NhcGFjaXR5KTsKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNp
dHkpCi0gICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2
bSwgb2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgaWYgKG9sZENhcGFj
aXR5ICE9IG5ld0NhcGFjaXR5KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
YWxsb2NhdGVNb3JlT2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgIH0KICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICBzbG90LnNldE5ld1By
b3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAg
ICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAt
MTU1NiwxNSArMTU1MywxOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91
dFRyCiAgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZs
eSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgp
KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT2ZMaW5lU3RvcmFnZSh2bSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcyk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJl
LT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwotICAgIGJvb2wgc2hvdWxkT3B0aW1p
emUgPSBmYWxzZTsKLSAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlv
bih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUpOwotICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwotICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAg
ICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwor
ICAgICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICAgICAgc3Ry
dWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAg
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKIH0KIAogQUxX
QVlTX0lOTElORSBKU09iamVjdCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NCw2ICsxODQsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikg
XAorICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihib29sLCBjb2xsZWN0Q29udGludW91c2x5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwg
bnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJy
YXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSw3IEBAIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmEK
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogfTsKIAorLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8g
aGF2ZSBhIGxvY2sgaW4gaXQuCiBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIGZpbmFsIDogcHVi
bGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDYgQEAKIAogI2RlZmluZSBEVU1QX1NUUlVDVFVSRV9J
RF9TVEFUSVNUSUNTIDAKIAotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBf
Q09OU1RFTkNZX0NIRUNLIDAKLSNlbHNlCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5D
WV9DSEVDSyAwCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFj
ZSBXVEY7CiAKQEAgLTYyMSwxMyArNjE1LDEzIEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6
dGFrZVByb3BlcnR5VGEKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRy
YW5zaXRpb25LaW5kKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXMo
dHJhbnNpdGlvbktpbmQpOwotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRl
eGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5z
aXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAgIAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdUeXBl
KHRyYW5zaXRpb25LaW5kKSkgewogICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHN0cnVjdHVyZS0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAgIGlm
IChnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFs
QXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhp
bmdUeXBlKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmpl
Y3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1
cmUoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAg
ICB9CkBAIC02MzgsNyArNjMyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdAogICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICghc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJl
LT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFTU0VS
VChleGlzdGluZ1RyYW5zaXRpb24tPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmlidXRl
cyk7Ci0gICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdU
cmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAg
ICAgfQogICAgIApAQCAtNjQ2LDcgKzY0MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXQKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMo
YXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShpbmRl
eGluZ1R5cGUpOworICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChw
cmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlvbktpbmQpKQogICAgICAgICB0cmFuc2l0aW9uLT5z
ZXREaWRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVlKTsKQEAgLTczNiw2ICs3MzAsOCBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiB7CiAgICAgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpOwogICAgIEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7CisgICAgCisgICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKIAogICAgIHNpemVfdCBiZWZvcmVP
dXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKQEAgLTc3MywzOCArNzY5LDE3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgLy8gSWYgdGhlIG9iamVj
dCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5pbmcvY29tcGFjdGluZyB3ZSBubyBs
b25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0
IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0
aGUgc2l6ZSBmb3IgY29weWluZy4KICAgICAgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYg
IWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVj
dCkpCi0gICAgICAgICAgICBvYmplY3QtPnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhp
cywgMCk7CisgICAgICAgICAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgbnVsbHB0cik7CiAg
ICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIGRvd24tc2l6ZWQgdG8gdGhlIHBvaW50IHdoZXJl
IHRoZSBiYXNlIG9mIHRoZSBCdXR0ZXJmbHkgaXMgbm8gbG9uZ2VyIHdpdGhpbiB0aGUgCiAgICAg
ICAgIC8vIGZpcnN0IENvcGllZEJsb2NrOjpibG9ja1NpemUgYnl0ZXMsIHdlJ2xsIGdldCB0aGUg
d3JvbmcgYW5zd2VyIGlmIHdlIHRyeSB0byBtYXNrIHRoZSBiYXNlIGJhY2sgdG8gCiAgICAgICAg
IC8vIHRoZSBDb3BpZWRCbG9jayBoZWFkZXIuIFRvIHByZXZlbnQgdGhpcyBjYXNlIHdlIG5lZWQg
dG8gbWVtbW92ZSB0aGUgQnV0dGVyZmx5IGRvd24uCiAgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+
YnV0dGVyZmx5KCkpCi0gICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0
dGVuaW5nKHZtLCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSwgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0
eSk7CisgICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGxv
Y2tlciwgdm0sIGJlZm9yZU91dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5
KTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpczsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmlu
Zyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQotewotICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQot
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJl
dHVybiByZW1vdmUocHJvcGVydHlOYW1lKTsKLX0KLQogdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCiB7
CiAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CkBAIC05ODksNDkgKzk2NCwxMiBAQCBWZWN0
b3I8UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAKIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKIHsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2ssIHZtLmhlYXApOwotICAgIAotICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2
bSwgcHJvcGVydHlOYW1lKSkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGlmIChh
dHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAgICAg
IHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7Ci0K
LSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2NrZXIsIHZtKTsKLQotICAgIFBy
b3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUoKS0+bmV4dE9mZnNldChtX2lu
bGluZUNhcGFjaXR5KTsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5TWFwRW50
cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICByZXR1cm4gbmV3T2Zmc2V0OworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0
eU9mZnNldCkgeyB9KTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGF1dG8gcmVw
ID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVy
YXRvciBwb3NpdGlvbiA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChyZXApOwotICAgIGlmICghcG9z
aXRpb24uZmlyc3QpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKLQotICAgIHByb3BlcnR5
VGFibGUoKS0+cmVtb3ZlKHBvc2l0aW9uKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZERlbGV0
ZWRPZmZzZXQob2Zmc2V0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4g
b2Zmc2V0OworICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3Vy
cmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVy
ZTo6Y3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZN
JiB2bSwgdW5zaWduZWQgY2FwYWNpdHkpCkBAIC0xMTE0LDYgKzEwNTIsOSBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkpCiAg
ICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKQEAgLTEy
NzYsOTIgKzEyMTcsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIoUHJpbnRT
CiAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwogfQogCi0jaWYgRE9fUFJPUEVSVFlNQVBf
Q09OU1RFTkNZX0NIRUNLCi0KLXZvaWQgUHJvcGVydHlUYWJsZTo6Y2hlY2tDb25zaXN0ZW5jeSgp
Ci17Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID49IFByb3BlcnR5VGFibGU6Ok1pbmltdW1UYWJs
ZVNpemUpOwotICAgIEFTU0VSVChtX2luZGV4TWFzayk7Ci0gICAgQVNTRVJUKG1faW5kZXhTaXpl
ID09IG1faW5kZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJUKCEobV9pbmRleFNpemUgJiBtX2luZGV4
TWFzaykpOwotCi0gICAgQVNTRVJUKG1fa2V5Q291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAg
ICBBU1NFUlQobV9rZXlDb3VudCArIG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gMik7
Ci0gICAgQVNTRVJUKG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gNCk7Ci0KLSAgICB1
bnNpZ25lZCBpbmRleENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX2luZGV4U2l6ZTsgKythKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX2luZGV4W2FdOwotICAgICAgICBpZiAoZW50
cnlJbmRleCA9PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZEVudHJ5SW5kZXgoKSkg
ewotICAgICAgICAgICAgKytkZWxldGVkSW5kZXhDb3VudDsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IDwgZGVsZXRlZEVudHJ5SW5k
ZXgoKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IC0gMSA8PSB1c2VkQ291bnQoKSk7Ci0g
ICAgICAgICsraW5kZXhDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGIgPSBhICsgMTsg
YiAhPSBtX2luZGV4U2l6ZTsgKytiKQotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhbYl0gIT0g
ZW50cnlJbmRleCk7Ci0gICAgfQotICAgIEFTU0VSVChpbmRleENvdW50ID09IG1fa2V5Q291bnQp
OwotICAgIEFTU0VSVChkZWxldGVkSW5kZXhDb3VudCA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0KLSAg
ICBBU1NFUlQoIXRhYmxlKClbZGVsZXRlZEVudHJ5SW5kZXgoKSAtIDFdLmtleSk7Ci0KLSAgICB1
bnNpZ25lZCBub25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9IDA7
IGMgPCB1c2VkQ291bnQoKTsgKytjKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IHRhYmxl
KClbY10ua2V5OwotICAgICAgICBpZiAocmVwID09IFBST1BFUlRZX01BUF9ERUxFVEVEX0VOVFJZ
X0tFWSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICArK25vbkVtcHR5RW50cnlDb3Vu
dDsKLSAgICAgICAgdW5zaWduZWQgaSA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCk7Ci0g
ICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4OwotICAg
ICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1faW5kZXhbaSAmIG1f
aW5kZXhNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRyeUluZGV4ICE9IFByb3BlcnR5VGFi
bGU6OkVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVwID09IHRhYmxlKClbZW50
cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
IChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKElkZW50aWZpZXJS
ZXBIYXNoOjpoYXNoKHJlcCkpOwotICAgICAgICAgICAgaSArPSBrOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChlbnRyeUluZGV4ID09IGMgKyAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobm9u
RW1wdHlFbnRyeUNvdW50ID09IG1fa2V5Q291bnQpOwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSkgewotICAgICAgICBQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgICAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGl0ZXItPmF0
dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5rZXktPmlz
U3ltYm9sKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotfQotCi0j
ZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KIGJvb2wgQ2xhc3NJbmZv
OjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgZm9y
IChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNzKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MSw5ICsxOTEsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24u
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAg
ICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJv
cGVydHlOYW1lKTsKKyAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uIFZl
cnNpb25zIHRoYXQgdGFrZSBhIGZ1bmMgd2lsbCBjYWxsIGl0IGFmdGVyIG1ha2luZyB0aGUKKyAg
ICAvLyBjaGFuZ2UgYnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2suIFRoZSBjYWxsYmFj
ayBpcyBub3QgY2FsbGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5nZQorICAgIC8vIGJlaW5nIG1hZGUs
IGxpa2UgaWYgeW91IGNhbGwgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0
aGUgcHJvcGVydHkgaXMgbm90CisgICAgLy8gZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAg
dm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90
eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAK
ICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkg
IT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CkBAIC0yMjksOCArMjM0LDggQEAgcHVibGljOgogICAg
IFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5m
bygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxh
Z3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNP
YmplY3QoKTsgfQogCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Yi5pbmRleGluZ1R5cGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJy
YXlUeXBlczsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsg
fQogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0
CiAgICAgewpAQCAtNDMzLDkgKzQzOCw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJs
b2I6OmluZGV4aW5nVHlwZU9mZnNldCgpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeU9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHBy
b3BlcnR5VGFibGVVbnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYgKzU4NCw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAg
IAorICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAg
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTYzMywxMCArNjQwLDE0
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRk
KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNv
bnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAot
ICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciYsIFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBW
TSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7
CiAKICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3BlcnR5VGFibGUoKTsKQEAg
LTY5Nyw3ICs3MDgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgYm9v
bCBpc1ZhbGlkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFp
bikgY29uc3Q7CiAgICAgICAgIAotICAgIHZvaWQgcGluKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwaW4oKTsKICAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKICAgICAKICAgICBib29s
IGlzUmFyZURhdGEoSlNDZWxsKiBjZWxsKSBjb25zdApAQCAtNzEwLDcgKzcyMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwog
ICAgIH0KLSAgICAgICAgCisKICAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25z
dDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShWTSYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9i
LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlEQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIHUuZG91YmxlV29yZCA9IDB4YmJhZGJlZWY7CiAgICAgfQogCi0gICAgU3Ry
dWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCisgICAgU3RydWN0dXJlSURCbG9iKFN0
cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQogICAgIHsKICAgICAgICAgdS5maWVs
ZHMuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmVJRDsKLSAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdU
eXBlID0gaW5kZXhpbmdUeXBlOworICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgdS5maWVs
ZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5maWVsZHMuaW5saW5lVHlwZUZs
YWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7CiAgICAgICAgIHUuZmllbGRzLmRlZmF1
bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6Ok5ld1doaXRlOwpAQCAtNTIsOCArNTIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlSURCbG9iJiBvdGhlcikgeyB1
LmRvdWJsZVdvcmQgPSBvdGhlci51LmRvdWJsZVdvcmQ7IH0KICAgICAKICAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnN0cnVjdHVyZUlEOyB9Ci0g
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlu
ZGV4aW5nVHlwZTsgfQotICAgIHZvaWQgc2V0SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOyB9CisgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVy
biB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9CisgICAgdm9pZCBzZXRJ
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KSB7IHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBp
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9CiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiB1LmZpZWxkcy50eXBlOyB9CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBp
bmxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3M7
IH0KICAgICAKQEAgLTY3LDE2ICs2NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCk7CiAgICAg
fQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewot
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMu
aW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJ
REJsb2IsIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIH0KIAog
cHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGU7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eTsKICAgICAgICAgICAgIEpTVHlwZSB0eXBlOwogICAgICAgICAgICAgVHlwZUluZm86OklubGlu
ZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3M7CiAgICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVs
dENlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Miw2
ICsyOTIsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZQogICAg
IHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVu
Y3koKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKK30KKwogaW5saW5lIHNpemVf
dCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KHNpemVfdCBjdXJyZW50Q2FwYWNpdHkpCiB7
CiAgICAgaWYgKCFjdXJyZW50Q2FwYWNpdHkpCkBAIC0zMTEsNCArMzE2LDgwIEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJlRGF0YSgpLT5zZXRPYmpl
Y3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xT
bG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgR0NTYWZlQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICAKKyAgICBBU1NFUlQoIUpT
Qzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9y
RW51bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7
CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAo
bG9ja2VyLCB2bSk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRh
YmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgCisgICAgcHJvcGVydHlU
YWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyks
IG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisKKyAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgbmV3T2Zmc2V0KTsKKyAg
ICByZXR1cm4gbmV3T2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBhdXRvIHJlcCA9
IHByb3BlcnR5TmFtZS51aWQoKTsKKworICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKKworICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0
b3IgcG9zaXRpb24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKKyAgICBpZiAoIXBvc2l0
aW9uLmZpcnN0KQorICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAKKyAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OworCisgICAgcHJvcGVy
dHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVs
ZXRlZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVu
Yyhsb2NrZXIsIG9mZnNldCk7CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5u
aW5nKHZtLCBkZWZlckdDKTsKKyAgICAKKyAgICBwaW4oKTsKKyAgICAKKyAgICByZXR1cm4gYWRk
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOworCisgICAgcGluKCk7Cisg
ICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1bmMpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0
Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1
MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICov
OyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0
MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJC
NjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxp
cEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9t
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2
MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3
IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3
MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9j
a0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3Jp
dGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3
QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZC
NEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyog
SGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0
MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0Mg
LyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAq
LywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovLAog
CQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQk1MTNFMTcw
QTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9yLmggKi8sCiAJCQkJQThBNDcy
QzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICovLApAQCAtMTMyMyw2ICsxMzI2
LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlS
YW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhG
QiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQz
QTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRkNE
REUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAg
c2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlzdEhhc2hTZXQuaAog
ICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5oCiAgICAgTUQ1LmgK
ICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcs
MTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNvcnRlZExpc3RE
dW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsK
K3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsK
IHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7
CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIwICsy
NiwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2suaCIKIAotI2luY2x1
ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0jaW5jbHVkZSAiU3RyaW5n
UHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCi0jaW5jbHVk
ZSA8dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQordm9p
ZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0K
LSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBv
biBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1p
dCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1
cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMg
dG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQp
Ci0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNw
dW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3Bpbkxp
bWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0
IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAotICAgICAgICAvLyBpZiB0
aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAg
ICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNv
IGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KLSAgICAgICAgUGFya2luZ0xv
dDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBh
cmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7Ci0gICAgICAgIGlm
IChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAgICAgICAgY2FzZSBEaXJlY3RI
YW5kb2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZlciByZWxlYXNlZC4g
SXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRoYXQgZGlkCi0gICAg
ICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2Nr
KCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZl
IGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIg
dGhlIGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdl
LCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBi
eXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKLSAgICAgICAgLy8gYXJvdW5k
IGFuZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xv
dyhtX2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKIHsKLSAgICB1bmxv
Y2tTbG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93
KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7CiB9CiAKIHZvaWQgTG9ja0Jh
c2U6OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKEZhaXIpOwotfQot
Ci1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MgZmFp
cm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMg
aW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAv
LyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBu
b3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJlIGhlbGQgYW5kIHBh
cmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5n
LgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0
IHx8IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCkgewotICAgICAgICAgICAg
aWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5
IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdl
IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFs
bG93IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZl
IHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBz
dGlsbAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KLSAgICAgICAgQVNTRVJUKG9s
ZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIFBhcmtp
bmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUsCi0gICAgICAgICAgICBbJl0g
KFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhl
IGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdl
IHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhy
ZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2Ug
aGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0gICAgICAgICAgICAgICAgICAg
IC8vIHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1v
cmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUuc3RvcmUoaGFzUGFya2VkQml0
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9y
ZSgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0
aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6RmFpcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVm
IFdURl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRo
bS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3BlY3RvcjsKIAogbmFtZXNwYWNl
IFdURiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90LCAxLCAyPiBEZWZhdWx0TG9j
a0FsZ29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgb25s
eSByZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUK
IC8vIGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVuZGVkIGxvY2tpbmcgaXMgaW5s
aW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCiAvLyBoYW5kbGVkIGJ5
IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0IGlzIGNvbXBldGV0
aXZlIHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMgKzU0LDEzIEBAIG5hbWVzcGFj
ZSBXVEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAg
ICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJl
ZCEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvY2tTbG93KCk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tGYXN0KG1f
Ynl0ZSkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsKICAgICB9CiAKICAgICBib29sIHRyeUxv
Y2soKQogICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdWludDhfdCBjdXJy
ZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0
ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBj
dXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OnRyeUxv
Y2sobV9ieXRlKTsKICAgICB9CiAKICAgICAvLyBOZWVkIHRoaXMgdmVyc2lvbiBmb3Igc3RkOjp1
bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8g
Z3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2VjdGlvbnMgYWx3YXlzIGdldCBhIGZhaXIg
bG9jay4KICAgICB2b2lkIHVubG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdh
aXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tT
bG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9j
a0Zhc3QobV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KCk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBpcyBsaWtlIHVubG9jaygpIGJ1dCBpdCBndWFyYW50ZWVzIHRoYXQgd2UgdW5sb2Nr
IHRoZSBsb2NrIGZhaXJseS4gRm9yIHNob3J0IGNyaXRpY2FsCkBAIC0xMDMsMTcgKzkwLDEzIEBA
IHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gd2FudC4KICAgICB2b2lkIHVubG9ja0ZhaXJseSgp
CiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlz
SGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAv
LyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CisgICAgICAgIGlm
IChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3QobV9ieXRlKSkpCisg
ICAgICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdv
cml0aG06OmlzTG9ja2VkKG1fYnl0ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNv
bnN0CkBAIC0xMjYsMjEgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNv
bnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQ
YXJrZWRCaXQgPSAyOwotCisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Ns
b3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0g
RmFpcm5lc3MgewotICAgICAgICBGYWlyLAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZv
aWQgdW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAg
ICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCi0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9Owog
CiAgICAgLy8gTWV0aG9kIHVzZWQgZm9yIHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlS
ZXNldCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgV1RGX0xvY2tBbGdvcml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRo
bV9oCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNs
dWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2Nr
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2Nr
VHlwZSBoYXNQYXJrZWRCaXQ+CitjbGFzcyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2Nr
RmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2su
Y29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWxvY2tGYXN0KGxvY2spKSkKKyAg
ICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCB0
cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAg
ICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHVubG9jayhBdG9t
aWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF1bmxvY2tG
YXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgVW5mYWlyKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrRmFpcmx5KEF0b21pYzxMb2NrVHlwZT4mIGxv
Y2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQorICAg
ICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBGYWlyKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGJvb2wgaXNMb2NrZWQoY29uc3QgQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRC
aXQ7CisgICAgfQorICAgIAorICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCBsb2NrU2xvdyhB
dG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc3BpbkNvdW50
ID0gMDsKKworICAgICAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0
aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgICAgICBjb25zdCB1
bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisKKyAgICAgICAg
ICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAgICAgICAgICAgIGlmICgh
KGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAgICAgJiYgbG9jay5j
b21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBp
c0hlbGRCaXQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gSWYg
dGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBj
YW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0
ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAg
ICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFk
Ojp5aWVsZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFy
a2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAgICAg
ICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0
aW5nIGl0LgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkKKyAgICAgICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRC
eXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0
byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2Fu
IHBhcmsuCisgICAgICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQor
ICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBpc0hlbGRC
aXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJr
ZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVz
dWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFu
ZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRo
YXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4g
b3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8v
IG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBs
b29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhhdmUg
YXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2Vk
LiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fp
bi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAgICAg
RmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZv
aWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykK
KyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FT
IGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisgICAg
ICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJp
Z2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJlIGhl
bGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUg
dW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IG9sZEJ5
dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkQnl0
ZVZhbHVlID09IGlzSGVsZEJpdCB8fCBvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhhc1Bh
cmtlZEJpdCkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNI
ZWxkQml0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhp
c0hlbGRCaXQsIDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNvbWVvbmUgaXMg
cGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0
byB0aGF0IHRocmVhZAorICAgICAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5sb2Nr
IHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBiYXJn
aW5nLgorICAgICAgICAgICAgLy8gV2hlbiB3ZSB1bmxvY2ssIHdlIG1heSBsZWF2ZSB0aGUgcGFy
a2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGVyZSBhcmUgc3RpbGwKKyAg
ICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgorICAgICAgICAgICAgQVNTRVJUKG9s
ZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtPbmUoCisgICAgICAgICAgICAgICAgJmxvY2ssCisgICAgICAgICAg
ICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNs
ZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCisgICAgICAgICAg
ICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBu
b3cuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsb2NrLmxvYWQoKSA9PSAoaXNIZWxkQml0
IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3Vs
dC50aW1lVG9CZUZhaXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1
bmxvY2sgYW55dGhpbmcuIEluc3RlYWQsIHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0
aGF0IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NrLnN0b3JlKGhhc1BhcmtlZEJpdCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2suc3RvcmUoMCk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIGVudW0gVG9rZW4geworICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHks
CisgICAgICAgIERpcmVjdEhhbmRvZmYKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6TG9ja0FsZ29yaXRobTsKKworI2VuZGlmIC8vIFdURl9Mb2NrQWxnb3Jp
dGhtX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUu
Y3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAi
Q29uZGl0aW9uLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgi
CisjaW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xl
ZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRV
bnRpbChmYWtlTG9jaywgdGltZSk7CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmIHRpbWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisg
ICAgaWYgKCEodGltZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4g
dGltZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKIApJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYp
OwogCitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZSYpOworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGU7Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6
OnNsZWVwOwogCiAjZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294193</attachid>
            <date>2016-11-08 15:38:52 -0800</date>
            <delta_ts>2016-11-08 17:21:27 -0800</delta_ts>
            <desc>fixed LockAlgorithm</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>168384</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltJbmNyZW1lbnQ6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVh
cCYgbV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJn
ZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpA
QCAtMjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0
b3IoKnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBt
X2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2pp
dFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAt
MjY2LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE2ICs0NzEsMTYxIEBAIHZvaWQgSGVhcDo6Y29t
cGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5z
dGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92
bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAg
VGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMi
KTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVn
aW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxv
Y2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUg
U2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAg
ICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQg
aXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3Jl
IHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sg
aXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigK
LSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNp
dG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5l
d1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAg
ICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3
VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3Vmlz
aXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5h
cHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFs
bGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0
YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwot
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1
cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsK
KyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5p
dGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9m
TG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7
IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9w
cGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAg
ICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAg
ICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBi
YXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAg
ICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhj
ZXB0aW9uKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRo
aXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2Nr
cyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdl
IG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sK
LSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVl
ZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2
aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsg
cmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVw
ZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBl
bnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8v
IHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQg
KmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25v
dyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNl
IHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8g
dGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhl
IGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAv
LyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nl
c3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAg
Ly8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAg
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3Vs
dCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7
CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYy
LDcgKzYzOSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAog
dm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVh
ZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1f
Y29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1h
cmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpG
dWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigp
OworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAg
ICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNw
YWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NzMsMjIgQEAgdm9pZCBIZWFwOjpiZWdp
bk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJl
ZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6
OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMp
OwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29u
c2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lk
IEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzYxLDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwg
bV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9u
KCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJv
bmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsK
LSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAg
QVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZv
aWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewot
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOwor
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0
Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAg
ICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29r
ICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpA
QCAtODI3LDE5ICs3NzIsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlz
aXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRC
eXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxC
eXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0g
ICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VS
VChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwpAQCAtOTc3LDE0ICs5MjUsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
Y2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29u
Y3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlz
IHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2Ft
ZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwor
ICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8g
RHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3Qg
dGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5p
ZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVj
dCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0
IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8v
IHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5
IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1
cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVu
IHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBh
Z2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0
aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9p
ZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDM3LDE0IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJs
ZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2bSgpLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAg
ICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hp
bGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5j
b21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAg
fQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigp
LnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9p
c1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBk
YXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xs
ZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEyNSwxNSArMTA2NCwxMiBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhl
YXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAg
Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAg
cHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAg
ICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Q
cm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogICAgICAgICAKLSAgICBt
YXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsK
ICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0
aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTEx
NzAsOCArMTEwNiw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICB9CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFmdGVyID0gY3Vy
cmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1zXVxuIik7
CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcywg
Y3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtc11cbiIpOwogICAg
IH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMTI5LDM4IEBAIHZvaWQgSGVhcDo6c3RvcFRo
ZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxlclRocmVh
ZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1
ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0KKyAgICAKKyNpZiBF
TkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0o
Km1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2
bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7
CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7CisgICAgbV9vYmplY3RT
cGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7CisgICAgLy8g
Q2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRlcGVuZGluZyBv
biB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlvbiBjeWNsZSBv
ciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxlY3Rpb24gY3lj
bGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBhIG5vLW9wIGJl
Y2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQorICAgIC8vICAg
bGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBjeWNsZTogaXQg
cmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RTcGFjZS5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpA
QCAtMTQ2NiwxMCArMTQzMCwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNv
bnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhl
bHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwot
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRp
b25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhp
cyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0
ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygp
OworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQor
ICAgICAgICBjb2xsZWN0QXN5bmMoKTsKIH0KIAogSGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RD
b2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xNTQ5LDIzICsx
NTE4LDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAg
ICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xk
VGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewot
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAg
ICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVh
cDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVh
cDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk0OSw3ICsxOTA0LDcgQEAgYm9vbCBIZWFwOjpj
YW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0Nv
bGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkg
fHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11
dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsxOTI2LDggQEAgYm9vbCBI
ZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8
IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6
ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhh
dCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rp
b25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3Rh
dGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZt
X2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3LDEyICsxOTM4
LDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQg
aW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5
U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwODYsNCArMjAzMywxMSBAQCB2b2lkIEhlYXA6
OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2
b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1NhZmVUb0NvbGxl
Y3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAg
ICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNlbGxTdGF0
ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlU
aW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGljOgogICAgIE1hcmtl
ZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNo
aW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9
CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkg
eyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYg
bXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJh
Y2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rp
dml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7CiAgICAgdm9p
ZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGlj
OgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUg
bWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBB
UEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lk
ZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXpl
OyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9w
VGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3Mg
UmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29w
ZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVN
dXRhdG9yKCk7CiAgICAgCkBAIC00MjIsMzAgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVj
dGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAg
dm9pZCBzdG9wQWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAg
ICAKLSAgICB2b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwog
ICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJl
bW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZl
cnMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE3LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3MSw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIs
OCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmCiAgICAgLCBtX2hh
bmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CiB9CiAKIHRlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+CkBAIC0yNDEsMjQgKzI0
Myw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lz
RnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5
QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBt
X2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0
b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygp
KTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYg
KGZhbHNlKQpAQCAtMjY2LDEyICsyNTAsMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMp
KTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2Nr
IGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21l
b25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFT
U0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIs
IGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBz
dGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRl
ZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVk
IGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3
OSwxMiArMjY4LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZl
cnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAK
LSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNo
Q2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBz
ZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAg
ICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAg
IGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1Bv
aW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwog
ICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzAxLDE0
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0Fs
bG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAo
IWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAg
ICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAg
IC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdl
IHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpA
QCAtMzU0LDYgKzM1Miw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFw
VmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5k
bGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtp
bmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcg
ZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMg
ZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAg
ICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4g
Y2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0
aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVk
IHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzYyLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0
ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5n
IHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2Nh
dGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAog
dm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRl
cmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxs
b2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxv
Y2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1
LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RW
aXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQotICAgIDogbV9zdGFjaygpCi0gICAgLCBt
X2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRlc0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zp
c2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2Rl
KGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNp
b24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
KQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygp
OworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFy
dE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwot
ICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkK
IHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOwor
ICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVu
ZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkg
YW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJz
dCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVk
ZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIg
dGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENl
bGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3Jl
eSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAg
LTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAg
IEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Okdy
ZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklY
TUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMg
YmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhl
IGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAg
IG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3Rh
Y2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQor
Cit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxs
KiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBT
bG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsy
OTYsMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAog
ICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAg
ICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKLSAgICAKLSAgICAv
LyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJp
Z2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUg
bWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFu
Z2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5Lgot
ICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRD
ZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQn
cyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJy
aWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBt
YXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0
J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHBy
b2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJs
YWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVP
ckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzI2LDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBT
bG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVh
cFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxT
dGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAg
ICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxK
U0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0
YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNh
dXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFu
ZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAg
Ly8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUg
b2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20u
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5
IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQog
ICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9o
ZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBj
b25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzUyLDQzIEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBz
b29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9p
ZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJh
bGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVs
KG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBB
U1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAg
ICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYg
IWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAg
ICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdl
ZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRk
b3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5y
ZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAg
Ly8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ug
b2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBN
YXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2ls
bCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5
cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRh
dG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAg
ICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0K
ICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1v
ZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJU
KG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQwOSw2MCBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgLy8gV2Fp
dCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMg
c29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgogICAgICAgICAgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRp
bWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0
OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8v
IERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBz
bGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlm
eUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0
aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2spOworICAgICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKGxv
Y2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBs
ZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFw
Lm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxs
KCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAg
ICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8v
IElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0
aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1f
c2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAg
ICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjaywgbV9oZWFwLm1f
bnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
KTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7
CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAgICAgICAgZHJhaW4odGlt
ZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDgyLDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6
YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVS
b290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUp
OwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIG1faGVh
cC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00NjcsMTMgKzQ5NSw2IEBA
IFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QKICAgICByZXR1cm4gTWl4
ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQotewot
ICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290
cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5zaXplKCk7Ci19
Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCiB7CiAg
ICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1ICs1MTgsMTQgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBkb25hdGUoKTsKLSAg
ICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpt
ZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1w
dHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9v
cGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290
cykKQEAgLTUyNiwxMCArNTQ2LDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVO
ZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6
OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogbWFya1N0
YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAgIG91dC5wcmludCgiQ29s
bGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtTdGFjaygpKSwgIl0sIE11
dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFjaygpKSwgIl0iKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9w
YXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEhl
YXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3Rh
Y2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG1hcmtT
dGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1hcmtTdGFja0FycmF5JiBj
b2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsg
fQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7
IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIAog
ICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAo
KSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJpU3RhdGUgY29udGFpbnNP
cGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBvcGFxdWVSb290Q291bnQo
KTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygp
OwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0YWNrKCk7CisgICAgdm9p
ZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKLSAgICB2b2lk
IGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAgIHZvaWQgZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgdm9p
ZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjpp
bmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7IFNsYXZlRHJhaW4s
IE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2Rl
KTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9uZSwgVGltZWRPdXQgfTsK
KyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlLCBN
b25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAg
IHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVibGljOgogICAgIAogICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKwogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE0
MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVy
VHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwq
KTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwq
KTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxs
Kik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgdm9pZCBkb25h
dGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8p
OwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX2Nv
bGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwogICAgIE9w
YXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVy
ZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIAogICAgIHNpemVf
dCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsKICAgICBzaXplX3Qg
bV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIApAQCAtMTY1
LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsg
bnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAgICBib29sIG1faXNW
aXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
cklubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDE1
IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKIAogaW5saW5lIHZv
aWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsK
LSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6
ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemUp
OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw3
IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RT
dHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUg
PSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFu
Y2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFI
SW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRleGluZ1R5cGUubGluaygm
aml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlz
aW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJy
YXlQcm9maWxpbmdTaXRlVwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4
KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlw
ZSk7CisgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJl
Z2lzdGVySUQgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjY3LDggKzIyNjcsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlYWxsb2NhdGVCCiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwogCiAgICAgQVNTRVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3Jh
Z2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGlu
aXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAK
QEAgLTIyNzcsOCArMjI3Nyw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxv
Y2F0ZUIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5n
cm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgbmV3U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3Qt
PmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZt
LCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
Y29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbi4KICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
ICAgICAgICAgICAgIApAQCAtMTAxNiw2ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVn
VDEpOwogICAgICAgICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0b3JlUHRyKHJl
Z1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CkBAIC0xMDI0LDcgKzEwMjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Nj
b3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdl
dFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hl
Y2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERa
IGNoZWNrcyBzdGF0aWNhbGx5LgpAQCAtMTAzOCwxNCArMTAzNywxNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2
YWx1ZSwgYml0d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlvbls1
XSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJp
YWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0UHV0
Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9u
WzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0xMTU3LDExICsxMTU3
LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHIKICAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTg4Nyw3ICs4
ODcsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiAgICAgY29u
c3QgaW5kZXhpbmdUeXBlID0gY2VsbEFuZEluZGV4aW5nVHlwZSAKICAgICBsb2FkaSBKU0NlbGw6
Om1fc3RydWN0dXJlSURbY2VsbF0sIHNjcmF0Y2gKICAgICBzdG9yZWkgc2NyYXRjaCwgQXJyYXlQ
cm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlSURbcHJvZmlsZV0KLSAgICBsb2FkYiBKU0NlbGw6
Om1faW5kZXhpbmdUeXBlW2NlbGxdLCBpbmRleGluZ1R5cGUKKyAgICBsb2FkYiBKU0NlbGw6Om1f
aW5kZXhpbmdUeXBlQW5kTWlzY1tjZWxsXSwgaW5kZXhpbmdUeXBlCiBlbmQKIAogbWFjcm8gc2tp
cElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU3BlY3Vs
YXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC01MiwyMSArNTMsMjUgQEAg
dHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SXNBcnJheSAgICAgICAgICAgICAgICAgID0gMHgwMTsKIAogLy8gVGhlIHNoYXBlIG9mIHRoZSBp
bmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4
aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEU7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5v
SW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4MDA7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IFVuZGVjaWRlZFNoYXBlICAgICAgICAgICA9IDB4MDI7IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJh
eXMuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEludDMyU2hhcGUgICAgICAgICAgICAgICA9
IDB4MDQ7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERvdWJsZVNoYXBlICAgICAgICAgICAg
ICA9IDB4MDY7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAg
ICAgICA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5U3RvcmFnZVNoYXBl
ICAgICAgICA9IDB4MEE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZSA9IDB4MEM7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hh
cGVNYXNrICAgICAgICAgICAgICAgPSAweDBFOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBO
b0luZGV4aW5nU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwMDsKK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAgICAgICAgICA9IDB4MDI7IC8vIE9ubHkg
dXNlZnVsIGZvciBhcnJheXMuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEludDMyU2hhcGUg
ICAgICAgICAgICAgICAgICAgICAgPSAweDA0Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBE
b3VibGVTaGFwZSAgICAgICAgICAgICAgICAgICAgID0gMHgwNjsKK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAgICAgICAgICAgICA9IDB4MDg7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEFycmF5U3RvcmFnZVNoYXBlICAgICAgICAgICAgICAgPSAweDBB
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgICAg
ICAgID0gMHgwQzsKIAotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hp
ZnQgICAgICAgPSAxOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOdW1iZXJPZkluZGV4aW5n
U2hhcGVzICAgPSA3Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hp
ZnQgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJ
bmRleGluZ1NoYXBlcyAgICAgICAgICA9IDc7CiAKIC8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRy
YWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBhcmUgdXN1YWxseQogLy8gbWFz
a2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3RseS4KLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0gMHgxMDsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgICAgICAgICA9IDB4MTA7CisK
Ky8vIFRoZSBJbmRleGluZ1R5cGUgZmllbGQgb2YgSlNDZWxscyBpcyBzdG9sZW4gZm9yIGxvY2tz
Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVMb2NrSXNIZWxkICAgICAg
ICAgID0gMHgyMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0hh
c1BhcmtlZCAgICAgICA9IDB4NDA7CiAKIC8vIExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBl
cy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDsKQEAgLTE3Nyw0ICsxODIsNiBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IEFsbEFycmF5VHlwZXMgCiAvLyBNYXNrIG9mIGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcg
dGhlIGhpc3RvcnkuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRI
aXN0b3J5ICA9IEFsbEFycmF5VHlwZXMgfCBNYXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKIAordHlw
ZWRlZiBMb2NrQWxnb3JpdGhtPEluZGV4aW5nVHlwZSwgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCwg
SW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZD4gSW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5MCw3ICszOTAsOSBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAg
ICAgCi0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgCisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMDYzLDEz
ICsxMDY1LDE1IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKICAg
ICAvLyBOZWVkIHRvIGhhdmUgR0MgZGVmZXJyZWQgYXJvdW5kIHRoZSB1bnNoaWZ0Q291bnRTbG93
Q2FzZSgpLCBzaW5jZSB0aGF0IGxlYXZlcyB0aGUgYnV0dGVyZmx5IGluCiAgICAgLy8gYSB3ZWly
ZCBzdGF0ZTogc29tZSBwYXJ0cyBvZiBpdCB3aWxsIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgd2hp
Y2ggd2Ugd2lsbCBmaWxsIGluIGhlcmUuCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
ICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOwogICAgIAogICAgIGlmICht
b3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291bnQpIHsKICAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1
Y3R1cmUoKSwgY291bnQpOwogICAgICAgICBzdG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMgLT0gY291bnQ7CiAgICAgICAg
IHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGggKyBjb3VudCk7Ci0gICAgICAg
IHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgIH0gZWxzZSBpZiAoIW1vdmVGcm9udCAmJiB2ZWN0b3JMZW5n
dGggLSBsZW5ndGggPj0gY291bnQpCiAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSBpZiAodW5zaGlmdENvdW50U2xvd0Nhc2Uo
dm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291bnQpKQpAQCAtMTA5MCw2ICsxMDk0LDcgQEAgYm9v
bCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3RvcltpICsgc3RhcnRJbmRleF0u
Y2xlYXIoKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOCArMTAw
LDMyIEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJveHkoKSBjb25zdDsKICAgICBib29sIGluaGVy
aXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OwogICAgIGJvb2wgaXNBUElWYWx1ZVdyYXBwZXIo
KSBjb25zdDsKKyAgICAKKyAgICAvLyBFYWNoIGNlbGwgaGFzIGEgYnVpbHQtaW4gbG9jay4gQ3Vy
cmVudGx5IGl0J3Mgc2ltcGx5IGF2YWlsYWJsZSBmb3IgdXNlIGlmIHlvdSBuZWVkIGl0LiBJdCdz
CisgICAgLy8gYSBmdWxsLWJsb3duIFdURjo6TG9jay4gTm90ZSB0aGF0IHRoaXMgbG9jayBpcyBj
dXJyZW50bHkgdXNlZCBpbiBKU0FycmF5IGFuZCB0aGF0IGxvY2sncworICAgIC8vIG9yZGVyaW5n
IHdpdGggdGhlIFN0cnVjdHVyZSBsb2NrIGlzIHRoYXQgdGhlIFN0cnVjdHVyZSBsb2NrIG11c3Qg
YmUgYWNxdWlyZWQgZmlyc3QuCisgICAgdm9pZCBsb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgdm9p
ZCB1bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAKKyAgICBjbGFzcyBJbnRlcm5hbExvY2tlciB7
CisgICAgcHVibGljOgorICAgICAgICBJbnRlcm5hbExvY2tlcihKU0NlbGwqIGNlbGwpCisgICAg
ICAgICAgICA6IG1fY2VsbChjZWxsKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPmxv
Y2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgfkludGVybmFs
TG9ja2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jZWxsLT51bmxvY2tJbnRlcm5hbExv
Y2soKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBKU0NlbGwq
IG1fY2VsbDsKKyAgICB9OwogCiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdDsKKyAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0OwogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
OwpAQCAtMTY3LDYgKzE5MSwxNiBAQCBwdWJsaWM6CiAgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CiAgICAgCiAgICAgdm9pZCBzZXRDZWxsU3Rh
dGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9j
ZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisgICAgYm9vbCBhdG9taWNDb21wYXJlRXhjaGFuZ2VD
ZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtS
ZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CisKKyAgICBD
ZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZSBv
bGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0
YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkK
ICAgICB7CkBAIC0xODMsOSArMjE3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0NlbGwsIG1fdHlwZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxk
LiBBbHdheXMgdXNlIGEgQ0FTIGxvb3AsIHNpbmNlIHNvbWUgYml0cyBhcmUgZmxpcHBlZCB1c2lu
ZyBDQVMKKyAgICAvLyBmcm9tIG90aGVyIHRocmVhZHMgZHVlIHRvIHRoZSBpbnRlcm5hbCBsb2Nr
LiBPbmUgZXhjZXB0aW9uOiB5b3UgZG9uJ3QgbmVlZCB0aGUgQ0FTIGlmIHRoZQorICAgIC8vIG9i
amVjdCBoYXMgbm90IGVzY2FwZWQgeWV0LgorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdU
eXBlQW5kTWlzY09mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQ2VsbCwgbV9pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTQ2VsbCwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKICAgICB9CiAKICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNlbGxTdGF0ZU9mZnNldCgpCkBAIC0yMjgsNyArMjY1LDcgQEAgcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgU3RydWN0dXJlSUQg
bV9zdHJ1Y3R1cmVJRDsKLSAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGU7CisgICAgSW5k
ZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsgLy8gRE8gTk9UIHN0b3JlIHRvIHRoaXMg
ZmllbGQuIEFsd2F5cyBDQVMuCiAgICAgSlNUeXBlIG1fdHlwZTsKICAgICBUeXBlSW5mbzo6SW5s
aW5lVHlwZUZsYWdzIG1fZmxhZ3M7CiAgICAgQ2VsbFN0YXRlIG1fY2VsbFN0YXRlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSBKU0NlbGw6OkpTQ2Vs
bChDcmVhdGluZ0Vhcmx5Q2VsbFQKIAogaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFZNJiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBtX3N0cnVjdHVyZUlEKHN0cnVjdHVyZS0+aWQoKSkKLSAg
ICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgLCBtX2lu
ZGV4aW5nVHlwZUFuZE1pc2Moc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
KCkpCiAgICAgLCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSkKICAgICAsIG1f
ZmxhZ3Moc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKQogICAgICwgbV9j
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKQEAgLTc0LDcgKzc0LDcgQEAgaW5saW5lIHZv
aWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIGlmIChzdHJ1Y3R1cmUpIHsKICNl
bmRpZgogICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwotICAgICAgICBt
X2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIG1faW5k
ZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpOwogICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwogICAg
ICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwog
I2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEsOSArOTEsMTQgQEAgaW5saW5lIEpTVHlw
ZSBKU0NlbGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2lubGluZSBJ
bmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQorCiBpbmxpbmUgSW5kZXhpbmdUeXBlIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbmRleGluZ1R5cGU7
CisgICAgcmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlwZXM7CiB9CiAK
IGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTE5NSwxNyAr
MjAwLDI3IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIoKSAKICAgICBy
ZXR1cm4gbV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpT
Q2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitBTFdBWVNf
SU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCkKICAg
ICAgICAgfHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0dXJlSURU
YWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OwogICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9mbGFncyA9IHN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICBtX3R5cGUgPSBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwotICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlID0gc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgaWYgKG1faW5kZXhp
bmdUeXBlQW5kTWlzYyAhPSBuZXdJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgQVNTRVJUKCEobmV3
SW5kZXhpbmdUeXBlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBvbGRWYWx1ZSA9IG1faW5kZXhpbmdUeXBl
QW5kTWlzYzsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBuZXdWYWx1ZSA9IChvbGRWYWx1ZSAm
IH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkgfCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmIChXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5n
ZVdlYWtSZWxheGVkKCZtX2luZGV4aW5nVHlwZUFuZE1pc2MsIG9sZFZhbHVlLCBuZXdWYWx1ZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0IE1ldGhvZFRh
YmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKQEAgLTI4NCwxMSArMjk5LDI2IEBAIGlu
bGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3IoVk0mIHYKICAgICBpZiAoaXNaYXBwZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVJRCgpKTsKLSAgICBpZiAo
aW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKQotICAgICAgICBzdHJ1Y3R1
cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKLSAgICBlbHNl
CisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAg
ICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZv
LT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KHRoaXMpOworICAgIH0gZWxz
ZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPih0aGlzKS0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAgICAgemFwKCk7CiB9CiAKK2lubGluZSB2
b2lkIEpTQ2VsbDo6bG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlw
ZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGlu
Z1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjpsb2NrKCpsb2Nr
KTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxvY2tJbnRlcm5hbExvY2soKQoreworICAg
IEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGlu
Z1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0Fs
Z29yaXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiwxNyArMTEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVj
dDo6dmlzaXRCdXR0ZXIKICAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBz
dG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIAotICAgIC8vIE1hcmsgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgotICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKKworICAg
IEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBz
d2l0Y2ggKG9sZFR5cGUpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
ciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBp
ZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwor
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgLy8g
VGhpcyBsb2NrIGlzIGhlcmUgdG8gcHJvdGVjdCBDb250aWd1b3VzLT5BcnJheVN0b3JhZ2UgdHJh
bnNpdGlvbnMsIGJ1dCB3ZSBjb3VsZCBtYWtlIHRoYXQKKyAgICAgICAgLy8gcmFjZSB3b3JrIGlm
IHdlIG5lZWRlZCB0by4KKyAgICAgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhp
cyk7CisgICAgICAgIEluZGV4aW5nVHlwZSBuZXdUeXBlID0gdGhpcy0+aW5kZXhpbmdUeXBlKCk7
CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAgICBzd2l0Y2gg
KG5ld1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGln
dW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVMKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0xNDYsMTAgKzE1NywzNCBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNp
dG9yLnZtKCkpKTsKLQorICAgIC8vIFdlIHdhbnQgdG8gZGVmZW5kIGFnYWluc3QgbXVsdGlwbGUg
cG9zc2libGUgcmFjZXMgd2l0aCB0aGUgbXV0YXRvcjoKKyAgICAvLyAtIE11dGF0b3IgY291bGQg
aW5zdGFsbCBhIGJpZ2dlciBidXR0ZXJmbHkgYW5kIHRoZW4gaW5zdGFsbCBhIHN0cnVjdHVyZSB0
aGF0IGNsYWltcyBtb3JlCisgICAgLy8gICBwcm9wZXJ0aWVzLiBUaGlzIHRyaXZpYWxseSB3b3Jr
cy4KKyAgICAvLyAtIE11dGF0b3IgY291bGQgbXV0YXRlIHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVy
ZS4gSGVuY2UsIHdlIGhvbGQgdGhlIHN0cnVjdHVyZSBsb2NrIGZvcgorICAgIC8vICAgZGljdGlv
bmFyeSBzdHJ1Y3R1cmVzLgorICAgIC8vIC0gVGhlIGJ1dHRlcmZseSBjb3VsZCBzaHJpbmssIGJ1
dCB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvYmplY3Qgd2FzIGEgZGljdGlvbmFyeS4K
KyAgICAvLyAgIFVzdWFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSB3b3VsZCBnZXQgdGhlIGRpY3Rp
b25hcnkgc3RydWN0dXJlIGFuZCBhY3F1aXJlIGEgbG9jay4gVGhhdAorICAgIC8vICAgdHJpdmlh
bGx5IHdvcmtzLiBCdXQgd2UgY291bGQgbG9hZCB0aGUgc3RydWN0dXJlIGJlZm9yZSB0aGUgb2Jq
ZWN0IGJlY2FtZSBhIGRpY3Rpb25hcnkKKyAgICAvLyAgIGFuZCB0aGVuIGxvYWQgdGhlIGJ1dHRl
cmZseSB0aGF0IHdhcyBzaHJ1bmsuIFdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIGNhc2UgYnkgY2hl
Y2tpbmcKKyAgICAvLyAgIHRoZSBzdHJ1Y3R1cmUgYSBzZWNvbmQgdGltZSBiZWZvcmUgc2Nhbm5p
bmcgdGhlIGJ1dHRlcmZseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBidXR0ZXJmbHkKKyAgICAvLyAg
IGlzIGF0IHdvcnN0IHRoZSBidXR0ZXJmbHkgdGhhdCB0aGUgbXV0YXRvciBoYWQgaW5zdGFsbGVk
IGp1c3QgcHJpb3IgdG8gZmxpcHBpbmcgdGhlCisgICAgLy8gICBzdHVyY3R1cmUuIFNvIGlmIHRo
ZSBzdHJ1Y3R1cmUgd2Ugc2VlIGlzIGEgbm9uLWRpY3Rpb25hcnkgdGhlbiB0aGUgYnV0dGVyZmx5
IGNhbm5vdCB5ZXQKKyAgICAvLyAgIGhhdmUgYmVlbiBzaHJ1bmsuCisgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0
dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KSB7CisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygp
LmxvY2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAg
aWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkp
IHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmICh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmVJRCgpID09IHN0cnVjdHVyZS0+aWQoKSkKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9
CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLnVubG9j
aygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKICNlbmRpZgpAQCAtMjA0LDE1ICsyMzksMjUgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVj
dC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7Cisg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
c09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1
Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgZWxzZQorICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aWQoKSA9PSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgdGhp
c09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwor
ICAgIH0KIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgp
OwogICAgIGlmIChzdG9yYWdlU2l6ZSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7Ci0KKyAgICBpZiAo
d2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAg
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2Vu
ZGlmCkBAIC02NjYsNyArNzExLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SQogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0g
MDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7
CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0
aGlzLCBtYXApOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKIH0KQEAgLTczMSw3ICs3NzcsOSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZt
LCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlv
bjo6QWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC03NDIs
NyArNzkwLDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAg
IGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAg
ICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNJbnQzMigpOwogfQogCkBAIC03NTMsNyArODAzLDkgQEAgQ29udGlndW91c0RvdWJsZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gUE5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlRG91YmxlKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91
c0RvdWJsZSgpOwogfQogCkBAIC03NjQsNyArODE2LDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygp
W2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cyk7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIApAQCAtNzk3LDcgKzg1MSw5IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFnZUJ1dHRlcmZseSh2bSwgdGhpcywgc3RydWN0
dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwgbV9idXR0ZXJmbHkuZ2V0KCkpOwogICAgIEFycmF5
U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigp
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODgwLDcgKzkzNiw5IEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0u
c2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHN0b3JhZ2U7CiB9
CiAKQEAgLTkzNSw3ICs5OTMsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50
MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24p
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9y
YWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUo
dm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTk4MSw3
ICsxMDQxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQQogICAg
IH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0xMDA2LDcgKzEwNjgsMjIg
QEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwor
CisgICAgLy8gVGhpcyBoYXMgYSBjcmF6eSByYWNlIHdpdGggdGhlIGdhcmJhZ2UgY29sbGVjdG9y
LiBXaGVuIGNoYW5naW5nIHRoZSBidXR0ZXJmbHkgYW5kIHN0cnVjdHVyZSwKKyAgICAvLyB0aGUg
bXV0YXRvciBhbHdheXMgc2V0cyB0aGUgc3RydWN0dXJlIGxhc3QuIFRoZSBjb2xsZWN0b3Igd2ls
bCBhbHdheXMgcmVhZCB0aGUgc3RydWN0dXJlCisgICAgLy8gZmlyc3QuIFdlIHByb2JhYmx5IGhh
dmUgdG8gZm9sbG93IHRoYXQgY29udmVudGlvbiBoZXJlIGFzIHdlbGwuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sbGVjdG9yCisgICAgLy8gd2lsbCBzb21ldGltZXMgc2VlIHRoZSBuZXcgYnV0dGVy
Zmx5ICh0aGUgb25lIHdpdGggQXJyYXlTdG9yYWdlKSB3aXRoIHRoZSBvbmx5IHN0cnVjdHVyZSAo
dGhlCisgICAgLy8gb25lIHRoYXQgc2F5cyB0aGF0IHRoZSBidXR0ZXJmbHkgaXMgQ29udGlndW91
cykuIFdoZW4gc2Nhbm5pbmcgQ29udGlndW91cywgdGhlIGNvbGxlY3RvciB3aWxsCisgICAgLy8g
bWFyayB3b3JkIGF0IGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGJ1dHRl
cmZseSBwb2ludGVyLCB1cCB0byB0aGUgcHVibGljTGVuZ3RoCisgICAgLy8gaW4gdGhlIGJ1dHRl
cmZseS4gQnV0IGFuIEFycmF5U3RvcmFnZSBoYXMgc29tZSBub24tcG9pbnRlciBoZWFkZXIgZGF0
YSBhdCBsb3cgcG9zaXRpdmUKKyAgICAvLyBvZmZzZXRzIGZyb20gdGhlIGJ1dHRlcmZseSAtIHNv
IHdoZW4gdGhpcyByYWNlIGhhcHBlbnMsIHRoZSBjb2xsZWN0b3Igd2lsbCBzdXJlbHkgY3Jhc2gK
KyAgICAvLyBiZWNhdXNlIGl0IHdpbGwgZmFpbCB0byBkZWNvZGUgdHdvIGNvbnNlY3V0aXZlIGlu
dDMycyBhcyBpZiBpdCB3YXMgYSBKU1ZhbHVlLgorICAgIC8vCisgICAgLy8gRm9ydHVuYXRlbHks
IHdlIGhhdmUgdGhlIEpTQ2VsbCBsb2NrIGZvciB0aGlzIHB1cnBvc2UhCisgICAgCisgICAgSW50
ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsxNTQ1LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0cnVj
dHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBb
XSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgb2Zmc2V0KSk7CiAKQEAgLTI3MjUsNyArMjgwMiw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3Jl
YXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLSAg
ICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJm
bHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
QEAgLTI3NDIsNyArMjgyMCw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3Ro
KFZNJiAKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTI3NjIsNiArMjg0MSw3IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNs
b3coVk0mIHZtLCAKICAgICAKICAgICB1bnNpZ25lZCBhdmFpbGFibGVPbGRMZW5ndGggPQogICAg
ICAgICBCdXR0ZXJmbHk6OmF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlD
YXBhY2l0eSwgb2xkVmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG51bGxwdHI7CiAgICAgaWYgKGF2YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0
b3IgbGVuZ3RoIHRoYXQgY2F1c2VkIGludGVybmFsCiAgICAgICAgIC8vIGZyYWdtZW50YXRpb24u
IElmIHdlIGRpZCBvdXIgam9icyByaWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJ
IGJldCB3ZSB3aWxsIG1lc3MKQEAgLTI3NzYsMTcgKzI4NTYsMjQgQEAgYm9vbCBKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgICAgIGlmICghYnV0dGVyZmx5KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1
dHRlcmZseSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseTsKICAgICB9CiAKLSAg
ICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotCiAgICAgaWYg
KGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
b2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0
ZXJmbHktPmluZGV4aW5nUGF5bG9hZDxkb3VibGU+KClbaV0gPSBQTmFOOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xl
YXIoKTsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmll
cjxVbmtub3duPj4oKVtpXS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChuZXdCdXR0ZXJmbHkp
IHsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9idXR0ZXJmbHkuc2V0
KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1Zl
Y3Rvckxlbmd0aCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yODAyLDEyICsyODg5
LDEzIEBAIHZvaWQgSlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFy
cmF5U3RvcmFnZTo6c2l6ZUZvcihsZW5ndGgpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRo
aXMsIG5ld0J1dHRlcmZseSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVu
Z3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdC
dXR0ZXJmbHkpOwogfQogCi1CdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFn
ZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK0J1dHRlcmZseSogSlNP
YmplY3Q6OmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIApA
QCAtMzA5MiwxNSArMzE4MCwzMyBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5
KFZNJiB2CiAgICAgICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAK
LXZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiB2bSwgc2l6
ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cikKK3ZvaWQgSlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFm
dGVyKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7Ci0g
ICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gdGhpcy0+YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKTsKLSAg
ICB2b2lkKiBjdXJyZW50QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcik7Ci0gICAgdm9pZCogbmV3QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShw
cmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworICAgIC8vIFRoaXMgY291bGQg
aW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQgc3RydWN0dXJlIGNvdWxk
IGhhdmUgYmVlbiBhIG5vbgorICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBXZSBoYXZlIHRv
IGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaG9sZGluZwor
ICAgIC8vIHRoZSBzdHJ1Y3R1cmUncyBsb2NrIHJpZ2h0IG5vdywgYW5kIHRoYXQgaGVscHMgYSBi
aXQuCisgICAgCisgICAgQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHko
KTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRleGlu
Z0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAg
ICAgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFj
aXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gb2xk
QnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhz
dHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAg
ICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCB0aGlz
LCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIs
IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIG1lbW1vdmUobmV3QmFzZSwgY3Vy
cmVudEJhc2UsIHRoaXMtPmJ1dHRlcmZseVRvdGFsU2l6ZSgpKTsKLSAgICBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QmFzZSwg
cHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpKTsKKyAgICB2b2lkKiBjdXJyZW50
QmFzZSA9IG9sZEJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlB
ZnRlcik7CisgICAgdm9pZCogbmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0
eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworCisgICAgbWVtY3B5KG5ld0Jhc2UsIGN1cnJl
bnRCYXNlLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNp
dHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7
CisgICAgCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CiB9CiAKIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ3
LDExICs3NDcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgc3RhdGljUHJvcGVydGllc1JlaWZpZWQo
KSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsgfQogICAg
IHZvaWQgcmVpZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUoVk0mLCBCdXR0ZXJmbHkqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBC
dXR0ZXJmbHkqIGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYs
IEJ1dHRlcmZseSopOyAvLyBBbHdheXMgY2hhbmdlIHRoZSBidXR0ZXJmbHkgYmVmb3JlIGNoYW5n
aW5nIHRoZSBzdHJ1Y3R1cmUhCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUq
KTsKLSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1
dHRlcmZseSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9u
YXJ5KFZNJik7CiAKQEAgLTc1OSw3ICs3NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBz
dHJ1Y3R1cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAg
fQotICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAg
ICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5l
Q2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdAogICAgIHsKQEAgLTEyMDUsMTQgKzEy
MDQsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25zCiAgICAgcmV0
dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1
dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIEFTU0VS
VCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1
Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZt
LCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKLX0K
LQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIyMCw3ICsxMjExLDcg
QEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgogICAgIEpTQ2VsbDo6
c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0
dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0
ZXJmbHkpOwogfQpAQCAtMTI4Miw3ICsxMjczLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Ob25JbgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1
cm4gZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAg
IH0KLQorICAgIAogICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMgb24gdGhpcyBtZXRob2Qg
bmV2ZXIgcmV0dXJuaW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4
KHByb3BlcnR5TmFtZSkpOwogCkBAIC0xNDE3LDE2ICsxNDA4LDIwIEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5h
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgp
LCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLAorICAgICAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5w
dXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkgeworICAgICAgICAgICAgICAgICAgICBuZXdC
dXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWxpZGF0
ZU9mZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNl
dCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CkBAIC0xNDQ1LDEzICsxNDQwLDE1IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRl
TW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIH0K
IAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQobmV3U3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE0OTgsMTMgKzE0OTUsMTMgQEAgQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkg
PSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgQVNTRVJUKG9sZENhcGFj
aXR5IDw9IG5ld0NhcGFjaXR5KTsKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNpdHkp
Ci0gICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwg
b2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgaWYgKG9sZENhcGFjaXR5
ICE9IG5ld0NhcGFjaXR5KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYWxs
b2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgIH0KICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICBzbG90LnNldE5ld1By
b3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAg
ICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAt
MTU1NiwxNSArMTU1MywxOSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91
dFRyCiAgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1
cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZs
eSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgp
KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2
bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0
ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcyk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgc3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwotICAgIGJvb2wgc2hvdWxkT3B0
aW1pemUgPSBmYWxzZTsKLSAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUpOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwotICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAor
ICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygp
OworICAgICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICAgICAg
c3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAg
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKIH0KIAog
QUxXQVlTX0lOTElORSBKU09iamVjdCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4NCw2ICsxODQsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCisgICAgdihib29sLCBjb2xsZWN0Q29udGludW91c2x5LCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1h
bCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNl
QXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRl
QmEKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogfTsKIAorLy8gRklYTUU6IFRoaXMgbmVlZHMg
dG8gaGF2ZSBhIGxvY2sgaW4gaXQuCiBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIGZpbmFsIDog
cHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDYgQEAKIAogI2RlZmluZSBEVU1QX1NUUlVDVFVS
RV9JRF9TVEFUSVNUSUNTIDAKIAotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRE9fUFJPUEVSVFlN
QVBfQ09OU1RFTkNZX0NIRUNLIDAKLSNlbHNlCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNU
RU5DWV9DSEVDSyAwCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKQEAgLTYyMSwxMyArNjE1LDEzIEBAIFByb3BlcnR5VGFibGUqIFN0cnVjdHVy
ZTo6dGFrZVByb3BlcnR5VGEKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
IHRyYW5zaXRpb25LaW5kKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0
ZXModHJhbnNpdGlvbktpbmQpOwotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJ
bmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRy
YW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAgIAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdU
eXBlKHRyYW5zaXRpb25LaW5kKSkgewogICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHN0cnVjdHVyZS0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAg
IGlmIChnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5k
ZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxP
YmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1
Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
ICAgICB9CkBAIC02MzgsNyArNjMyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdAogICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICgh
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFT
U0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmli
dXRlcyk7Ci0gICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoZXhpc3Rp
bmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247
CiAgICAgfQogICAgIApAQCAtNjQ2LDcgKzY0MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVh
dGUodm0sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlv
dXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShp
bmRleGluZ1R5cGUpOworICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlm
IChwcmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlvbktpbmQpKQogICAgICAgICB0cmFuc2l0aW9u
LT5zZXREaWRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVlKTsKQEAgLTczNiw2ICs3MzAsOCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiB7CiAgICAgY2hlY2tPZmZzZXRD
b25zaXN0ZW5jeSgpOwogICAgIEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7CisgICAgCisgICAgR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKIAogICAgIHNp
emVfdCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCk7
CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKQEAgLTc3MywzOCArNzY5LDE3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgLy8g
SWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5pbmcvY29tcGFj
dGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgICAgICAvLyB3ZSBuZWVkIHRv
IHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1
cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KICAgICAgICAgaWYgKG9iamVjdC0+YnV0
dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMtPmhhc0luZGV4aW5n
SGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3QtPnNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgICAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwg
bnVsbHB0cik7CiAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIGRvd24tc2l6ZWQgdG8gdGhl
IHBvaW50IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBCdXR0ZXJmbHkgaXMgbm8gbG9uZ2VyIHdpdGhp
biB0aGUgCiAgICAgICAgIC8vIGZpcnN0IENvcGllZEJsb2NrOjpibG9ja1NpemUgYnl0ZXMsIHdl
J2xsIGdldCB0aGUgd3JvbmcgYW5zd2VyIGlmIHdlIHRyeSB0byBtYXNrIHRoZSBiYXNlIGJhY2sg
dG8gCiAgICAgICAgIC8vIHRoZSBDb3BpZWRCbG9jayBoZWFkZXIuIFRvIHByZXZlbnQgdGhpcyBj
YXNlIHdlIG5lZWQgdG8gbWVtbW92ZSB0aGUgQnV0dGVyZmx5IGRvd24uCiAgICAgICAgIGVsc2Ug
aWYgKG9iamVjdC0+YnV0dGVyZmx5KCkpCi0gICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVy
Zmx5QWZ0ZXJGbGF0dGVuaW5nKHZtLCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSwgYWZ0ZXJPdXRP
ZkxpbmVDYXBhY2l0eSk7CisgICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGJlZm9yZU91dE9mTGluZUNhcGFjaXR5LCBhZnRl
ck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9CiAKICAgICByZXR1cm4gdGhpczsKIH0KIAotUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAgcGluKCk7Ci0KLSAg
ICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotfQotCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVChpc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLQot
ICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lKTsKLX0KLQogdm9pZCBT
dHJ1Y3R1cmU6OnBpbigpCiB7CiAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CkBAIC05ODks
NDkgKzk2NCwxMiBAQCBWZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAK
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIAotICAgIEFTU0VSVCghSlNDOjpp
c1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwotCi0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlz
U3ltYm9sKCkpCi0gICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQot
ICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2Nr
ZXIsIHZtKTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUo
KS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+
YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNl
dCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOwotICAgIAotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gbmV3T2Zmc2V0OworICAgIHJldHVybiBhZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVy
dHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChy
ZXApOwotICAgIGlmICghcG9zaXRpb24uZmlyc3QpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNl
dDsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+cmVtb3ZlKHBvc2l0aW9uKTsKLSAgICBwcm9wZXJ0
eVRhYmxlKCktPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICByZXR1cm4gb2Zmc2V0OworICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1l
LCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwog
fQogCiB2b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciYsIFZNJiB2bSwgdW5zaWduZWQgY2FwYWNpdHkpCkBAIC0xMTE0LDYgKzEw
NTIsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgSlNDZWxs
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgCiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmpl
Y3QtPmlzT2JqZWN0KCkpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hh
aW4uY2xlYXIoKTsKQEAgLTEyNzYsOTIgKzEyMTcsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcENv
bnRleHRIZWFkZXIoUHJpbnRTCiAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwogfQogCi0j
aWYgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KLXZvaWQgUHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID49IFByb3BlcnR5
VGFibGU6Ok1pbmltdW1UYWJsZVNpemUpOwotICAgIEFTU0VSVChtX2luZGV4TWFzayk7Ci0gICAg
QVNTRVJUKG1faW5kZXhTaXplID09IG1faW5kZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJUKCEobV9p
bmRleFNpemUgJiBtX2luZGV4TWFzaykpOwotCi0gICAgQVNTRVJUKG1fa2V5Q291bnQgPD0gbV9p
bmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQobV9rZXlDb3VudCArIG1fZGVsZXRlZENvdW50IDw9
IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhT
aXplIC8gNCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBk
ZWxldGVkSW5kZXhDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX2lu
ZGV4U2l6ZTsgKythKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX2luZGV4W2Fd
OwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5k
ZXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVs
ZXRlZEVudHJ5SW5kZXgoKSkgewotICAgICAgICAgICAgKytkZWxldGVkSW5kZXhDb3VudDsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4
IDwgZGVsZXRlZEVudHJ5SW5kZXgoKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IC0gMSA8
PSB1c2VkQ291bnQoKSk7Ci0gICAgICAgICsraW5kZXhDb3VudDsKLQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGIgPSBhICsgMTsgYiAhPSBtX2luZGV4U2l6ZTsgKytiKQotICAgICAgICAgICAgQVNT
RVJUKG1faW5kZXhbYl0gIT0gZW50cnlJbmRleCk7Ci0gICAgfQotICAgIEFTU0VSVChpbmRleENv
dW50ID09IG1fa2V5Q291bnQpOwotICAgIEFTU0VSVChkZWxldGVkSW5kZXhDb3VudCA9PSBtX2Rl
bGV0ZWRDb3VudCk7Ci0KLSAgICBBU1NFUlQoIXRhYmxlKClbZGVsZXRlZEVudHJ5SW5kZXgoKSAt
IDFdLmtleSk7Ci0KLSAgICB1bnNpZ25lZCBub25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZv
ciAodW5zaWduZWQgYyA9IDA7IGMgPCB1c2VkQ291bnQoKTsgKytjKSB7Ci0gICAgICAgIFN0cmlu
Z0ltcGwqIHJlcCA9IHRhYmxlKClbY10ua2V5OwotICAgICAgICBpZiAocmVwID09IFBST1BFUlRZ
X01BUF9ERUxFVEVEX0VOVFJZX0tFWSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAr
K25vbkVtcHR5RW50cnlDb3VudDsKLSAgICAgICAgdW5zaWduZWQgaSA9IElkZW50aWZpZXJSZXBI
YXNoOjpoYXNoKHJlcCk7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAgICAgICB1bnNpZ25l
ZCBlbnRyeUluZGV4OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnlJbmRl
eCA9IG1faW5kZXhbaSAmIG1faW5kZXhNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRyeUlu
ZGV4ICE9IFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
cmVwID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3Vi
bGVIYXNoKElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCkpOwotICAgICAgICAgICAgaSArPSBr
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4ID09IGMgKyAxKTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQobm9uRW1wdHlFbnRyeUNvdW50ID09IG1fa2V5Q291bnQpOwotfQotCi12
b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSkg
ewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCkt
PmVuZCgpOwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9w
ZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IEFTU0VSVCghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICAgICAgQVNT
RVJUKCFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJv
cGVydHlUYWJsZSgpLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlubGluZSB2
b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpOwotfQotCi0jZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNL
Ci0KIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygp
IGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0g
Y2ktPnBhcmVudENsYXNzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw5ICsxOTEsMTQgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgYmUg
dXNlZCB3aXRoIGNhdXRpb24uICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNl
dCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKTsKLSAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNl
ZCB3aXRoIGNhdXRpb24uIFZlcnNpb25zIHRoYXQgdGFrZSBhIGZ1bmMgd2lsbCBjYWxsIGl0IGFm
dGVyIG1ha2luZyB0aGUKKyAgICAvLyBjaGFuZ2UgYnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhl
IGxvY2suIFRoZSBjYWxsYmFjayBpcyBub3QgY2FsbGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5nZQor
ICAgIC8vIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwgcmVtb3ZlUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90CisgICAgLy8gZm91bmQuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBj
b25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBj
b25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYg
dm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90
eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJu
IGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CkBAIC0yMjksOCArMjM0
LDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8o
bV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlw
ZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkgKzQzOCw5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAg
ICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkK
KyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxv
YikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCgpOworICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6
aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBz
dGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYgKzU4
NCw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQ
cmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1
cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToK
QEAgLTYzMywxMCArNjQwLDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsK
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAg
UHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92
ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUo
UHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHBy
b3BlcnR5VGFibGUoKTsKQEAgLTY5Nyw3ICs3MDgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNW
YWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFp
bikgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWluKiBj
YWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgICAgIAotICAgIHZvaWQgcGluKCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwaW4oKTsKICAgICB2b2lkIHBpbkZvckNhY2hpbmco
KTsKICAgICAKICAgICBib29sIGlzUmFyZURhdGEoSlNDZWxsKiBjZWxsKSBjb25zdApAQCAtNzEw
LDcgKzcyMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09y
UmFyZURhdGEuZ2V0KCkpOwogICAgIH0KLSAgICAgICAgCisKICAgICBib29sIGNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2Nh
dGVSYXJlRGF0YShWTSYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQw
LDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHUuZG91YmxlV29yZCA9IDB4YmJhZGJlZWY7
CiAgICAgfQogCi0gICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCisgICAg
U3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQogICAg
IHsKICAgICAgICAgdS5maWVsZHMuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmVJRDsKLSAgICAgICAg
dS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgICAgICB1LmZpZWxkcy5p
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eTsKICAgICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5m
aWVsZHMuaW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7CiAgICAg
ICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6Ok5ld1doaXRlOwpAQCAt
NTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJl
SURCbG9iJiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhlci51LmRvdWJsZVdvcmQ7IH0KICAg
ICAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRz
LnN0cnVjdHVyZUlEOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZTsgfQotICAgIHZvaWQgc2V0SW5kZXhpbmdUeXBl
KEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5k
ZXhpbmdUeXBlOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
OyB9CisgICAgdm9pZCBzZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUuZmllbGRzLmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9CiAgICAgSlNU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50eXBlOyB9CiAgICAgVHlwZUluZm86
OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVybiB1LmZpZWxk
cy5pbmxpbmVUeXBlRmxhZ3M7IH0KICAgICAKQEAgLTY3LDE2ICs2NywxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5z
dHJ1Y3R1cmVJRCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVP
ZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVy
ZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGU7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgICAgIEpTVHlwZSB0eXBlOwogICAgICAgICAg
ICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3M7CiAgICAgICAgICAg
ICBDZWxsU3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIwODQxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI5Miw2ICsyOTIsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVy
ZTo6Y2hlY2tPZmZzZQogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBTdHJ1Y3R1
cmU6OmNoZWNrQ29uc2lzdGVuY3koKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
K30KKwogaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KHNpemVfdCBj
dXJyZW50Q2FwYWNpdHkpCiB7CiAgICAgaWYgKCFjdXJyZW50Q2FwYWNpdHkpCkBAIC0zMTEsNCAr
MzE2LDgwIEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICBy
YXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwg
dG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7Cisg
ICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAg
ICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkp
KTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRF
bnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJvcGVy
dHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byByZXAgPSBw
cm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAg
Y3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdP
ZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7Cisg
ICAgCisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09m
ZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNl
dE1heUNoYW5nZSk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tl
ciwgbmV3T2Zmc2V0KTsKKyAgICByZXR1cm4gbmV3T2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKworICAgIGlmICghcHJvcGVy
dHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKworICAgIFByb3BlcnR5
VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVw
KTsKKyAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQorICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zm
c2V0OworCisgICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHByb3Bl
cnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIsIG9mZnNldCk7CisgICAgcmV0dXJuIG9mZnNldDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQorewor
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKKyAgICAKKyAgICBwaW4oKTsKKyAg
ICAKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpOworCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0Mp
OworCisgICAgcGluKCk7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1bmMpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAv
KiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgy
MTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZD
RERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyog
TG9ja0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZC
NEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYw
QTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9
OwpAQCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlv
biAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2
N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4
QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlB
OEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2
ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAw
NDAwRTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9j
a0FsZ29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIu
aCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9y
LmggKi8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICov
LApAQCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyog
Q3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1
NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGlt
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFM
b2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRl
TWF0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAg
ICAgTGlzdEhhc2hTZXQuaAogICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExv
Y2tlci5oCiAgICAgTUQ1LmgKICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMTc3LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJ
bkNvbnRleAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2lu
ZyBXVEY6OnNvcnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVz
aW5nIFdURjo6bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RG
Ojpzb3J0ZWRMaXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6
bGlzdER1bXBJbkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3Bw
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTIwICsyNiwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkxvY2suaCIKIAotI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90Lmgi
Ci0jaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmlt
aXRpdmVzLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGlj
IGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFz
ZTo6bG9ja1Nsb3coKQordm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVk
IHNwaW5Db3VudCA9IDA7Ci0KLSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8g
YmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0
IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAg
dWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
bG9ja2luZyB3aXRoICIsIGN1cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBX
ZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRl
VmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdl
V2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2Vk
IGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFy
b3VuZC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYg
c3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAg
ICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0
aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3Vu
ZAotICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQg
YXQgc2V0dGluZyBpdC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bhcmtl
ZEJpdCkKLSAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlz
SGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4K
LSAgICAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAg
IFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1Bhcmtl
ZEJpdCk7Ci0gICAgICAgIGlmIChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAg
ICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdh
cyBuZXZlciByZWxlYXNlZC4gSXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhy
ZWFkIHRoYXQgZGlkCi0gICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2Un
cmUgZG9uZSEKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6
Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQg
dGhhdCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAg
ICAgIC8vIGFuZCB3ZSBoYXZlIGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9w
cG9ydHVuaXR5IHRvIGdyYWIgdGhlIGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVy
IHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFy
b3VuZCBhbmQgdHJ5IGFnYWluLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBh
cmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AK
LSAgICAgICAgLy8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2Nr
QWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tT
bG93KCkKIHsKLSAgICB1bmxvY2tTbG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxn
b3JpdGhtOjp1bmxvY2tTbG93KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7
CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Ns
b3dJbXBsKEZhaXIpOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xv
d0ltcGwoRmFpcm5lc3MgZmFpcm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVj
YXVzZSB0aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1
c2UgdGhlcmUgaXMKLSAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9v
cDogZXZlbiBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAg
IC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBh
cyB3ZSBhcmUgdW5sb2NraW5nLgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRC
eXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRl
VmFsdWUgPT0gaXNIZWxkQml0IHx8IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJp
dCkgewotICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJp
dCwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkg
b25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAg
Ly8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUg
YXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVu
bG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5j
ZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4K
LSAgICAgICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0
KSk7Ci0gICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUs
Ci0gICAgICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGlu
dHB0cl90IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNh
biBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAg
ICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBu
b3cuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1l
VG9CZUZhaXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0
aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBEaXJlY3RIYW5kb2ZmOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUu
c3RvcmUoaGFzUGFya2VkQml0KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIG1fYnl0ZS5zdG9yZSgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09w
cG9ydHVuaXR5OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
RGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29y
aXRobTo6RmFpcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93
dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw3IEBACiAjaWZuZGVmIFdURl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5j
bHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvTG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3Bl
Y3RvcjsKIAogbmFtZXNwYWNlIFdURiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90
LCAxLCAyPiBEZWZhdWx0TG9ja0FsZ29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0
aXZlIG11dGV4IHRoYXQgb25seSByZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZh
c3QgcGF0aHMgdGhhdCBhcmUKIC8vIGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVu
ZGVkIGxvY2tpbmcgaXMgaW5saW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9u
IGlzCiAvLyBoYW5kbGVkIGJ5IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0
aCB0aGF0IGlzIGNvbXBldGV0aXZlIHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMg
KzU0LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxv
Y2soKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vh
aygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAg
ICAgLy8gTG9jayBhY3F1aXJlZCEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdv
cml0aG06OmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgbG9ja1Ns
b3coKTsKICAgICB9CiAKICAgICBib29sIHRyeUxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICg7
OykgewotICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQo
KTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1
cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAKICAgICAv
LyBOZWVkIHRoaXMgdmVyc2lvbiBmb3Igc3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4
IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGlj
YWwgc2VjdGlvbnMgYWx3YXlzIGdldCBhIGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9jaygpCiAg
ICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVs
ZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBM
b2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkp
CisgICAgICAgICAgICB1bmxvY2tTbG93KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyBsaWtl
IHVubG9jaygpIGJ1dCBpdCBndWFyYW50ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2NrIGZhaXJs
eS4gRm9yIHNob3J0IGNyaXRpY2FsCkBAIC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBMb2NrQmFz
ZSB7CiAgICAgLy8gd2FudC4KICAgICB2b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewotICAgICAg
ICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2Vk
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVm
YXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAg
ICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0
aG06OmlzTG9ja2VkKG1fYnl0ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0
CkBAIC0xMjYsMjEgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJr
ZWRCaXQgPSAyOwotCisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3co
KTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0gRmFp
cm5lc3MgewotICAgICAgICBGYWlyLAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZvaWQg
dW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAgICAg
ICBCYXJnaW5nT3Bwb3J0dW5pdHksCi0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9OwogCiAg
ICAgLy8gTWV0aG9kIHVzZWQgZm9yIHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlSZXNl
dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV1RGX0xvY2tBbGdvcml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRobV9o
CisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRl
IDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworLy8gVGhpcyBpcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2NrLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlw
ZSBoYXNQYXJrZWRCaXQ+CitjbGFzcyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBp
c0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2Nr
RmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChB
dG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUg
PSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRW
YWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRC
aXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5M
SUtFTFkoIWxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRC
eXRlVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAg
ICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1
cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8
TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hh
bmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CisgICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9IGlzSGVs
ZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29t
cGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2Nr
KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVu
bG9ja0Zhc3QobG9jaykpKQorICAgICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZhaXIpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkp
CisgICAgICAgICAgICB1bmxvY2tTbG93KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCBpc0xvY2tlZChjb25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlz
SGVsZEJpdDsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGxvY2tT
bG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICB1bnNpZ25lZCBzcGlu
Q291bnQgPSAwOworCisgICAgICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBi
ZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKworICAg
ICAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICAgICAg
aWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBs
b2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1
ZSB8IGlzSGVsZEJpdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gs
IHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgICAgIGlmICghKGN1cnJl
bnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewor
ICAgICAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRo
ZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAg
ICAgICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0
IHNldHRpbmcgaXQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFy
a2VkQml0KQorICAgICAgICAgICAgICAgICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3Vy
cmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZh
bHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3
ZSBjYW4gcGFyay4KKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3Vs
dCA9CisgICAgICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAg
aWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0
YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNh
c2UgRGlyZWN0SGFuZG9mZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5l
dmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQg
dGhhdCBkaWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2Un
cmUgZG9uZSEKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9j
aykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBC
YXJnaW5nT3Bwb3J0dW5pdHk6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNv
bW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0
aGUgbG9jaywKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1
cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0
CisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUg
YmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVz
ZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAg
ICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBl
bnVtIEZhaXJuZXNzIHsKKyAgICAgICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAg
ICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBs
b2NrLCBGYWlybmVzcyBmYWlybmVzcykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBo
ZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBv
ciBiZWNhdXNlIHRoZXJlIGlzCisgICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVl
ZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0
IGNvdWxkCisgICAgICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRz
IHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7Cisg
ICAgICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAmIG1hc2sp
ID09IGlzSGVsZEJpdAorICAgICAgICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9
PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFjdGx5IG9uZSB0
aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQgdGhyZWFkCisgICAgICAgICAgICAv
LyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBh
cyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCisgICAgICAgICAgICAvLyBXaGVuIHdl
IHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNo
YW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAorICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBw
YXJrZWQuCisgICAgICAgICAgICBBU1NFUlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09u
ZSgKKyAgICAgICAgICAgICAgICAmbG9jaywKKyAgICAgICAgICAgICAgICBbJl0gKFBhcmtpbmdM
b3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVyIHRoZSBpc0hl
bGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ug
c2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKChsb2NrLmxvYWQoKSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJr
ZWRCaXQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0Jl
RmFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0
aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBMb2NrVHlwZSBuZXdWYWx1ZSA9IG9sZFZhbHVlICYgfm1hc2s7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBu
ZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0
eTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZW51bSBUb2tlbiB7CisgICAgICAgIEJhcmdpbmdP
cHBvcnR1bml0eSwKKyAgICAgICAgRGlyZWN0SGFuZG9mZgorICAgIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpMb2NrQWxnb3JpdGhtOworCisjZW5kaWYgLy8gV1RG
X0xvY2tBbGdvcml0aG1faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAK
ICNpbmNsdWRlICJDb25kaXRpb24uaCIKICNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVkZSAiUHJp
bnRTdHJlYW0uaCIKKyNpbmNsdWRlIDxjZmxvYXQ+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEyOCw2ICsxMzEsMTcg
QEAgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cAogICAgIGZha2VDb25k
aXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCB0aW1lKTsKIH0KIAorYm9vbCBoYXNFbGFwc2VkKGNv
bnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZSkKK3sKKyAgICAvLyBBdm9pZCBkb2lu
ZyBub3coKS4KKyAgICBpZiAoISh0aW1lID4gdGltZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25k
cygwKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHJldHVybiB0aW1lIDw9IHRpbWUubm93V2l0aFNhbWVDbG9jaygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJpdmF0
ZToKIAogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlJik7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhc0VsYXBzZWQoY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNlZDsK
K3VzaW5nIFdURjo6c2xlZXA7CiAKICNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294205</attachid>
            <date>2016-11-08 17:21:27 -0800</date>
            <delta_ts>2016-11-09 19:51:17 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>179984</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltJbmNyZW1lbnQ6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVh
cCYgbV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJn
ZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpA
QCAtMjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0
b3IoKnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBt
X2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2pp
dFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAt
MjY2LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE2ICs0NzEsMTYxIEBAIHZvaWQgSGVhcDo6Y29t
cGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5z
dGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92
bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAg
VGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMi
KTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVn
aW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxv
Y2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUg
U2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAg
ICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQg
aXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3Jl
IHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sg
aXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigK
LSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNp
dG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5l
d1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAg
ICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3
VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3Vmlz
aXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5h
cHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFs
bGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0
YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwot
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1
cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsK
KyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5p
dGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9m
TG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7
IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9w
cGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAg
ICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAg
ICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBi
YXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAg
ICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhj
ZXB0aW9uKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRo
aXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2Nr
cyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdl
IG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sK
LSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVl
ZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2
aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsg
cmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVw
ZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBl
bnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8v
IHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQg
KmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25v
dyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNl
IHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8g
dGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhl
IGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAv
LyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nl
c3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAg
Ly8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAg
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3Vs
dCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7
CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYy
LDcgKzYzOSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAog
dm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVh
ZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1f
Y29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1h
cmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpG
dWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigp
OworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAg
ICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNw
YWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NzMsMjIgQEAgdm9pZCBIZWFwOjpiZWdp
bk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJl
ZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6
OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMp
OwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29u
c2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lk
IEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzYxLDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwg
bV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9u
KCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJv
bmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsK
LSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAg
QVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZv
aWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewot
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOwor
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0
Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAg
ICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29r
ICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpA
QCAtODI3LDE5ICs3NzIsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlz
aXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRC
eXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxC
eXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0g
ICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VS
VChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwpAQCAtOTc3LDE0ICs5MjUsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
Y2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29u
Y3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlz
IHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2Ft
ZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwor
ICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8g
RHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3Qg
dGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5p
ZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVj
dCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0
IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8v
IHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5
IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1
cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVu
IHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBh
Z2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0
aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9p
ZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDM3LDE0IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7CiAgICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJs
ZSBnY1N0YXJ0VGltZTsKICAgICAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAg
ICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICB2bSgpLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKLSAg
ICB9Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hp
bGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5j
b21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAg
fQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigp
LnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9p
c1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBk
YXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xs
ZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEyNSwxNSArMTA2NCwxMiBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhl
YXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAg
Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAg
cHJlcGFyZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAg
ICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Q
cm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogICAgICAgICAKLSAgICBt
YXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsK
ICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmllci0+Z2F0
aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTEx
NzAsOCArMTEwNiw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICB9CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFmdGVyID0gY3Vy
cmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1zXVxuIik7
CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAg
ICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcywg
Y3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtc11cbiIpOwogICAg
IH0KICAgICAKICAgICB7CkBAIC0xMTkzLDEwICsxMTI5LDM4IEBAIHZvaWQgSGVhcDo6c3RvcFRo
ZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxlclRocmVh
ZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gdHJ1
ZTsKKworICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgeworICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT5w
cm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIkdDIikpOworICAgIH0KKyAgICAKKyNpZiBF
TkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMp
OworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0o
Km1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKKyAgICB9CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2
bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7
CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7CisgICAgbV9vYmplY3RT
cGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1fc3RvcFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVUaGVXb3JsZCgpCiB7CisgICAgLy8g
Q2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGRlcGVuZGluZyBv
biB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAgLy8gY29sbGVjdGlvbiBjeWNsZSBv
ciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdpdGhpbiBhIGNvbGxlY3Rpb24gY3lj
bGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBjeWNsZTogaXQncyBhIG5vLW9wIGJl
Y2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBjbGVhcmVkIHRoZQorICAgIC8vICAg
bGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcgY29sbGVjdGlvbiBjeWNsZTogaXQg
cmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgbV9vYmplY3RTcGFjZS5yZXN1
bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRU
aGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwpA
QCAtMTQ2NiwxMCArMTQzMCwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNv
bnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhl
bHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwot
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRp
b25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhp
cyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0
ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygp
OworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQor
ICAgICAgICBjb2xsZWN0QXN5bmMoKTsKIH0KIAogSGVhcDo6VGlja2V0IEhlYXA6OnJlcXVlc3RD
b2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4gc2NvcGUpCkBAIC0xNTQ5LDIzICsx
NTE4LDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAg
ICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xk
VGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewot
ICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAg
ICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVh
cDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVh
cDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk0OSw3ICsxOTA0LDcgQEAgYm9vbCBIZWFwOjpj
YW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0Nv
bGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkg
fHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11
dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTcxLDEyICsxOTI2LDggQEAgYm9vbCBI
ZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8
IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFw
OjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6
ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhh
dCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rp
b25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3Rh
dGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZt
X2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTg3LDEyICsxOTM4
LDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQg
aW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5
U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwODYsNCArMjAzMywxMSBAQCB2b2lkIEhlYXA6
OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2
b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1NhZmVUb0NvbGxl
Y3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAg
ICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNlbGxTdGF0
ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3ICszNiw2IEBA
CiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNp
bmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBjbGFzcyBKSVRT
dHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFy
Z3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlU
aW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGljOgogICAgIE1hcmtl
ZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNo
aW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9
CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkg
eyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYg
bXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJh
Y2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rp
dml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7CiAgICAgdm9p
ZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29s
IGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGlj
OgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUg
bWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQg
cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBB
UEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lk
ZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5h
bE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXpl
OyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9w
VGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3Mg
UmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29w
ZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVN
dXRhdG9yKCk7CiAgICAgCkBAIC00MjIsMzAgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVj
dGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0
dXJlSURUYWJsZXMoKTsKICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAg
dm9pZCBzdG9wQWxsb2NhdGlvbigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAg
ICAKLSAgICB2b2lkIG1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0
RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwog
ICAgIHZvaWQgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJl
bW92ZURlYWRDb21waWxlcldvcmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZl
cnMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZp
c2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE3LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3MSw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTU5OSw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTggKzgy
LDIwIEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1f
aGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAg
ICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVt
cGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVN
b2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2Rl
IG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtz
TW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUg
PT0gU3dlZXBPbmx5KSk7CiAgICAgCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogCiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gdGhpcy0+YmxvY2soKTsK
ICAgICAKLSAgICBpZiAoZmFsc2UpCisgICAgaWYgKHRydWUpCiAgICAgICAgIGRhdGFMb2coUmF3
UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCFc
biIpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp1c2VCdW1wQWxsb2NhdG9yKCkKQEAgLTExMSw2
ICsxMTMsOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAg
ICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9h
bGxvY2F0b3ItPnNldElzRW1wdHkodGhpcywgdHJ1ZSk7CisgICAgICAgIGlmIChzcGFjZSgpLT5p
c01hcmtpbmcoKSkKKyAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKICAgICAgICAg
RnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAt
IHBheWxvYWRCZWdpbik7CiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2co
IlF1aWNrbHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6
ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwg
cmVzdWx0LCAiXG4iKTsKQEAgLTEyMywxNyArMTI3LDExIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7CiAgICAgc2l6ZV90
IGNvdW50ID0gMDsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkg
PSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewotICAg
ICAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtzTW9k
ZSA9PSBNYXJrc05vdFN0YWxlICYmIGJsb2NrLm1fbWFya3MuZ2V0KGkpKQotICAgICAgICAgICAg
ICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXds
eUFsbG9jYXRlZC5nZXQoaSkpKSkgewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgVmVjdG9yPHNpemVf
dD4gZGVhZENlbGxzOworICAgIGF1dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBpKSB7
CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwq
PigmYmxvY2suYXRvbXMoKVtpXSk7CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBO
ZWVkc0Rlc3RydWN0aW9uICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRl
c3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09IE5v
dEVtcHR5KQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCktPmNhbGxEZXN0
cnVjdG9yKCp2bSgpKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dCkgewpAQCAtMTQ0LDEyICsxNDIsMzUgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAgKytj
b3VudDsKICAgICAgICAgfQorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgp
OyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmIChlbXB0
eU1vZGUgPT0gTm90RW1wdHkKKyAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90
U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAgICAgICAgfHwgKG5ld2x5
QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdl
dChpKSkpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJMaXZlOiAiLCBSYXdQb2ludGVyKCZibG9j
ay5hdG9tcygpW2ldKSwgIlxuIik7CisgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGF0YUxvZygi
RGVhZDogIiwgUmF3UG9pbnRlcigmYmxvY2suYXRvbXMoKVtpXSksICJcbiIpOworICAgICAgICBp
ZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1
bm5pbmcpCisgICAgICAgICAgICBkZWFkQ2VsbHMuYXBwZW5kKGkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBXZSBv
bmx5IHdhbnQgdG8gZGlzY2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVh
dGluZyBhIEZyZWVMaXN0LAogICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0
aW9uIG9uIHdoYXQncyBjdXJyZW50bHkgYWxpdmUuCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2Vl
cFRvRnJlZUxpc3QgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQog
ICAgICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lv
bjsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrLm1f
bG9jay51bmxvY2soKTsKKyAgICAKKyAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFz
RGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA6IGRlYWRDZWxscykKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOworICAgIH0KIAog
ICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNp
emUoKSk7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0xNzcsMTIg
KzE5OCwxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAg
CiAgICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQodGhpcykpOwogICAgIAotICAg
IGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAg
ICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+
KHN3ZWVwTW9kZSk7Ci0gICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPERv
ZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgaWYgKHNwYWNlKCktPmlzTWFy
a2luZygpKQorICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CisgICAgCisgICAgaWYgKG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKSB7CisgICAgICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNl
bGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5n
Pihzd2VlcE1vZGUpOworICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1v
ZGU8QmxvY2tIYXNEZXN0cnVjdG9ycz4oc3dlZXBNb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzTm9EZXN0cnVjdG9ycz4oc3dlZXBN
b2RlKTsKIH0KIAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KK3Rl
bXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0
U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYgKHNjcmliYmxlRnJl
ZUNlbGxzKCkpCkBAIC0xOTAsNyArMjE3LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZTxkZXN0
cnVjdGlvbk1vZGUsIERvbnRTY3JpYmJsZT4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8RGVz
dHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJi
bGVNb2RlIHNjcmliYmxlTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2Ny
aWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgLy8g
SXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cgaWYgdGhl
IGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC0yMDUsNyArMjMyLDcgQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBl
clNlbGVjdEhhc05ld2x5QWxsb2NhdGVkPE5vdEVtcHR5LCBkZXN0cnVjdGlvbk1vZGUsIHNjcmli
YmxlTW9kZT4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6
RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KK3RlbXBsYXRlPE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKIHsKICAgICBpZiAoaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkKQEAgLTIxMyw3ICsyNDAs
NyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJu
IHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlPGVtcHR5TW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBz
Y3JpYmJsZU1vZGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQ+KHN3ZWVwTW9kZSk7CiB9CiAK
LXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3Ry
dWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxl
TW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9k
ZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3Jp
YmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFs
bG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNl
bGVjdFN3ZWVwTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChzd2VlcE1vZGUg
PT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMjIxLDEwICsyNDgsMTYgQEAgRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdE1h
cmtzTW9kZTxlbXB0eU1vZGUsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1v
ZGUsIG5ld2x5QWxsb2NhdGVkTW9kZT4oKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6Okhh
bmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2Rl
IHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJs
b2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25N
b2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNj
cmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5
QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVy
U2VsZWN0TWFya3NNb2RlKCkKIHsKLSAgICBpZiAoYXJlTWFya3NTdGFsZSgpKQorICAgIEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24oKTsKKyAgICBi
b29sIG1hcmtzQXJlVXNlZnVsID0gIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pOworICAg
IAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgbWFya3NBcmVVc2VmdWwg
fD0gbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pOworICAg
IAorICAgIGlmICghbWFya3NBcmVVc2VmdWwpCiAgICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3
ZWVwPGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwg
bmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc1N0YWxlPigpOwogICAgIHJldHVybiBzcGVjaWFsaXpl
ZFN3ZWVwPGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9k
ZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc05vdFN0YWxlPigpOwogfQpAQCAtMjQxLDM3ICsy
NzQsMjQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzZXRJc0ZyZWVMaXN0ZQogICAgIG1f
aXNGcmVlTGlzdGVkID0gdHJ1ZTsKIH0KIAotY2xhc3MgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9y
IDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotICAgICAgICA6
IG1fYmxvY2soYmxvY2spCi0gICAgewotICAgIH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVy
YXRvcigpKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCkgPT0gJm1fYmxvY2stPmJsb2Nr
KCkpOwotICAgICAgICBtX2Jsb2NrLT5zZXROZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fYmxvY2s7Ci19OwotCiB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKLSAgICBp
ZiAoZmFsc2UpCisgICAgaWYgKHRydWUpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlz
KSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NF
UlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBpZiAoIWlzRnJlZUxp
c3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRoZXJl
IGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHRo
YXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9yIGFsbG9jYXRpb24g
c2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxyZWFkeSBkb25lIHN0
b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxpc3QuYWxsb2NhdGlv
bldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChmYWxz
ZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwgIlxuIik7CisgICAg
CiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhlYXAgaW50cm9zcGVj
dGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIgZnJlZSBsaXN0IGFy
ZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAgICAgLy8gd2F5IHRv
IHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI5OSwxNyBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXdseUFsbG9jYXRlZC5j
bGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RT
cGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3bHlBbGxvY2F0ZWRG
dW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rvcik7CisgICAgZm9y
RWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSAt
PiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7
CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAg
fSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0LAogICAgICAgICBb
Jl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsKICAg
ICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlv
bikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAgIGNsZWFyTmV3bHlB
bGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMzMiwxNCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJl
c3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmICh0cnVlKQorICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4i
KTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNT
RVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkp
IHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qg
bm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFs
cmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAg
ICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpAQCAtMzQ5LDExICszNzgsMTQgQEAgdm9p
ZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogewogICAgIEFTU0VSVCh2bSgp
LT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOwogICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgZGF0YUxvZygiYWJvdXRUb01hcmtTbG93IVxuIik7CiAgICAgaWYgKCFh
cmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGlmIChoYW5kbGUoKS5hbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoJmhhbmRsZSgpKQogICAgICAg
ICB8fCAhbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKSB7
CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlz
KSwgIjogQ2xlYXJpbmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLlxuIik7CiAg
ICAgICAgIC8vIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBibG9jayBpcyBmdWxsIGFuZCBpcyBh
bHJlYWR5IHJlY29nbml6ZWQgYXMgc3VjaCwgb3IgdGhhdCB0aGUKICAgICAgICAgLy8gYmxvY2sg
ZGlkIG5vdCBzdXJ2aXZlIHRoZSBwcmV2aW91cyBHQy4gU28sIHdlIGNhbiBjbGVhciBtYXJrIGJp
dHMgdGhlIG9sZCBmYXNoaW9uZWQKICAgICAgICAgLy8gd2F5LiBOb3RlIHRoYXQgaXQncyBwb3Nz
aWJsZSBmb3Igc3VjaCBhIGJsb2NrIHRvIGhhdmUgbmV3bHlBbGxvY2F0ZWQgd2l0aCBhbiB1cC10
by0KQEAgLTM2Miw2ICszOTQsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3co
SGVhcFZlCiAgICAgICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFsbG9jYXRlZC4KICAgICAgICAg
bV9tYXJrcy5jbGVhckFsbCgpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7
CiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5l
d2x5QWxsb2NhdGVkVmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9j
YXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CiAgICAgICAgICAgICAvLyBN
ZXJnZSB0aGUgY29udGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdl
dCB0aGUgZnVsbCBzZXQgb2YgYml0cwpAQCAtNDI5LDcgKzQ2Myw3IEBAIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWUKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAg
ICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7Ci0g
ICAgYWxsb2NhdG9yKCktPnNldElzQWxsb2NhdGVkKHRoaXMsIHRydWUpOworICAgIGFsbG9jYXRv
cigpLT5hdG9taWNTZXRBbmRDaGVja0lzQWxsb2NhdGVkKHRoaXMsIHRydWUpOwogfQogCiBzaXpl
X3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwzMCArMTkwLDMy
IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICBIYW5kbGUoSGVhcCYsIHZvaWQqKTsK
ICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4KKyAgICAgICAgZW51
bSBTd2VlcERlc3RydWN0aW9uTW9kZSB7IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgQmxvY2tIYXNE
ZXN0cnVjdG9ycywgQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZyB9Owor
ICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVjdGlvbk1vZGU+CiAgICAgICAg
IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVw
T25seSk7CiAgICAgICAgICAgICAKICAgICAgICAgZW51bSBTY3JpYmJsZU1vZGUgeyBEb250U2Ny
aWJibGUsIFNjcmliYmxlIH07CiAgICAgICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlLCBTY3JpYmJsZU1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0
RW1wdHlNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ZW51bSBFbXB0eU1vZGUgeyBJc0VtcHR5LCBOb3RFbXB0eSB9OwogICAgICAgICAKLSAgICAgICAg
dGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAg
ICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2Rl
PgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3
ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgIAogICAgICAgICBlbnVtIE5ld2x5QWxsb2Nh
dGVkTW9kZSB7IEhhc05ld2x5QWxsb2NhdGVkLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkIH07
CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwg
U2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5
TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRN
b2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZShTd2VlcE1v
ZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBT
d2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1v
ZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0
aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CiAgICAgICAgIEZyZWVM
aXN0IHN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBlbnVt
IE1hcmtzTW9kZSB7IE1hcmtzU3RhbGUsIE1hcmtzTm90U3RhbGUgfTsKICAgICAgICAgCi0gICAg
ICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmli
YmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CisgICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2Rl
LCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3BlY2lh
bGl6ZWRTd2VlcCgpOwogICAgICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBAQCB2b2lkIE1hcmtlZFNwYWNl
OjpwcmVwYXJlRm9yTWFya2luZygpCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRp
bmcoKQogewotICAgIEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAgICBmb3JFYWNoQWxsb2NhdG9y
KAogICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25T
dGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFsbG9jYXRpbmcoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29y
bGRTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24g
MjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2Vs
bCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkK
LSAgICA6IG1fc3RhY2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fYnl0ZXND
b3BpZWQoMCkKKyAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkK
ICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNpb24o
TWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyArODksNyBAQCBTbG90VmlzaXRv
cjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigp
CiB7Ci0gICAgY2xlYXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1hcmtTdGFja3MoKTsKIH0KIAog
dm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAgLTEwOSwxNiArMTA3LDE3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6
OnJlc2V0KCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwog
ICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zp
c2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7Ci0gICAg
QVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2Vs
bCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3ZvaWQgU2xvdFZp
c2l0b3I6OmNsZWFyTWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFjay5jbGVhcigpOworICAgIG1f
Y29sbGVjdG9yU3RhY2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JTdGFjay5jbGVhcigpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2Vs
bE9yQXV4aWxpYXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAgICAg
anNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKIAogICAgICAgICBhcHBlbmRU
b01hcmtTdGFjayhqc0NlbGwpOwogICAgICAgICByZXR1cm47CkBAIC0yMTAsNyArMjA5LDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZQogICAgIC8vIEluZGljYXRl
IHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAgIC8vIEluIGNhc2Ugb2YgY29u
Y3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3lj
bGUuCiAgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0
IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGFwcGVuZFRvTWFya1N0YWNr
KGNvbnRhaW5lciwgY2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywxOSBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAg
IEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkgfHwgY2VsbC0+
Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAgICBBU1NFUlQoY2VsbC0+Y2Vs
bFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1h
cmtlZCgpOwogICAgIAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBiZWNhdXNlIHRo
ZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBCdXQK
LSAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3VycmVudCBHQy4K
ICAgICBtX3Zpc2l0Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBjb250YWluZXIuY2Vs
bFNpemUoKTsKICAgICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKyAgICBtX2NvbGxlY3Rv
clN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NdXRh
dG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX211dGF0b3JTdGFjay5h
cHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qg
dm9pZCogYmFzZSkKQEAgLTI5NCwxMiArMjk2LDE1IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6dmlzaXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRD
ZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xkQ2VsbFN0YXRlID0gY2VsbC0+
Y2VsbFN0YXRlKCk7Ci0gICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFjZSBoZXJlIC0gdGhlIGNl
bGwgc3RhdGUgY2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2JqZWN0cyBjYW4gb25seSBi
ZQotICAgIC8vIHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBOZWl0aGVyIHRoZSBiYXJy
aWVyIG5vciBtYXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbgotICAgIC8vIG9iamVj
dCB0aGF0IGlzIGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRDZWxsU3RhdGUgPT0gQ2Vs
bFN0YXRlOjpPbGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSk7
CisgICAgZGF0YUxvZygiVmlzaXRpbmcgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgaWYgKG1f
aXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgZGF0YUxvZygiIChtdXRhdG9yKSIpOwor
ICAgIGRhdGFMb2coIlxuIik7CisgICAgCisgICAgLy8gRnVubnkgc3Rvcnk6IGl0J3MgcG9zc2li
bGUgZm9yIHRoZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxyZWFkeSwgaWYgd2UgYmFycmllciB0aGUg
b2JqZWN0IGF0CisgICAgLy8gYWJvdXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0J3MgbWFya2VkLiBU
aGF0J3MgZmluZS4gSXQncyBhIGduYXJseSBhbmQgc3VwZXItcmFyZSByYWNlLiBJdCdzCisgICAg
Ly8gbm90IGNsZWFyIHRvIG1lIHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCBvciBwcm9maXRhYmxl
IHRvIGJhaWwgaGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBibGFjay4KICAg
ICAKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7
CiAgICAgCkBAIC0zMjYsMjMgKzMzMSwyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OnZpc2l0Q2hpCiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hv
dEJ1aWxkZXIpKSB7Ci0gICAgICAgIGlmIChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5l
d0dyZXkpCisgICAgICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQogICAgICAgICAg
ICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCkpOwogICAgIH0KIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxl
bCgpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5
JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pCiB7CiAgICAgLy8gTk9URTogQmVjYXVzZSB3ZSBy
ZS10cnkgb2Z0ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUgY29uc2VydmF0aXZlLCBhbmQKICAgICAv
LyBhc3N1bWUgdGhhdCBkb25hdGluZyBpcyBub3QgcHJvZml0YWJsZS4KIAogICAgIC8vIEF2b2lk
IGxvY2tpbmcgd2hlbiBhIHRocmVhZCByZWFjaGVzIGEgZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBn
cmFwaC4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQorICAgIGlmIChmcm9tLnNpemUoKSA8
IDIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNo
YXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0
aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3No
YXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAgaWYgKHRvLnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0
aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCkBAIC0zNTIsMjYgKzM1Nyw0MyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5k
IGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjayk7CisgICAgZnJvbS5kb25hdGVTb21lQ2VsbHNUbyh0byk7CiAKICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQor
eworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3No
YXJlZENvbGxlY3Rvck1hcmtTdGFjayk7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0
b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworfQorCit2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1f
aXNJblBhcmFsbGVsTW9kZSk7CiAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnRk
b3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1f
c3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgIHZpc2l0
Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOworICAgIHdoaWxlICgoIW1fY29sbGVjdG9y
U3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFw
c2VkKHRpbWVvdXQpKSB7CisgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICBt
X2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxh
bmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykK
KyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFz
dCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIC8vIFdlIGtu
b3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBi
YXJyaWVyLCBub3QgYmVjYXVzZSBvZgorICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3
aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQg
aXQKKyAgICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIg
aXQgd2FzIGFscmVhZHkgbWFya2VkLgorICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0
YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9u
czo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNr
LmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9CiAgICAgICAg
IGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAgICAgCiAgICAgbWVyZ2VPcGFxdWVSb290
c0lmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChT
aGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQorU2xvdFZpc2l0b3I6OlNoYXJlZERyYWlu
UmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJl
ZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5Q
YXJhbGxlbE1vZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0MTQsNjAgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwg
ZWl0aGVyIHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9yIHVudGlsIHRoZXJlIGlzIHNvbWUgd29y
awogICAgICAgICAgICAgICAgIC8vIGZvciB1cyB0byBkby4KICAgICAgICAgICAgICAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRP
dXQ7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2Ug
cmVhY2ggdGVybWluYXRpb24/CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
aGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAg
ICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcg
c2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29y
ayB0byBiZSBkb25lPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAu
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1l
b3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CisKKyAgICAgICAg
ICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBt
YXN0ZXIga25vdy4KICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1f
aGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCi0g
ICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQoCi0g
ICAgICAgICAgICAgICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2lu
Z0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCgKKyAgICAgICAgICAgICAgICAgICAgbG9jaywg
dGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUg
Y3VycmVudCBwaGFzZSBkb25lPyBJZiBzbywgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAg
ICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hh
cmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3Rh
Y2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1h
cmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAg
ICAgICAgIG1fY29sbGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAg
ICAgICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVh
bFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JN
YXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAg
ICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAg
ICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwog
ICAgIH0KIH0KIApAQCAtNDUzLDcgKzQ4Nyw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1
ZVJvb3Qodm9pZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lk
KiByb290KSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBB
U1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFx
dWVSb290cy5jb250YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs1MDAsNiBAQCBUcmlTdGF0
ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3Rh
dGU7CiB9CiAKLWludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NF
UlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lk
IFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmICht
X29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTIzLDE0IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmRE
cmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4o
KTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFx
dWVSb290cygpCiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNo
b3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAg
IHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9v
dHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01
MjYsMTAgKzU1MSw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYK
ICAgICAgICAgbV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5m
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFBy
aW50U3RyZWFtJikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQot
ICAgICAgICBkYXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3Rvcjog
WyIsIHBvaW50ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBb
IiwgcG9pbnRlckxpc3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFu
ZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290
U2V0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAg
ICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyBy
ZXR1cm4gbV9zdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBj
b25zdCB7IHJldHVybiBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9y
TWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0Fy
cmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBj
b25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYg
dm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7
CkBAIC04NCwyNCArODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
YWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWlu
c09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9v
dFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAg
ICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRv
clN0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2
b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJN
YXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVy
biBtX3Zpc2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigp
OwotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRl
QW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CiAgICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJE
cmFpbiB9OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAg
ZW51bSBjbGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hh
cmVkRHJhaW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3Rvbmlj
VGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmlu
YWxpemVycygpOwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0K
IAorICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0
NSwyMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAg
ICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAg
CisgICAgdm9pZCBhcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAg
CiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdl
T3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJv
Zml0YWJsZSgpOwogCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAg
IAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25Q
YXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAg
IE1hcmtTdGFja0FycmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JT
dGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290
U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2
aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRl
c1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRD
b3VudDsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEs
NyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RC
dWlsZGVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIg
fTsKLSAgICBDZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxp
bmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVh
cCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAg
IGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkK
IGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6
ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9v
bGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQor
ICAgICAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNl
bmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oQUhTdHJ1Y3R1cmVJRElzVmFsaWQpOwogICAgICAgICBjb3JyZWN0U3RydWN0dXJl
LmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBjb3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJy
YW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGUo
KSkpOworICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCkpKTsKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSEluZGV4aW5n
VHlwZUlzVmFsaWQpOwogICAgICAgICBjb3JyZWN0SW5kZXhpbmdUeXBlLmxpbmsoJmppdCk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTk2LDcgKzk5Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZVcKICAgICAgICAgc3RvcmUzMihpbmRleGluZ1R5cGUsIGFycmF5UHJvZmlsZS0+YWRk
cmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICB9CiAKLSAgICBsb2FkOChBZGRyZXNz
KGNlbGwsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOworICAg
IGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBpbmRleGluZ1R5cGUpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklE
IGluZGV4aW5nVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI2Nyw4ICsyMjY3LDggQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFs
bG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAog
ICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0g
ICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAw
LCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0
T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1bHQpOwog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjc3
LDggKzIyNzcsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IG5ld1NpemUpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0
ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0
KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0
cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgICAg
ICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29w
ZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAg
ICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29u
c3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZv
LmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
ciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUg
YmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mg
c3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJp
dHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0
aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNv
bnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVW
YXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lndh
dGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1v
ZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTE1NywxMSArMTE1NywxMSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3RyCiAgICAgaW50IGluZGV4ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJn
dW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsNyArODg3LDcgQEAg
bWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogICAgIGNvbnN0IGluZGV4
aW5nVHlwZSA9IGNlbGxBbmRJbmRleGluZ1R5cGUgCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVj
dHVyZUlEW2NlbGxdLCBzY3JhdGNoCiAgICAgc3RvcmVpIHNjcmF0Y2gsIEFycmF5UHJvZmlsZTo6
bV9sYXN0U2VlblN0cnVjdHVyZUlEW3Byb2ZpbGVdCi0gICAgbG9hZGIgSlNDZWxsOjptX2luZGV4
aW5nVHlwZVtjZWxsXSwgaW5kZXhpbmdUeXBlCisgICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5n
VHlwZUFuZE1pc2NbY2VsbF0sIGluZGV4aW5nVHlwZQogZW5kCiAKIG1hY3JvIHNraXBJZklzUmVt
ZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYg
dWludDhfdCBJbmRleGluZ1R5cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkg
ICAgICAgICAgICAgICAgICA9IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBw
cm9wZXJ0eSBzdG9yYWdlLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBl
TWFzayAgICAgICAgPSAweDBFOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5n
U2hhcGUgICAgICAgICAgPSAweDAwOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lk
ZWRTaGFwZSAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2
Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAw
eDA4Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAg
PSAweDBBOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hh
cGUgPSAweDBDOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAg
ICAgICAgICAgICAgID0gMHgwRTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGlu
Z1NoYXBlICAgICAgICAgICAgICAgICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IFVuZGVjaWRlZFNoYXBlICAgICAgICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBm
b3IgYXJyYXlzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwNDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hh
cGUgICAgICAgICAgICAgICAgICAgICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4
MEM7CiAKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAg
ID0gMTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAg
ID0gNzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAg
ICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdT
aGFwZXMgICAgICAgICAgPSA3OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0
aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYg
dW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUg
SW5kZXhpbmdUeXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4
MjA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQg
ICAgICAgPSAweDQwOwogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDA7CkBAIC0xNzcsNCArMTgyLDYgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJh
eVR5cGVzIAogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0
b3J5Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAg
PSBBbGxBcnJheVR5cGVzIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9j
a0FsZ29yaXRobTxJbmRleGluZ1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5n
VHlwZUxvY2tIYXNQYXJrZWQ+IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5j
cHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5
Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAg
IHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwg
bmV3QnV0dGVyZmx5KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwx
NSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVl
ZCB0byBoYXZlIEdDIGRlZmVycmVkIGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwg
c2luY2UgdGhhdCBsZWF2ZXMgdGhlIGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6
IHNvbWUgcGFydHMgb2YgaXQgd2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdp
bGwgZmlsbCBpbiBoZXJlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBKU0Nl
bGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKICAgICAKICAgICBpZiAobW92ZUZyb250
ICYmIHN0b3JhZ2UtPm1faW5kZXhCaWFzID49IGNvdW50KSB7CiAgICAgICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCks
IGNvdW50KTsKICAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7
CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdl
LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOwotICAgICAgICBzZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVu
Z3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFy
cmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKHZtLCBkZWZl
ckdDLCBtb3ZlRnJvbnQsIGNvdW50KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5kZXhdLmNsZWFyKCk7
CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwzMiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CiAgICAgYm9vbCBpbmhlcml0cyhjb25z
dCBDbGFzc0luZm8qKSBjb25zdDsKICAgICBib29sIGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7
CisgICAgCisgICAgLy8gRWFjaCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2suIEN1cnJlbnRseSBp
dCdzIHNpbXBseSBhdmFpbGFibGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4gSXQncworICAgIC8v
IGEgZnVsbC1ibG93biBXVEY6OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxvY2sgaXMgY3VycmVudGx5
IHVzZWQgaW4gSlNBcnJheSBhbmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRlcmluZyB3aXRoIHRo
ZSBTdHJ1Y3R1cmUgbG9jayBpcyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBtdXN0IGJlIGFjcXVp
cmVkIGZpcnN0LgorICAgIHZvaWQgbG9ja0ludGVybmFsTG9jaygpOworICAgIHZvaWQgdW5sb2Nr
SW50ZXJuYWxMb2NrKCk7CisgICAgCisgICAgY2xhc3MgSW50ZXJuYWxMb2NrZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgSW50ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxsKQorICAgICAgICAgICAg
OiBtX2NlbGwoY2VsbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jZWxsLT5sb2NrSW50ZXJu
YWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5JbnRlcm5hbExvY2tlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJuYWxMb2NrKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDZWxsKiBtX2NlbGw7
CisgICAgfTsKIAogICAgIEpTVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdDsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KCkgY29uc3Q7CiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZUlEOyB9CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE2
Nyw2ICsxOTEsMTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxT
dGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRl
ID0gZGF0YTsgfQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRl
V2Vha1JlbGF4ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgm
bV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0YXRl
IGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3RhdGUs
IENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0Nv
bXBhcmVFeGNoYW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7Cisg
ICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpA
QCAtMTgzLDkgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNDZWxsLCBtX3R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhp
bmdUeXBlT2Zmc2V0KCkKKyAgICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlz
IHVzZSBhIENBUyBsb29wLCBzaW5jZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQgdXNpbmcgQ0FTCisg
ICAgLy8gZnJvbSBvdGhlciB0aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwgbG9jay4gT25lIGV4
Y2VwdGlvbjogeW91IGRvbid0IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAgICAvLyBvYmplY3QgaGFz
IG5vdCBlc2NhcGVkIHlldC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGws
IG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGws
IG1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBj
ZWxsU3RhdGVPZmZzZXQoKQpAQCAtMjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0
dXJlSUQ7Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5nVHlw
ZSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBB
bHdheXMgQ0FTLgogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86OklubGluZVR5cGVG
bGFncyBtX2ZsYWdzOwogICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTYgKzQyLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogaW5saW5lIEpT
Q2VsbDo6SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVGFnKQogICAgIDogbV9jZWxsU3RhdGUoQ2Vs
bFN0YXRlOjpOZXdXaGl0ZSkKIHsKKyAgICBkYXRhTG9nKCJDcmVhdGVkIGVhcmx5IGNlbGwgYXQg
IiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIik7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkpOwogfQogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKICAgICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJlLT5pZCgpKQotICAgICwgbV9pbmRl
eGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAsIG1faW5kZXhpbmdUeXBl
QW5kTWlzYyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAs
IG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9mbGFncyhzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCiAgICAgLCBtX2NlbGxTdGF0ZShD
ZWxsU3RhdGU6Ok5ld1doaXRlKQogeworICAgIGRhdGFMb2coIkNyZWF0ZWQgY2VsbCBhdCAiLCBS
YXdQb2ludGVyKHRoaXMpLCAiXG4iKTsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQo
KSk7CiB9CiAKQEAgLTc0LDcgKzc2LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVh
dGlvbihWTSYgdgogICAgIGlmIChzdHJ1Y3R1cmUpIHsKICNlbmRpZgogICAgICAgICBtX3N0cnVj
dHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0
dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQpAQCAtOTEsOSArOTMsMTQgQEAgaW5saW5lIEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25z
dAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2lubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVB
bmRNaXNjOworfQorCiBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9pbmRleGluZ1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5n
VHlwZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlwZXM7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpT
Q2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTE5NSwxNyArMjAyLDI3IEBAIGlubGluZSBib29s
IEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIoKSAKICAgICByZXR1cm4gbV90eXBlID09IEFQSVZh
bHVlV3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpz
ZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQo
c3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkp
OwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0
dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAg
ICAgfHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUt
PmlkKCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3Ry
dWN0dXJlKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fc3RydWN0dXJlSUQg
PSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
bmxpbmVUeXBlRmxhZ3MoKTsKICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpOwotICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAg
ICBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCk7CisgICAgaWYgKG1faW5kZXhpbmdUeXBlQW5kTWlzYyAhPSBuZXdJ
bmRleGluZ1R5cGUpIHsKKyAgICAgICAgQVNTRVJUKCEobmV3SW5kZXhpbmdUeXBlICYgfkFsbEFy
cmF5VHlwZXNBbmRIaXN0b3J5KSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIElu
ZGV4aW5nVHlwZSBvbGRWYWx1ZSA9IG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKKyAgICAgICAgICAg
IEluZGV4aW5nVHlwZSBuZXdWYWx1ZSA9IChvbGRWYWx1ZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlz
dG9yeSkgfCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICAg
ICAgICAgIGlmIChXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2luZGV4
aW5nVHlwZUFuZE1pc2MsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3Ry
dWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRh
YmxlKCkgY29uc3QKQEAgLTI4NCwxMSArMzAxLDI2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6Y2Fs
bERlc3RydWN0b3IoVk0mIHYKICAgICBpZiAoaXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIEFTU0VSVChzdHJ1Y3R1cmVJRCgpKTsKLSAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBT
dHJ1Y3R1cmVJc0ltbW9ydGFsKQotICAgICAgICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKS0+
bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZVR5cGVG
bGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRl
c3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95
OworICAgICAgICBkZXN0cm95KHRoaXMpOworICAgIH0gZWxzZQogICAgICAgICBqc0Nhc3Q8SlNE
ZXN0cnVjdGlibGVPYmplY3QqPih0aGlzKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ry
b3kodGhpcyk7CiAgICAgemFwKCk7CiB9CiAKK2lubGluZSB2b2lkIEpTQ2VsbDo6bG9ja0ludGVy
bmFsTG9jaygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nh
c3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJ
bmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjpsb2NrKCpsb2NrKTsKK30KKworaW5saW5lIHZvaWQg
SlNDZWxsOjp1bmxvY2tJbnRlcm5hbExvY2soKQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+
KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdU
eXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6dW5sb2NrKCpsb2Nr
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Myw3ICsxMTMsOSBAQCB2b2lkIEpTRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgCiBK
U0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mIHZtLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjcmVhdGUodm0sIGV4ZWN1dGFibGUsIGds
b2JhbE9iamVjdCk7CisgICAgZGF0YUxvZygiRnVuY3Rpb24gPSAiLCBKU1ZhbHVlKGZ1bmN0aW9u
KSwgIlxuIik7CiAgICAgZnVuY3Rpb24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bmFtZSwganNTdHJpbmcoJnZtLCBleGVjdXRhYmxlLT5uYW1lKCkuc3RyaW5nKCkpLCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKKyAgICBkYXRhTG9nKCJTdG9yaW5nIGxlbmd0aC5cbiIpOwogICAgIGZ1
bmN0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIo
ZXhlY3V0YWJsZS0+ZnVuY3Rpb25MZW5ndGgoKSksIFJlYWRPbmx5IHwgRG9udEVudW0pOwogICAg
IHJldHVybiBmdW5jdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE3ICsxMTIsMjgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgIAogICAgIC8v
IE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0g
ICAgCi0gICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgc3dpdGNoICh0
aGlzLT5pbmRleGluZ1R5cGUoKSkgeworCisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHN3aXRjaCAob2xkVHlwZSkgewogICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJs
aWNMZW5ndGgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0Vf
SU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzogeworICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVyZSB0byBwcm90ZWN0
IENvbnRpZ3VvdXMtPkFycmF5U3RvcmFnZSB0cmFuc2l0aW9ucywgYnV0IHdlIGNvdWxkIG1ha2Ug
dGhhdAorICAgICAgICAvLyByYWNlIHdvcmsgaWYgd2UgbmVlZGVkIHRvLgorICAgICAgICBKU0Nl
bGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG5l
d1R5cGUgPSB0aGlzLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+
YnV0dGVyZmx5KCk7CisgICAgICAgIHN3aXRjaCAobmV3VHlwZSkgeworICAgICAgICBjYXNlIEFM
TF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvLyBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUworICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChi
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NiwxMCArMTU3LDM0IEBAIHZv
aWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJm
bHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZs
eSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwotCisgICAgLy8gV2Ugd2Fu
dCB0byBkZWZlbmQgYWdhaW5zdCBtdWx0aXBsZSBwb3NzaWJsZSByYWNlcyB3aXRoIHRoZSBtdXRh
dG9yOgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBpbnN0YWxsIGEgYmlnZ2VyIGJ1dHRlcmZseSBh
bmQgdGhlbiBpbnN0YWxsIGEgc3RydWN0dXJlIHRoYXQgY2xhaW1zIG1vcmUKKyAgICAvLyAgIHBy
b3BlcnRpZXMuIFRoaXMgdHJpdmlhbGx5IHdvcmtzLgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBt
dXRhdGUgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBIZW5jZSwgd2UgaG9sZCB0aGUgc3RydWN0
dXJlIGxvY2sgZm9yCisgICAgLy8gICBkaWN0aW9uYXJ5IHN0cnVjdHVyZXMuCisgICAgLy8gLSBU
aGUgYnV0dGVyZmx5IGNvdWxkIHNocmluaywgYnV0IHRoaXMgY291bGQgb25seSBoYXBwZW4gaWYg
dGhlIG9iamVjdCB3YXMgYSBkaWN0aW9uYXJ5LgorICAgIC8vICAgVXN1YWxseSwgdGhpcyBtZWFu
cyB0aGF0IHdlIHdvdWxkIGdldCB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGFjcXVpcmUg
YSBsb2NrLiBUaGF0CisgICAgLy8gICB0cml2aWFsbHkgd29ya3MuIEJ1dCB3ZSBjb3VsZCBsb2Fk
IHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBvYmplY3QgYmVjYW1lIGEgZGljdGlvbmFyeQorICAg
IC8vICAgYW5kIHRoZW4gbG9hZCB0aGUgYnV0dGVyZmx5IHRoYXQgd2FzIHNocnVuay4gV2UgcHJv
dGVjdCBhZ2FpbnN0IHRoaXMgY2FzZSBieSBjaGVja2luZworICAgIC8vICAgdGhlIHN0cnVjdHVy
ZSBhIHNlY29uZCB0aW1lIGJlZm9yZSBzY2FubmluZyB0aGUgYnV0dGVyZmx5LiBUaGlzIG1lYW5z
IHRoYXQgdGhlIGJ1dHRlcmZseQorICAgIC8vICAgaXMgYXQgd29yc3QgdGhlIGJ1dHRlcmZseSB0
aGF0IHRoZSBtdXRhdG9yIGhhZCBpbnN0YWxsZWQganVzdCBwcmlvciB0byBmbGlwcGluZyB0aGUK
KyAgICAvLyAgIHN0dXJjdHVyZS4gU28gaWYgdGhlIHN0cnVjdHVyZSB3ZSBzZWUgaXMgYSBub24t
ZGljdGlvbmFyeSB0aGVuIHRoZSBidXR0ZXJmbHkgY2Fubm90IHlldAorICAgIC8vICAgaGF2ZSBi
ZWVuIHNocnVuay4KKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlv
bmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkp
IHsKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIH0gZWxzZQorICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkgPT0gc3RydWN0dXJl
LT5pZCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwg
YnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAg
ICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3
YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC0yMDQsMTUgKzIz
OSwyNSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAg
ICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsK
LSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAg
IGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0
b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAg
IGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYg
KHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICBl
bHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpKSB7CisgICAgICAgIFdURjo6bG9hZExv
YWRGZW5jZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5pZCgpID09IHRoaXNPYmplY3QtPnN0
cnVjdHVyZUlEKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNp
dG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQogCiAgICAgc2l6ZV90IHN0b3JhZ2VT
aXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCk7CiAgICAgaWYgKHN0b3JhZ2VTaXplKQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdl
KCksIHN0b3JhZ2VTaXplKTsKLQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1
Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
dmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5n
Rm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTY2Niw3ICs3MTEsOCBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIG1hcCk7Ci0gICAgc2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAg
IAogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNzMxLDcg
Kzc3Nyw5IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBj
cmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHk7CiB9CiAKQEAgLTc0Miw3ICs3OTAsOSBAQCBDb250aWd1b3VzSlNWYWx1
ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVy
Zmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1
b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsK
LSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTc1Myw3ICs4
MDMsOSBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVj
dHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwot
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICBy
ZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKQEAgLTc2NCw3ICs4
MTYsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihK
U1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlv
bjo6QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUo
dm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygp
OwogfQogCkBAIC03OTcsNyArODUxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9y
YWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBt
X2J1dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0
cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04
ODAsNyArOTM2LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAog
ICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFs
dWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRl
cmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2
bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0
dXJlKTsKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtOTM1LDcgKzk5Myw5IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0
dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtOTgxLDcgKzEwNDEsOSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsK
KyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3Jh
Z2U7CiB9CiAKQEAgLTEwMDYsNyArMTA2OCwyMiBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRy
YW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKKyAgICAvLyBUaGlzIGhhcyBhIGNyYXp5IHJh
Y2Ugd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFdoZW4gY2hhbmdpbmcgdGhlIGJ1dHRlcmZs
eSBhbmQgc3RydWN0dXJlLAorICAgIC8vIHRoZSBtdXRhdG9yIGFsd2F5cyBzZXRzIHRoZSBzdHJ1
Y3R1cmUgbGFzdC4gVGhlIGNvbGxlY3RvciB3aWxsIGFsd2F5cyByZWFkIHRoZSBzdHJ1Y3R1cmUK
KyAgICAvLyBmaXJzdC4gV2UgcHJvYmFibHkgaGF2ZSB0byBmb2xsb3cgdGhhdCBjb252ZW50aW9u
IGhlcmUgYXMgd2VsbC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IKKyAgICAvLyB3aWxs
IHNvbWV0aW1lcyBzZWUgdGhlIG5ldyBidXR0ZXJmbHkgKHRoZSBvbmUgd2l0aCBBcnJheVN0b3Jh
Z2UpIHdpdGggdGhlIG9ubHkgc3RydWN0dXJlICh0aGUKKyAgICAvLyBvbmUgdGhhdCBzYXlzIHRo
YXQgdGhlIGJ1dHRlcmZseSBpcyBDb250aWd1b3VzKS4gV2hlbiBzY2FubmluZyBDb250aWd1b3Vz
LCB0aGUgY29sbGVjdG9yIHdpbGwKKyAgICAvLyBtYXJrIHdvcmQgYXQgYWRkcmVzc2VzIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYnV0dGVyZmx5IHBvaW50ZXIsIHVwIHRvIHRoZSBwdWJs
aWNMZW5ndGgKKyAgICAvLyBpbiB0aGUgYnV0dGVyZmx5LiBCdXQgYW4gQXJyYXlTdG9yYWdlIGhh
cyBzb21lIG5vbi1wb2ludGVyIGhlYWRlciBkYXRhIGF0IGxvdyBwb3NpdGl2ZQorICAgIC8vIG9m
ZnNldHMgZnJvbSB0aGUgYnV0dGVyZmx5IC0gc28gd2hlbiB0aGlzIHJhY2UgaGFwcGVucywgdGhl
IGNvbGxlY3RvciB3aWxsIHN1cmVseSBjcmFzaAorICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBmYWls
IHRvIGRlY29kZSB0d28gY29uc2VjdXRpdmUgaW50MzJzIGFzIGlmIGl0IHdhcyBhIEpTVmFsdWUu
CisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgd2UgaGF2ZSB0aGUgSlNDZWxsIGxvY2sgZm9y
IHRoaXMgcHVycG9zZSEKKyAgICAKKyAgICBJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBA
IC0xNDY4LDcgKzE1NDUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
IGNlCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUp
OworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXNP
YmplY3QtPnNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKIApAQCAtMjcyNSw3ICsy
ODAyLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsr
aSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ld
LmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMjc0Miw3ICsyODIwLDggQEAgYm9vbCBK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwot
ICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3
QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc2Miw2ICsyODQxLDcgQEAg
Ym9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgIAogICAgIHVuc2ln
bmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAgICAgIEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29u
dGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOwor
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbnVsbHB0cjsKICAgICBpZiAoYXZhaWxhYmxl
T2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJl
IHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGggdGhhdCBjYXVzZWQgaW50ZXJu
YWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlkIG91ciBqb2JzIHJpZ2h0LCB0
aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdpbGwgbWVzcwpAQCAtMjc3Niwx
NyArMjg1NiwyNCBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAg
ICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAg
ICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKKyAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkg
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0
b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgp
W2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5kZXhpbmdQYXlsb2FkPGRvdWJs
ZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
b2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBi
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICAgICAgYnV0dGVyZmx5
LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+PigpW2ldLmNsZWFyKCk7Cisg
ICAgfQorCisgICAgaWYgKG5ld0J1dHRlcmZseSkgeworICAgICAgICBidXR0ZXJmbHktPnNldFZl
Y3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgYnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTI4MDIsMTIgKzI4ODksMTMgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxv
Y2F0ZUFuZFNocmlua0J1dHRlcgogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnJlc2l6ZUFycmF5
KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkp
OwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKICAgICBuZXdC
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBt
X2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7CiB9CiAKLUJ1dHRlcmZseSog
SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5l
U3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBB
U1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCkBAIC0zMDkyLDE1ICszMTgwLDMzIEBAIHZvaWQg
SlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAgICAgICAgdm0sIFN0cnVjdHVy
ZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRl
ZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJm
bHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUs
IHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0
ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9y
ZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0
ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSB0aGlz
LT5idXR0ZXJmbHlQcmVDYXBhY2l0eSgpOwotICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gYnV0dGVy
Zmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKLSAgICB2b2lk
KiBuZXdCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0
eUJlZm9yZSk7CisgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRyZW4gYmVj
YXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCisgICAgLy8gZGlj
dGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0LCB3ZSBh
cmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCisgICAgLy8gdGhlIHN0cnVjdHVyZSdzIGxvY2sg
cmlnaHQgbm93LCBhbmQgdGhhdCBoZWxwcyBhIGJpdC4KKyAgICAKKyAgICBCdXR0ZXJmbHkqIG9s
ZEJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsK
KyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRl
eGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZ
KGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IG9sZEJ1dHRlcmZs
eS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCkt
PmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyA9IDA7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHRoaXMsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBh
Y2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMp
OwogCi0gICAgbWVtbW92ZShuZXdCYXNlLCBjdXJyZW50QmFzZSwgdGhpcy0+YnV0dGVyZmx5VG90
YWxTaXplKCkpOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwg
QnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdCYXNlLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNp
dHlBZnRlcikpOworICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKHBy
ZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkKiBuZXdCYXNlID0g
bmV3QnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSk7
CisKKyAgICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwg
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICAKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIH0KIAogdWludDMy
X3QgSlNPYmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NDcsMTEgKzc0NywxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0
aWNQcm9wZXJ0aWVzUmVpZmllZCgpOyB9CiAgICAgdm9pZCByZWlmeUFsbFN0YXRpY1Byb3BlcnRp
ZXMoRXhlY1N0YXRlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dP
dXRPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAg
ICB2b2lkIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShWTSYsIEJ1dHRlcmZs
eSopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogYWxsb2NhdGVNb3JlT3V0T2ZM
aW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgICAg
IAorICAgIHZvaWQgc2V0QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5Kik7IC8vIEFsd2F5cyBjaGFu
Z2UgdGhlIGJ1dHRlcmZseSBiZWZvcmUgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSEKICAgICB2b2lk
IHNldFN0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIApAQCAtNzU5LDcgKzc1OCw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKHZtLCB0aGlzKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhWTSYsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90
IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZs
YXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9m
TGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IGNvbnN0CiAgICAgewpAQCAtMTIwNSwxNCArMTIwNCw2IEBAIGlubGluZSBib29sIEpTT2JqZWN0
Ojppc1dpdGhTY29wZSgpIGNvbnMKICAgICByZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7
CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCi17Ci0gICAg
QVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIodGhp
cykpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7Ci0gICAgc2V0
U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0
U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0
cnVjdHVyZSk7CkBAIC0xMjIwLDcgKzEyMTEsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0
U3RydWN0dXJlKFZNJiB2CiAgICAgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7
CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK2lubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRCdXR0ZXJmbHkoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBt
X2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiB9CkBAIC0xMjgyLDcgKzEyNzMs
NyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3Qo
dm0sIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gZ2V0UHJvcGVy
dHlTbG90IHJlbGllcyBvbiB0aGlzIG1ldGhvZCBuZXZlciByZXR1cm5pbmcgaW5kZXggcHJvcGVy
dGllcyEKICAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAKQEAgLTE0MTcs
MTYgKzE0MDgsMjAgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgog
ICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJs
ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHko
KTsKLSAgICAgICAgaWYgKHRoaXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0
dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAg
b2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24o
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgICAgIG9m
ZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAg
ICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBbJl0gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOworICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9m
TGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OworICAgICAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAg
ICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgfSk7CiAK
LSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPnN0
cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwogICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICB0aGlz
LT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE0NDUs
MTMgKzE0NDAsMTUgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgog
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBp
ZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewogICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAg
ICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3Vy
cmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgfQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9m
ZnNldCk7CiAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0
KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAg
ICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3
UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTQ5OCwxMyArMTQ5NSwxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEluCiAgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKICAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAgIGlm
IChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBu
ZXdTdHJ1Y3R1cmUpOwotICAgIGVsc2UgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZs
eSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOwot
ICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBpZiAob2xkQ2FwYWNpdHkgIT0gbmV3Q2FwYWNpdHkpIHsKKyAgICAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZt
LCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfQogICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBp
ZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRh
aW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CkBAIC0xNTU2LDE1ICsxNTUzLDE5IEBAIGlubGluZSB2
b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkpOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKSkKLSAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0s
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVk
TmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBh
bGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0
eSgpKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAoYXR0cmlidXRl
cyAmIFJlYWRPbmx5KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9w
ZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVy
ZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
KyAgICBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNl
dENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBib29sIHNob3VsZE9w
dGltaXplID0gZmFsc2U7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9y
TmV3VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUpOwor
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7CisgICAgICAgIH0pOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBSZWdp
c3Rlcjo6b2JqZWN0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4IEBAIHR5cGVkZWYg
Y29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXplU3Rh
Y2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUdlbmVyYXRpb25h
bEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRC
YXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJy
ZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGNvbGxlY3RDb250
aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGZvcmNlRmVu
Y2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJi
bGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6
ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VB
cnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IFNw
YXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYQogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
CiB9OwogCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBoYXZlIGEgbG9jayBpbiBpdC4KIGNsYXNz
IFNwYXJzZUFycmF5VmFsdWVNYXAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUs
NiBAQAogCiAjZGVmaW5lIERVTVBfU1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MgMAogCi0jaWZuZGVm
IE5ERUJVRwotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2Vsc2UK
LSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLIDAKLSNlbmRpZgotCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtNjIxLDEzICs2MTUs
MTMgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYQogU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbktpbmQpCiB7CiAgICAgdW5z
aWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7Ci0gICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOworICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CiAg
ICAgCiAgICAgaWYgKGNoYW5nZXNJbmRleGluZ1R5cGUodHJhbnNpdGlvbktpbmQpKSB7CiAgICAg
ICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5tX2dsb2Jh
bE9iamVjdC5nZXQoKSkgewogICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+aXNPcmlnaW5h
bEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZShpbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVy
ZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSkgewogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUtPmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KQEAgLTYzOCw3ICs2MzIsNyBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgU3RydWN0dXJlKiBl
eGlzdGluZ1RyYW5zaXRpb247CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYm
IChleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCgw
LCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+YXR0
cmlidXRlc0luUHJldmlvdXMoKSA9PSBhdHRyaWJ1dGVzKTsKLSAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5n
VHlwZSk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAg
ICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC02NDYsNyArNjQw
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIAogICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICB0cmFu
c2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0
aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSk7CiAgICAgCiAgICAgaWYgKHByZXZlbnRzRXh0ZW5zaW9ucyh0cmFuc2l0
aW9uS2luZCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldERpZFByZXZlbnRFeHRlbnNpb25zKHRy
dWUpOwpAQCAtNzM2LDYgKzczMCw4IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVMKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlz
RGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2ssIHZtLmhlYXApOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5
ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgewpAQCAtNzczLDM4ICs3NjksMTcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhZCBhIEJ1dHRlcmZs
eSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdlIG5vIGxvbmdlciBoYXZlIG5lZWQg
b2YgaXQsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gemVybyBpdCBvdXQgYmVjYXVzZSB0aGUgY29s
bGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVyZSB0byBrbm93IHRoZSBzaXplIGZvciBjb3B5
aW5nLgogICAgICAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhYWZ0ZXJPdXRPZkxpbmVD
YXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKLSAgICAgICAgICAg
IG9iamVjdC0+c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLCAwKTsKKyAgICAgICAg
ICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAgICAgLy8gSWYgdGhl
IG9iamVjdCB3YXMgZG93bi1zaXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhl
IEJ1dHRlcmZseSBpcyBubyBsb25nZXIgd2l0aGluIHRoZSAKICAgICAgICAgLy8gZmlyc3QgQ29w
aWVkQmxvY2s6OmJsb2NrU2l6ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIgaWYg
d2UgdHJ5IHRvIG1hc2sgdGhlIGJhc2UgYmFjayB0byAKICAgICAgICAgLy8gdGhlIENvcGllZEJs
b2NrIGhlYWRlci4gVG8gcHJldmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtZW1tb3ZlIHRoZSBC
dXR0ZXJmbHkgZG93bi4KICAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSkKLSAg
ICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcodm0sIGJlZm9y
ZU91dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKKyAgICAgICAgICAg
IG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcobG9ja2VyLCB2bSwgdGhpcywg
YmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgIH0K
IAogICAgIHJldHVybiB0aGlzOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZl
ckdDKTsKLSAgICAKLSAgICBwaW4oKTsKLQotICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwotCi0gICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAgcGluKCk7Ci0gICAgcmV0dXJuIHJlbW92
ZShwcm9wZXJ0eU5hbWUpOwotfQotCiB2b2lkIFN0cnVjdHVyZTo6cGluKCkKIHsKICAgICBBU1NF
UlQocHJvcGVydHlUYWJsZSgpKTsKQEAgLTk4OSw0OSArOTY0LDEyIEBAIFZlY3RvcjxQcm9wZXJ0
eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0
eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMg
JiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAgICAgICAgc2V0SXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKLQotICAgIGF1dG8g
cmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0g
ICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwotCi0gICAgUHJvcGVydHlPZmZz
ZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNp
dHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5l
d09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVy
biBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7
IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0
eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0
aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJz
dCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5y
ZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChv
ZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBvZmZzZXQ7Cisg
ICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpjcmVhdGVQ
cm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNp
Z25lZCBjYXBhY2l0eSkKQEAgLTExMTQsNiArMTA1Miw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CisgICAgCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc09iamVj
dC0+bV9sb2NrKTsKKyAgICAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9nbG9i
YWxPYmplY3QpOwogICAgIGlmICghdGhpc09iamVjdC0+aXNPYmplY3QoKSkKICAgICAgICAgdGhp
c09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5jbGVhcigpOwpAQCAtMTI3Niw5MiArMTIx
Nyw2IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wQ29udGV4dEhlYWRlcihQcmludFMKICAgICBvdXQu
cHJpbnQoIlN0cnVjdHVyZXM6Iik7CiB9CiAKLSNpZiBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lf
Q0hFQ0sKLQotdm9pZCBQcm9wZXJ0eVRhYmxlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBB
U1NFUlQobV9pbmRleFNpemUgPj0gUHJvcGVydHlUYWJsZTo6TWluaW11bVRhYmxlU2l6ZSk7Ci0g
ICAgQVNTRVJUKG1faW5kZXhNYXNrKTsKLSAgICBBU1NFUlQobV9pbmRleFNpemUgPT0gbV9pbmRl
eE1hc2sgKyAxKTsKLSAgICBBU1NFUlQoIShtX2luZGV4U2l6ZSAmIG1faW5kZXhNYXNrKSk7Ci0K
LSAgICBBU1NFUlQobV9rZXlDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVCht
X2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NF
UlQobV9kZWxldGVkQ291bnQgPD0gbV9pbmRleFNpemUgLyA0KTsKLQotICAgIHVuc2lnbmVkIGlu
ZGV4Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIGRlbGV0ZWRJbmRleENvdW50ID0gMDsKLSAgICBm
b3IgKHVuc2lnbmVkIGEgPSAwOyBhICE9IG1faW5kZXhTaXplOyArK2EpIHsKLSAgICAgICAgdW5z
aWduZWQgZW50cnlJbmRleCA9IG1faW5kZXhbYV07Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09
IFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBkZWxldGVkRW50cnlJbmRleCgpKSB7Ci0gICAgICAg
ICAgICArK2RlbGV0ZWRJbmRleENvdW50OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggPCBkZWxldGVkRW50cnlJbmRleCgpKTsKLSAg
ICAgICAgQVNTRVJUKGVudHJ5SW5kZXggLSAxIDw9IHVzZWRDb3VudCgpKTsKLSAgICAgICAgKytp
bmRleENvdW50OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgYiA9IGEgKyAxOyBiICE9IG1faW5k
ZXhTaXplOyArK2IpCi0gICAgICAgICAgICBBU1NFUlQobV9pbmRleFtiXSAhPSBlbnRyeUluZGV4
KTsKLSAgICB9Ci0gICAgQVNTRVJUKGluZGV4Q291bnQgPT0gbV9rZXlDb3VudCk7Ci0gICAgQVNT
RVJUKGRlbGV0ZWRJbmRleENvdW50ID09IG1fZGVsZXRlZENvdW50KTsKLQotICAgIEFTU0VSVCgh
dGFibGUoKVtkZWxldGVkRW50cnlJbmRleCgpIC0gMV0ua2V5KTsKLQotICAgIHVuc2lnbmVkIG5v
bkVtcHR5RW50cnlDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IHVzZWRD
b3VudCgpOyArK2MpIHsKLSAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gdGFibGUoKVtjXS5rZXk7
Ci0gICAgICAgIGlmIChyZXAgPT0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICsrbm9uRW1wdHlFbnRyeUNvdW50OwotICAgICAg
ICB1bnNpZ25lZCBpID0gSWRlbnRpZmllclJlcEhhc2g6Omhhc2gocmVwKTsKLSAgICAgICAgdW5z
aWduZWQgayA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7Ci0gICAgICAgIHdoaWxl
ICgxKSB7Ci0gICAgICAgICAgICBlbnRyeUluZGV4ID0gbV9pbmRleFtpICYgbV9pbmRleE1hc2td
OwotICAgICAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggIT0gUHJvcGVydHlUYWJsZTo6RW1wdHlF
bnRyeUluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZXAgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0g
MV0ua2V5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGsgPT0gMCkK
LSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJsZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhh
c2gocmVwKSk7Ci0gICAgICAgICAgICBpICs9IGs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJU
KGVudHJ5SW5kZXggPT0gYyArIDEpOwotICAgIH0KLQotICAgIEFTU0VSVChub25FbXB0eUVudHJ5
Q291bnQgPT0gbV9rZXlDb3VudCk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3Rl
bmN5KCkKLXsKLSAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzUXVpY2tQcm9wZXJ0eUFj
Y2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbigpKSB7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgQVNTRVJUKCEoaXRlci0+YXR0cmlidXRlcyAm
IERvbnRFbnVtKSk7Ci0gICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmtleS0+aXNTeW1ib2woKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPmNoZWNrQ29uc2lzdGVu
Y3koKTsKLX0KLQotI2Vsc2UKLQotaW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3Rl
bmN5KCkKLXsKLSAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbmRpZiAvLyBE
T19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKLQogYm9vbCBDbGFzc0luZm86Omhhc1N0YXRp
Y1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBmb3IgKGNvbnN0IENs
YXNzSW5mbyogY2kgPSB0aGlzOyBjaTsgY2kgPSBjaS0+cGFyZW50Q2xhc3MpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDkgKzE5MSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKIAotICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIFByb3BlcnR5
T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUp
OworICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gVmVyc2lvbnMgdGhh
dCB0YWtlIGEgZnVuYyB3aWxsIGNhbGwgaXQgYWZ0ZXIgbWFraW5nIHRoZQorICAgIC8vIGNoYW5n
ZSBidXQgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jay4gVGhlIGNhbGxiYWNrIGlzIG5vdCBj
YWxsZWQgaWYgdGhlcmUgaXMgbm8gY2hhbmdlCisgICAgLy8gYmVpbmcgbWFkZSwgbGlrZSBpZiB5
b3UgY2FsbCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKCkgYW5kIHRoZSBwcm9wZXJ0
eSBpcyBub3QKKyAgICAvLyBmb3VuZC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICB2b2lkIHNldFBy
b3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9w
cm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAgICAgIAogICAgIGJvb2wg
aXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlvbmFyeUtpbmQoKSAhPSBOb25lRGlj
dGlvbmFyeUtpbmQ7IH0KQEAgLTIyOSw4ICsyMzQsOCBAQCBwdWJsaWM6CiAgICAgVHlwZUluZm8g
dHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5m
bygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9mTGluZVR5cGVGbGFncyk7IH0KICAg
ICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlwZUluZm8oKS5pc09iamVjdCgpOyB9
CiAKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9i
LmluZGV4aW5nVHlwZSgpICYgQWxsQXJyYXlUeXBlczsgfQotICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5n
VHlwZSgpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgJiBBbGxBcnJheVR5cGVzOyB9
CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7
IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOyB9CiAgICAgICAg
IAogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKICAgICB7CkBA
IC00MzMsOSArNDM4LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KICAgICAgICAgCi0gICAgc3RhdGljIHB0
cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
LCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgcHJvcGVydHlUYWJs
ZVVuc2FmZU9mZnNldCgpCkBAIC01NzksNiArNTg0LDggQEAgcHVibGljOgogICAgIAogICAgIHN0
YXRpYyB2b2lkIGR1bXBDb250ZXh0SGVhZGVyKFByaW50U3RyZWFtJik7CiAgICAgCisgICAgQ29u
Y3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICAKICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAtNjMzLDEwICs2NDAsMTQgQEAgcHJpdmF0
ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYp
OwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBj
cmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCB1
bnNpZ25lZCBrZXlDb3VudCA9IDApOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRl
UHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWdu
ZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIFdy
aXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwpAQCAtNjk3LDcgKzcw
OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsK
ICAgICAgICAgCi0gICAgdm9pZCBwaW4oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHBp
bigpOwogICAgIHZvaWQgcGluRm9yQ2FjaGluZygpOwogICAgIAogICAgIGJvb2wgaXNSYXJlRGF0
YShKU0NlbGwqIGNlbGwpIGNvbnN0CkBAIC03MTAsNyArNzIxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Ry
dWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAg
ICAgICAKKwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURC
bG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJs
b2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNv
bnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQg
c3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBj
b25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1
cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRl
eGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkg
PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICB1LmZpZWxkcy50eXBlID0g
dHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBl
SW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0
ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29y
ZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBl
OyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkg
eyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRz
LmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUu
ZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVG
bGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlubGluZVR5cGVGbGFnczsgfQogICAgIApA
QCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5
cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5m
aWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgog
ICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0
cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAg
ICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAg
ICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdz
IGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkyLDYgKzI5MiwxMSBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNlCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7Cisg
ICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBpbmxpbmUgc2l6ZV90IG5leHRPdXRP
ZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSkKIHsKICAgICBpZiAo
IWN1cnJlbnRDYXBhY2l0eSkKQEAgLTMxMSw0ICszMTYsODAgQEAgaW5saW5lIHZvaWQgU3RydWN0
dXJlOjpzZXRPYmplY3RUb1N0cmluZwogICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoZXhlYywgdm0sIHRoaXMsIHZhbHVlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpOwogfQog
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIAorICAgIEFTU0VSVCghSlNDOjppc1ZhbGlk
T2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlzU3ltYm9s
KCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlv
bihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKworICAgIGlm
ICghcHJvcGVydHlUYWJsZSgpKQorICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2NrZXIsIHZt
KTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUoKS0+bmV4
dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICAKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFk
ZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQs
IFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKworICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKworICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQpOworICAgIHJldHVybiBu
ZXdPZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3Qg
RnVuYyYgZnVuYykKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGF1dG8gcmVwID0gcHJvcGVydHlO
YW1lLnVpZCgpOworCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgICAgIHJldHVybiBp
bnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlv
biA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChyZXApOworICAgIGlmICghcG9zaXRpb24uZmlyc3Qp
CisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CisKKyAgICBwcm9wZXJ0eVRhYmxlKCkt
PnJlbW92ZShwb3NpdGlvbik7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0
KG9mZnNldCk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwg
b2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OworICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRl
ZmVyR0MpOworICAgIAorICAgIHBpbigpOworICAgIAorICAgIHJldHVybiBhZGQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYg
ZnVuYykKK3sKKyAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisKKyAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CisKKyAgICBwaW4oKTsKKyAgICByZXR1cm4g
cmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVuYyk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIx
MCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tB
bGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CiAJCTBG
MkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAw
QTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0
RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAq
LzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJCMjU4Qzgw
MEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CkBAIC0zNzQsNiArMzc1LDcgQEAKIAogLyog
QmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMz
ODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGht
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERl
ZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUz
RiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk1Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBM
aXN0SGFzaFNldC5oICovLAogCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNw
cCAqLywKIAkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAorCQkJCTBG
MEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8sCiAJCQkJQThBNDcy
QzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYw
MEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQlBOEE0NzJDNjE1MUE4MjVB
MDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8sCkBAIC0xMzIzLDYgKzEzMjYsNyBAQAogCQkJ
CUE4QTQ3MzlCMTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0
b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUxQTgyNUIw
MDQxMjNGRiAvKiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBGQ0RERTFERDE2N0Y5
MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUQx
NTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzM5RjE1MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczQTExNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX0hF
QURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAgTG9jay5o
CisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAgIE1haW5U
aHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBMaXN0
RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2lu
ZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RG
Ojpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcgV1RG
Ojpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2VuZGlm
IC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIxIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAiRGF0YUxv
Zy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVh
bS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJlYWQ+
Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tCYXNl
Ojpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRo
aXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlr
ZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0g
ICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBt
X2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVW
YWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBp
bi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAg
ICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVj
aCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAg
ICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWll
bGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVl
ZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFu
ZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQg
Yml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAo
IShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ug
bm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0
aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVz
dWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmso
Jm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtSZXN1
bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+
KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFu
ZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAgICAg
ICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVs
ZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tl
biB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4g
QnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBi
ZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUg
Y2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7
CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBs
KFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBE
ZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2Nr
RmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVSX0lO
TElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykKLXsK
LSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2so
KSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVvbmUg
cGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9j
ayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNv
bWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAgZm9y
ICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xkQnl0
ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9ieXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVv
bmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUg
bG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxv
Y2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJh
cmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtl
ZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAg
ICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVl
ID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5w
YXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0
IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0
aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZh
aXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBs
b2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwotICAg
ICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
U2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9M
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xvY2tf
aAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0z
Nyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsKIAor
dHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3JpdGht
OworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVz
IDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29tcGV0
ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBp
cyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcg
YW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gc3Rk
OjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiBz
dHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElL
RUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8o
bV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgdHJ5
TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90IGN1
cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRC
eXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUs
IGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dHJ5
TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBzdGQ6
OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAv
LyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEgZmFp
ciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9i
eXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMg
d2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9j
a1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5s
b2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3coKTsK
ICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRlZXMg
dGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAgLTEw
MywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZvaWQg
dW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsK
LSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNsb3co
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFz
dEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsK
ICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAg
ICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAgICB9
CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHByb3Rl
Y3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwogICAg
IHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tGYWly
bHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0gICAg
ICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7Ci0g
ICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAgICAg
ICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVzdGlu
ZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxn
b3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRobV9o
CisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIHRoZSBh
bGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNzIExvY2tB
bGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsKKwor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFr
KG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBlPiYg
bG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykpKQorICAg
ICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHRy
eUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYg
aXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVW
YWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1
bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHVubG9j
a0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBlIG9s
ZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBp
ZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBv
bGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAg
ICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9j
aywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0IEF0
b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAgICBO
RVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8gVGhp
cyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtl
c1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7
CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5
dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2
ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNI
ZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQg
YW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJv
dW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNvdW50Kys7
CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJp
dCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAgICAgJiYg
IWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZh
bHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4g
U28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAgICAgUGFy
a2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQYXJraW5n
TG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQu
dG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5kZWQg
dG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAgICAgICAg
ICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBj
YWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBvcHBv
cnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3Ro
ZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3Ag
YXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSBhd29r
ZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVp
dGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAgICBGYWly
LAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCB1
bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQorICAg
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4g
dW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgICAg
Ly8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmlnaHQg
bm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUgaGVsZCBh
bmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxv
Y2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xkQnl0ZVZh
bHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAg
ICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAgICAgICAg
ICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlz
SGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWso
aXNIZWxkQml0LCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTb21lb25lIGlz
IHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sg
dG8gdGhhdCB0aHJlYWQKKyAgICAgICAgICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9j
ayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFy
Z2luZy4KKyAgICAgICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBh
cmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCisg
ICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KKyAgICAgICAgICAgIEFTU0VSVCgo
b2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAg
ICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAorICAgICAgICAgICAgICAgICZsb2NrLAor
ICAgICAgICAgICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4g
aW50cHRyX3QgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0
aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAor
ICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBz
ZXQgcmlnaHQgbm93LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKGxvY2subG9hZCgpICYg
bWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5l
c3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBs
b2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdh
aXRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9ja1R5cGUgb2xkVmFs
dWUgPSBsb2NrLmxvYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBlIG5ld1Zh
bHVlID0gb2xkVmFsdWUgJiB+bWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Zh
bHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBl
bnVtIFRva2VuIHsKKyAgICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAorICAgICAgICBEaXJlY3RI
YW5kb2ZmCisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6Okxv
Y2tBbGdvcml0aG07CisKKyNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2lu
Y2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9h
dD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRp
bWUpOwogfQogCitib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
JiB0aW1lKQoreworICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0
aW1lLndpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dX
aXRoU2FtZUNsb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM0LDggKzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlOwordXNpbmcgV1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlm
IC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294324</attachid>
            <date>2016-11-09 19:51:17 -0800</date>
            <delta_ts>2016-11-09 20:27:04 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>199712</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDAzLDYgKzMwMDQsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4NCw2ICs1Njg2LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE1LDYgKzc5MTgsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwNzYsNyArMTAwODAsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NDE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltJbmNyZW1lbnQ6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVh
cCYgbV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJn
ZUhlYXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpA
QCAtMjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkK
ICAgICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9y
eVNpemUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0
b3IoKnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8
U2xvdFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2Vf
dW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBt
X2NvZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2pp
dFN0dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAt
MjY2LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNp
ZiBVU0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgm
aGVhcEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgp
KQogICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVh
dGUoKSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2Vs
bCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAg
IG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6Ondp
bGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE2ICs0NzEsMTYxIEBAIHZvaWQgSGVhcDo6Y29t
cGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5z
dGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92
bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1l
KQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAg
VGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMi
KTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RW
aXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBi
ZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVn
aW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlm
IChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9m
aWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxv
Y2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUg
U2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAg
ICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQg
aXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3Jl
IHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sg
aXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5n
UHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29s
bGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigK
LSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNp
dG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5l
d1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAg
ICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3
VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RW
aXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3Vmlz
aXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5h
cHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpy
ZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFs
bGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWlu
RnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJs
ZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0
YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwot
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1
cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsK
KyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5p
dGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9m
TG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7
IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJdGVyIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rvbmlj
VGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9w
cGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVD
b252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2
ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAg
ICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAg
ICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAg
ICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdh
dGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2
aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBi
YXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAg
ICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2Nh
bkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVl
cykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAg
ICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUo
KSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RW
aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0t
PmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhj
ZXB0aW9uKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRo
aXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2Nr
cyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdl
IG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sK
LSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVl
ZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFs
UmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2
aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1
bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRv
cik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsg
cmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVw
ZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdy
YXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9o
YW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1f
aGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmls
ZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9G
SUxFUikKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZp
c2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29s
bGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1l
cmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZp
c2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0
U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBl
bnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8v
IHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQg
KmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25v
dyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0
byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNl
IHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8g
dGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhl
IGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAv
LyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRp
bmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nl
c3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAg
Ly8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0
YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAg
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAg
ICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3Vs
dCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7Cisg
ICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5v
dygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7
CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYy
LDcgKzYzOSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAog
dm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVh
ZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1f
Y29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU4OSw2ICs2NjUsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1h
cmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpG
dWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigp
OworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAg
ICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNw
YWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk2LDQyICs2NzMsMjIgQEAgdm9pZCBIZWFwOjpiZWdp
bk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJl
ZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1l
bWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6
OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVk
c1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAg
ICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0
aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3Iu
YXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMp
OwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQot
ICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29u
c2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lk
IEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFC
TEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3Rz
KCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAjZW5kaWYKIH0KIApAQCAtNzA0LDEyMiArNzYxLDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAo
YXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3Ip
Ci17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwg
bV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9u
KCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJv
bmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52
aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9
PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFu
ZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsK
LSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIq
IHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAg
QVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZv
aWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2pp
dFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0K
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIp
OwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAg
ICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBI
YW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5k
cmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1l
KQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewot
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOwor
ICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0
Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAg
ICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29r
ICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpA
QCAtODI3LDE5ICs3NzIsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlz
aXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRC
eXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxC
eXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0g
ICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJl
c2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90
VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VS
VChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2lu
ZygpOwpAQCAtOTc3LDE0ICs5MjUsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQo
Y29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVz
ZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQo
Y2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAg
Ly8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9m
IHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29u
Y3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0Lgot
ICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlz
IHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2Ft
ZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Ns
b3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwor
ICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8g
RHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3Qg
dGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5p
ZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVj
dCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0
IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8v
IHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAg
IC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBt
ZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5
IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1
cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVu
IHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBh
Z2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0
aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRl
OjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9p
ZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDgzLDI5ICsxMDM3LDE0IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAg
IGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAg
ICAgZGF0YUxvZygiWzxHQyBzdGFydD4gIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Cisg
ICAgICAgIGJlZm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBk
b3VibGUgZ2NTdGFydFRpbWU7CiAgICAgCi0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7
Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+
dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7
Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgewotICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2Uo
KS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwot
ICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAgIAotICAgIHZtKCktPnNoYWRvd0NoaWNr
ZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7Ci0gICAgCiAgICAgQVNTRVJU
KG1faXNTYWZlVG9Db2xsZWN0KTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsKICAgICAg
ICAgZGF0YUxvZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6ICIsIG1f
Y29sbGVjdGlvblNjb3BlLCAiXG4iKTsKQEAgLTExMjUsMTUgKzEwNjQsMTIgQEAgdm9pZCBIZWFw
Ojpjb2xsZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0
cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAot
ICAgIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwog
ICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsK
ICAgICAgICAgCiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+aGFz
T3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKICAgICAgICAgCi0g
ICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGlt
ZSk7CiAgICAgICAgIAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXIt
PmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBA
IC0xMTcwLDggKzExMDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQog
ICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9
IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11c
biIpOworICAgICAgICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgICAgIGRhdGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIg
bXMsIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgPEdDIGVu
ZD5dXG4iKTsKICAgICB9CiAgICAgCiAgICAgewpAQCAtMTE5MywxMCArMTEyOSwzOCBAQCB2b2lk
IEhlYXA6OnN0b3BUaGVXb3JsZCgpCiAgICAgc3RvcFRoZU11dGF0b3IoKTsKICAgICBzdXNwZW5k
Q29tcGlsZXJUaHJlYWRzKCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElz
U3RvcHBlZCA9IHRydWU7CisKKyAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKKyAgICAg
ICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAgICB2bSgpLT50eXBlUHJv
ZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKKyAgICB9
CisgICAgCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUg
YXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21w
bGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVw
ZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFy
cmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwor
ICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1l
ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQo
KQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGlu
ZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxl
Y3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBj
b2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0
J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0
aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rp
b24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2Jq
ZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxl
clRocmVhZHMoKTsKQEAgLTE0NjYsMTAgKzE0MzAsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJl
YWRTdG9wcGluZyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxw
aW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21w
aWxlZENvZGUoKTsKLSAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVw
TGFyZ2VBbGxvY2F0aW9ucygpOworICAgIHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGlu
Z0dDU2NvcGUoKnRoaXMpOworICAgICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwor
ICAgICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdl
QWxsb2NhdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250
aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7CiB9CiAKIEhlYXA6OlRpY2tldCBI
ZWFwOjpyZXF1ZXN0Q29sbGVjdGlvbihPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQpA
QCAtMTU0OSwyMyArMTUxOCw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRp
b25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lk
IEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURU
YWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3Bl
OjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgpOwot
fQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNlLnN0
b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwog
fQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5NDksNyArMTkwNCw3IEBA
IGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAo
IW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxl
Y3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dD
KQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk3MSwxMiArMTky
Niw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJl
R0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9
CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0
ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXpl
X3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0
cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAg
IGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3Rh
dGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3Qq
IGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAt
MTk4NywxMiArMTkzOCw4IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENl
bGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0
ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lk
IEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAv
LyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQg
d2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9u
U2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRl
OjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9l
eHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0yMDg2LDQgKzIwMzMsMTEg
QEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8v
IFVTRShDRikKIAordm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1f
aXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAt
MzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRv
clN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRl
ci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkg
QEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVl
OwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBj
bGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3Rv
cElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1Ymxp
YzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNl
OyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNo
aW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JT
bG90VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0
YWNrOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxB
Y3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6
ZXIpOwogICAgIHZvaWQgYWRkRXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9p
ZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQor
ICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxl
Y3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2
LDExIEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxs
aW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0
aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9s
ZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAg
Ly8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0
IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChz
aXplX3QpOwogICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVy
bmFsTWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAKQEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAg
IAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3Vt
ZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZv
aWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDIyLDMwICs0MjgsMTggQEAgcHJpdmF0
ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdp
bGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKICAgICB2b2lkIHByZXBhcmVGb3JN
YXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBtYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKTsK
KyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBn
YXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJKU1N0
YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZm
ZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0g
ICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgIHZvaWQgdmlzaXRTbWFs
bFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7
CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKLSAgICB2b2lk
IHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0
QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRFeGNlcHRp
b24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJv
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYp
OwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFNoYWRv
d0NoaWNrZW4oKTsKLSAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygp
OwotICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lk
IG1hcmtUb0ZpeHBvaW50KEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0
Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CiAKQEAg
LTUxNyw3ICs1MTEsOCBAQCBwcml2YXRlOgogCiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5l
VGhyZWFkczsKICAgICAKLSAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKIAogICAgIC8v
IFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVh
ZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVt
LCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9m
IG1lbW9yeSBmcm9tCkBAIC01NzEsNyArNTY2LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9t
YXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwot
ICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAgICAg
dW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1bnNp
Z25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkBAIC01OTksNiArNTk1LDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAx
dSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9u
IHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJvb2wg
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAg
TW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENvbGxl
Y3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7
IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2
aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJh
eTo6TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2Zl
clRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9
ICZvdGhlcik7CisgICAgCisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0
aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFk
ID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlND
ZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1f
bnVtYmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAg
IAorICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOworICAgIAorICAgIG90
aGVyLm1fbnVtYmVyT2ZTZWdtZW50cyArPSBtX251bWJlck9mU2VnbWVudHM7CisgICAgbV9udW1i
ZXJPZlNlZ21lbnRzID0gMDsKKyAgICAKKyAgICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJh
Y2sgaW4gdGhlaXIgcGxhY2VzLgorICAgIG1fc2VnbWVudHMucHVzaChteUhlYWQpOworICAgIG90
aGVyLm1fc2VnbWVudHMucHVzaChvdGhlckhlYWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cysr
OworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIAorICAgIHdoaWxlICghaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFz
dCgpKQorICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQorfQor
CiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYg
b3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMu
IFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xhc3Mg
TWFya1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NTZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtTdGFj
a0FycmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBv
dGhlcik7Ci0gICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVy
LCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKKyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7Cisg
ICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRo
cmVhZENvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZUluKE1hcmtlZAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJU
KCFibG9jay0+aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwogICAgIAogICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDg0MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDEyICs4MiwxNCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5k
bGUmCiAgICAgLCBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAo
ZmFsc2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxu
Iik7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
Y3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+
Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5
QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1h
cmtzTW9kZSBtYXJrc01vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZWVwKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBE
b2VzTm90TmVlZERlc3RydWN0aW9uICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMg
JiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOwogICAgIAogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIApAQCAtOTksNyArMTAxLDcgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgIGlmIChPcHRpb25zOjp1c2VCdW1w
QWxsb2NhdG9yKCkKICAgICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkKICAgICAgICAgJiYg
bmV3bHlBbGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1hcmtzTW9kZSA9PSBNYXJrc1N0YWxlKTsKKyAgICAgICAgQVNTRVJUKG1hcmtz
TW9kZSA9PSBNYXJrc1N0YWxlIHx8IGJsb2NrLm1fbWFya3MuaXNFbXB0eSgpKTsKICAgICAgICAg
CiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxs
QWxpZ24oYmxvY2suYXRvbXMoKSArIG1fZW5kQXRvbSAtIDEpKTsKICAgICAgICAgY2hhciogcGF5
bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplKCk7CkBAIC0xMTEsNiArMTEzLDgg
QEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAg
c2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYWxsb2NhdG9y
LT5zZXRJc0VtcHR5KHRoaXMsIHRydWUpOworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5n
KCkpCisgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2Fk
QmVnaW4pOwogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5
IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2Vs
bFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwg
IlxuIik7CkBAIC0xMjMsMTcgKzEyNywxMSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwogICAgIHNpemVfdCBjb3VudCA9
IDA7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAgaWYg
KGVtcHR5TW9kZSA9PSBOb3RFbXB0eQotICAgICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFy
a3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgICAgICB8fCAo
bmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0
ZWQuZ2V0KGkpKSkpIHsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAorICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRD
ZWxsczsKKyAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2Nr
LmF0b21zKClbaV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gTmVlZHNEZXN0
cnVjdGlvbiAmJiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCisgICAgICAgIGlmIChkZXN0cnVjdGlv
bk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpLT5jYWxsRGVzdHJ1Y3Rvcigq
dm0oKSk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKQEAg
LTE0NCwxMiArMTQyLDMzIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxp
emUKICAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291bnQ7CiAg
ICAgICAgIH0KKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICBpZiAoZW1wdHlNb2RlID09
IE5vdEVtcHR5CisgICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYm
IGJsb2NrLm1fbWFya3MuZ2V0KGkpKQorICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkg
eworICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tI
YXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZykKKyAgICAgICAgICAgIGRlYWRDZWxs
cy5hcHBlbmQoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkp
OwogICAgIH0KLQorICAgIAogICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBuZXds
eUFsbG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCiAgICAgLy8gb3Ro
ZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2
ZS4KICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCiAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uID0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uOworICAgIAorICAgIGlmIChzcGFjZSgpLT5p
c01hcmtpbmcoKSkKKyAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgIAorICAgIGlm
IChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVu
bmluZykgeworICAgICAgICBmb3IgKHNpemVfdCBpIDogZGVhZENlbGxzKQorICAgICAgICAgICAg
aGFuZGxlRGVhZENlbGwoaSk7CisgICAgfQogCiAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxp
c3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTE3NywxMiArMTk2LDE4IEBAIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5p
c0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlv
biA9PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RT
Y3JpYmJsZU1vZGU8TmVlZHNEZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKLSAgICByZXR1cm4gc3dl
ZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8RG9lc05vdE5lZWREZXN0cnVjdGlvbj4oc3dlZXBN
b2RlKTsKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrKCkubV9s
b2NrLmxvY2soKTsKKyAgICAKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAg
ICAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVz
dHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmc+KHN3ZWVwTW9kZSk7CisgICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzPihzd2Vl
cE1vZGUpOworICAgIH0KKyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8
QmxvY2tIYXNOb0Rlc3RydWN0b3JzPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6
U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgogRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKIHsKICAgICBpZiAoc2NyaWJibGVGcmVlQ2VsbHMoKSkKQEAgLTE5MCw3ICsyMTUsNyBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3
ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFNjcmliYmxlPihz
d2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgordGVtcGxh
dGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25N
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgogRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGUoU3dl
ZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICAvLyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBp
cyB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB0aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9u
bHkKQEAgLTIwNSw3ICsyMzAsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2Vl
cEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQ8Tm90
RW1wdHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlPihzd2VlcE1vZGUpOwogfQogCi10
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1v
ZGUgc2NyaWJibGVNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2Rl
IGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVN
b2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RIYXNO
ZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChoYXNBbnlOZXds
eUFsbG9jYXRlZCgpKQpAQCAtMjEzLDcgKzIzOCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGU8
ZW1wdHlNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZD4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRs
ZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCiB7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0yMjEs
MTAgKzI0NiwxNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAg
ICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlPGVtcHR5TW9kZSwgU3dlZXBPbmx5
LCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlPigpOwog
fQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUg
ZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJi
bGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxv
Y2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5
TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKQogewotICAgIGlm
IChhcmVNYXJrc1N0YWxlKCkpCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSBzcGFj
ZSgpLT5tYXJraW5nVmVyc2lvbigpOworICAgIGJvb2wgbWFya3NBcmVVc2VmdWwgPSAhYmxvY2so
KS5hcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+
aXNNYXJraW5nKCkpCisgICAgICAgIG1hcmtzQXJlVXNlZnVsIHw9IGJsb2NrKCkubWFya3NDb252
ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmICgh
bWFya3NBcmVVc2VmdWwpCiAgICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBNYXJrc1N0YWxlPigpOwogICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5
TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxv
Y2F0ZWRNb2RlLCBNYXJrc05vdFN0YWxlPigpOwogfQpAQCAtMjQxLDI0ICsyNzIsNiBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQg
PSB0cnVlOwogfQogCi1jbGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1
bmN0b3IoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9j
aykKLSAgICB7Ci0gICAgfQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENl
bGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1h
cmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAg
IG1fYmxvY2stPnNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6
OkhhbmRsZSogbV9ibG9jazsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFs
bG9jYXRpbmcoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAg
LTI2NiwxMiArMjc5LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRp
bmcKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBp
ZiAoIWlzRnJlZUxpc3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9y
IGFsbG9jYXRpb24gc2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxy
ZWFkeSBkb25lIHN0b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxp
c3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAor
ICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwg
IlxuIik7CisgICAgCiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhl
YXAgaW50cm9zcGVjdGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIg
ZnJlZSBsaXN0IGFyZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAg
ICAgLy8gd2F5IHRvIHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI5Nywx
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXds
eUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVh
cCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rv
cik7CisgICAgZm9yRWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxv
Y2F0ZWQoY2VsbCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKKyAgICAgICAgfSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0
LAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwp
LCAiXG4iKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVl
ZHNEZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAg
IGNsZWFyTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMzMCwxNCBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAg
ZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVB
bGxvY2F0aW5nIVxuIik7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhp
cykpOwogICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXds
eUFsbG9jYXRlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1l
YW5zIHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFs
bG9jYXRpb24uCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICsz
ODEsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAg
ICAgaWYgKGhhbmRsZSgpLmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAg
ICAgIHx8ICFtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikp
IHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBDbGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsK
ICAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlz
IGFscmVhZHkgcmVjb2duaXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9j
ayBkaWQgbm90IHN1cnZpdmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsg
Yml0cyB0aGUgb2xkIGZhc2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBv
c3NpYmxlIGZvciBzdWNoIGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVw
LXRvLQpAQCAtMzYyLDYgKzM5MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xv
dyhIZWFwVmUKICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAg
ICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQor
ICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4i
KTsKICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8v
IE1lcmdlIHRoZSBjb250ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2Ug
Z2V0IHRoZSBmdWxsIHNldCBvZiBiaXRzCkBAIC00MjksNyArNDYwLDcgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCFcbiIpOwog
ICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSBmYWxzZTsK
LSAgICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CisgICAgYWxsb2Nh
dG9yKCktPmF0b21pY1NldEFuZENoZWNrSXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CiB9CiAKIHNp
emVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDMwICsxOTAs
MzIgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgdm9pZCop
OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlPgorICAgICAgICBl
bnVtIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHsgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBCbG9ja0hh
c0Rlc3RydWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nIH07
CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZT4KICAgICAg
ICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlID0gU3dl
ZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAgICBlbnVtIFNjcmliYmxlTW9kZSB7IERvbnRT
Y3JpYmJsZSwgU2NyaWJibGUgfTsKICAgICAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0
cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxl
Y3RFbXB0eU1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAg
ICBlbnVtIEVtcHR5TW9kZSB7IElzRW1wdHksIE5vdEVtcHR5IH07CiAgICAgICAgIAotICAgICAg
ICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAg
ICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1v
ZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQo
U3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTmV3bHlBbGxv
Y2F0ZWRNb2RlIHsgSGFzTmV3bHlBbGxvY2F0ZWQsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQg
fTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2Rl
LCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1w
dHlNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRl
ZE1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVw
TW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVk
TW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJl
ZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGVu
dW0gTWFya3NNb2RlIHsgTWFya3NTdGFsZSwgTWFya3NOb3RTdGFsZSB9OwogICAgICAgICAKLSAg
ICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KKyAgICAgICAgdGVtcGxh
dGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1v
ZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgogICAgICAgICBGcmVlTGlzdCBzcGVj
aWFsaXplZFN3ZWVwKCk7CiAgICAgICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3Bh
Y2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2Nh
dGluZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0
b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlv
blN0YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVX
b3JsZFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlND
ZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
KQotICAgIDogbV9zdGFjaygpCi0gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRl
c0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgw
KQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lv
bihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNp
dG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9y
KCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygpOworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7
CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1f
dmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAg
ICBBU1NFUlQoIW1fY3VycmVudENlbGwpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRD
ZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90
VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAg
bV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9
CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0
aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlND
ZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAg
ICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVu
ZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNh
dGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBj
b25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBj
eWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmpl
Y3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3Qu
Ci0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+
c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3Rh
Y2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0g
ICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxs
LT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5j
ZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3Rl
TWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2Ug
dGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1
dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdD
LgogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5j
ZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVj
dG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011
dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNr
LmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTYsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVu
dENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxs
LT5jZWxsU3RhdGUoKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgZGF0YUxvZygiVmlzaXRp
bmcgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIGlmIChtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgICAgICBkYXRhTG9nKCIgKG11dGF0b3IpIik7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgfQogICAgIAotICAgIC8vIFRoZXJlIGlzIG5vIHJhY2UgaGVyZSAtIHRo
ZSBjZWxsIHN0YXRlIGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LiBHcmV5IG9iamVjdHMgY2FuIG9u
bHkgYmUKLSAgICAvLyB2aXNpdGVkIGJ5IG9uZSBtYXJraW5nIHRocmVhZC4gTmVpdGhlciB0aGUg
YmFycmllciBub3IgbWFya2luZyB3aWxsIGNoYW5nZSB0aGUgc3RhdGUgb2YgYW4KLSAgICAvLyBv
YmplY3QgdGhhdCBpcyBhbHJlYWR5IGdyZXkuCi0gICAgQVNTRVJUKG1fb2xkQ2VsbFN0YXRlID09
IENlbGxTdGF0ZTo6T2xkR3JleSB8fCBtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dy
ZXkpOworICAgIC8vIEZ1bm55IHN0b3J5OiBpdCdzIHBvc3NpYmxlIGZvciB0aGUgb2JqZWN0IHRv
IGJlIGJsYWNrIGFscmVhZHksIGlmIHdlIGJhcnJpZXIgdGhlIG9iamVjdCBhdAorICAgIC8vIGFi
b3V0IHRoZSBzYW1lIHRpbWUgdGhhdCBpdCdzIG1hcmtlZC4gVGhhdCdzIGZpbmUuIEl0J3MgYSBn
bmFybHkgYW5kIHN1cGVyLXJhcmUgcmFjZS4gSXQncworICAgIC8vIG5vdCBjbGVhciB0byBtZSB0
aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0byBiYWlsIGhlcmUgaWYgdGhl
IG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8gYmxhY2suCiAgICAgCiAgICAgY2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwogICAgIApAQCAtMzI2LDIzICsz
MzMsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIH0K
ICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkgewotICAgICAg
ICBpZiAobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KQorICAgICAgICBpZiAo
IW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKICAgICAgICAgICAgIG1faGVhcFNuYXBzaG90QnVp
bGRlci0+YXBwZW5kTm9kZShjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKICAgICB9CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQordm9pZCBTbG90VmlzaXRv
cjo6ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJy
YXkmIHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4g
YWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRp
bmcgaXMgbm90IHByb2ZpdGFibGUuCiAKICAgICAvLyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJl
YWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgaWYgKG1fc3Rh
Y2suc2l6ZSgpIDwgMikKKyAgICBpZiAoZnJvbS5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFyZWQgd29yayBxdWV1ZWQgdXAs
IGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhhdCBkb25hdGluZyBtb3JlIGlz
IG5vdCBwcm9maXRhYmxlLgotICAgIGlmIChtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgp
KQorICAgIGlmICh0by5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3Jl
IGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lIHRoYXQg
YW5vdGhlcgpAQCAtMzUyLDI2ICszNTksNDMgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25v
d25QYXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE90aGVyd2lzZSwgYXNzdW1l
IHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAgbV9zdGFj
ay5kb25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2spOworICAgIGZyb20u
ZG9uYXRlU29tZUNlbGxzVG8odG8pOwogCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCit2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sKKyAgICBkb25hdGVLbm93blBh
cmFsbGVsKG1fY29sbGVjdG9yU3RhY2ssICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2spOworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9tdXRhdG9yU3RhY2ssICptX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwog
ICAgCi0gICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBtX3N0YWNrLnJl
ZmlsbCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmlt
dW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fc3RhY2sucmVt
b3ZlTGFzdCgpKTsKKyAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAh
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAg
ICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2Nv
bGxlY3RvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0
YWNrID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlv
bnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX2NvbGxlY3RvclN0
YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlz
aXRDaGlsZHJlbihtX2NvbGxlY3RvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9tdXRhdG9y
U3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICAvLyBXZSBrbm93IGZvciBzdXJlIHRoYXQgd2Ug
YXJlIHZpc2l0aW5nIG9iamVjdHMgYmVjYXVzZSBvZiB0aGUgYmFycmllciwgbm90IGJlY2F1c2Ug
b2YKKyAgICAgICAgICAgIC8vIG1hcmtpbmcuIE1hcmtpbmcgd2lsbCB2aXNpdCBhbiBvYmplY3Qg
ZXhhY3RseSBvbmNlLiBUaGUgYmFycmllciB3aWxsIHZpc2l0IGl0CisgICAgICAgICAgICAvLyBw
b3NzaWJseSBtYW55IHRpbWVzLCBhbmQgYWx3YXlzIGFmdGVyIGl0IHdhcyBhbHJlYWR5IG1hcmtl
ZC4KKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNj
YW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYg
Y291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3Rh
Y2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfQogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVs
KCk7CiAgICAgfQogICAgIAogICAgIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJl
ZERyYWluTW9kZSkKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6
ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAK
QEAgLTM5Miw0OCArNDE2LDYwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChT
aGFyZWQKICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBp
cyByZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKICAgICAgICAgICAgICAgICAv
LyBmb3IgdXMgdG8gZG8uCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OworICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGlt
ZSBmb3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFj
ay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndp
c2Ugd2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91dCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2hhcmVk
RHJhaW5Nb2RlID09IFNsYXZlRHJhaW4pOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBz
ZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3Vs
dDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRGlkIHdl
IGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAg
ICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KAotICAgICAgICAgICAgICAgICAgICBs
b2NrLAorICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwoCisgICAgICAgICAgICAgICAgICAgIGxvY2ssIHRpbWVvdXQsCiAgICAgICAgICAg
ICAgICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVh
cC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFy
YWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8g
SWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgaWYgKG1f
aGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25l
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJv
bSgKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251
bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAg
ICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAgICB9CiB9CiAKQEAgLTQ1Myw3
ICs0ODksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiBib29s
IFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMu
aXNFbXB0eSgpKTsKICAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCk7CiB9CiAKQEAgLTQ2NywxMyArNTAyLDYgQEAgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRh
aW5zT3BhcXVlUm9vdAogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1pbnQgU2xvdFZp
c2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1v
ZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1f
aGVhcC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5
KCkpCkBAIC00OTcsMTUgKzUyNSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogICAg
IGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5k
RHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0
aW1lb3V0KQogewogICAgIGRvbmF0ZSgpOwotICAgIGRyYWluKCk7CisgICAgZHJhaW4odGltZW91
dCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogewotICAgIEFT
U0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQg
d2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KICAgICB7CiAgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwogICAgICAgICBm
b3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQpAQCAtNTI2LDEwICs1NTMsOSBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGCiAgICAgICAgIG1faGVhcC5tX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Cit2
b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9y
IChjb25zdCBKU0NlbGwqIGNlbGwgOiBtYXJrU3RhY2soKSkKLSAgICAgICAgZGF0YUxvZygqY2Vs
bCwgIlxuIik7CisgICAgb3V0LnByaW50KCJDb2xsZWN0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAo
Y29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0YXRvcjogWyIsIHBvaW50ZXJMaXN0RHVtcCht
dXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA4NDE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgorI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Nyw5ICs1OCwxMSBA
QCBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoSGVhcCYpOwogICAgIH5TbG90VmlzaXRvcigpOwog
Ci0gICAgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KLSAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
azsgfQotCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFj
aygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkm
IGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0K
KyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgCiAgICAgVk0mIHZtKCk7CiAgICAgY29uc3QgVk0m
IHZtKCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwpAQCAtODQsMjQgKzg3LDIzIEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCop
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBj
b25zdDsKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29u
c3Q7Ci0gICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyBy
ZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBt
X2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0K
IAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwotICAgIHZv
aWQgY2xlYXJNYXJrU3RhY2soKTsKKyAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAg
c2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0g
ICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQog
ICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CiAK
ICAgICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQgZHJhaW4oKTsKLSAgICB2b2lkIGRvbmF0ZUFu
ZERyYWluKCk7CisgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRvbmF0ZUFuZERyYWluKE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIAogICAgIGVudW0g
U2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJhaW4gfTsKLSAgICB2b2lkIGRy
YWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOworICAgIGVudW0gY2xhc3MgU2hhcmVkRHJh
aW5SZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9OworICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWlu
RnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMo
KTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKQEAgLTEyNCw2
ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKKyAgICB2b2lkIG1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJh
bGxlbE1vZGVFbmFibGVyOwogICAgIApAQCAtMTQxLDIxICsxNDUsMjMgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogICAgIHZvaWQgYXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYsIEpTQ2VsbCopOwogICAgIAorICAgIHZvaWQgYXBwZW5kVG9N
dXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgbm90ZUxpdmVB
dXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKIAogICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKKyAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJy
YXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX3N0
YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNr
QXJyYXkgbV9tdXRhdG9yU3RhY2s7CiAgICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAv
LyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFn
ZSBjb2xsZWN0b3IuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVf
dCBtX2J5dGVzQ29waWVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgYm9vbCBtX2lz
SW5QYXJhbGxlbE1vZGU7CiAgICAgCkBAIC0xNjUsNyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAg
IEhlYXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNuYXBzaG90QnVpbGRlciB7IG51bGxwdHIgfTsK
ICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgQ2VsbFN0YXRlIG1f
b2xkQ2VsbFN0YXRlOworICAgIGJvb2wgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrIHsgZmFsc2Ug
fTsKIAogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMDg0MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTUgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6
OmFkZFVuY29uZGl0aW9uYQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011
dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiBpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhl
YXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsK
KyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA4
NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRTdG9yZVN0cnVjdHVyZQogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFIU3RydWN0dXJl
SURJc1ZhbGlkKTsKICAgICAgICAgY29ycmVjdFN0cnVjdHVyZS5saW5rKCZqaXQpOwogCi0gICAg
ICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgSnVtcCBj
b3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKSk7CiAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJbmRleGluZ1R5cGVJc1ZhbGlkKTsKICAgICAg
ICAgY29ycmVjdEluZGV4aW5nVHlwZS5saW5rKCZqaXQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw3ICs5OTYs
NyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgICAgIHN0
b3JlMzIoaW5kZXhpbmdUeXBlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0
dXJlSUQoKSk7CiAgICAgfQogCi0gICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKKyAgICBsb2FkOChBZGRyZXNzKGNlbGws
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKIH0K
IAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRl
eFdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjcsOCArMjI2Nyw4
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0
ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5KTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgcmVzdWx0KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVN
b3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjI3Nyw4ICsyMjc3LDggQEAgY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCi0gICAg
QnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmpl
Y3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKLSAgICBvYmpl
Y3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7
CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg0MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKEluc3RydWN0aQogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3Ry
dWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEw
MTUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAg
ICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVn
VDEpOwogICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSkpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgY2Fz
ZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAg
SlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxv
Y2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNj
b3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVj
dGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAg
ICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUo
KSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3
YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4
LDE0ICsxMDM3LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkK
ICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2lu
dFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4o
Km9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRT
ZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKQEAgLTExNTcsMTEgKzExNTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX2FyZ3VtZW50cyhJbnN0cgogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKLSAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50
cywgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAg
ICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAg
IGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
fQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtODg3LDcgKzg4Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShj
ZWxsQW5kSW5kZXhpbmdUeXBlLCAKICAgICBjb25zdCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5k
ZXhpbmdUeXBlIAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRj
aAogICAgIHN0b3JlaSBzY3JhdGNoLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJ
RFtwcm9maWxlXQotICAgIGxvYWRiIEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4
aW5nVHlwZQorICAgIGxvYWRiIEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBp
bmRleGluZ1R5cGUKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxs
LCBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJl
bnRKSVRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uY3VycmVudEpJVExvY2suaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQs
MTUgKzk0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ09OQ1VS
UkVOVF9KSVQpCiAgICAgRGVmZXJHQyBtX2RlZmVyR0M7Ci0jZWxzZQotICAgIHN0cnVjdCBOb0Rl
ZmVyIHsKLSAgICAgICAgTm9EZWZlcihIZWFwJiBoZWFwKSA6IG1faGVhcChoZWFwKSB7IH0KLSAg
ICAgICAgSGVhcCYgbV9oZWFwOwotICAgIH07Ci0gICAgTm9EZWZlciBtX2RlZmVyR0M7Ci0jZW5k
aWYKIH07CiAKIGNsYXNzIENvbmN1cnJlbnRKSVRMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpJ
VExvY2tlckJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5
cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9
IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBF
Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAw
eDAwOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAg
PSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgw
RTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAg
ICAgICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAg
ICAgICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgw
NDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAg
ICAgICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0
b3JhZ2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3
OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUg
dHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9y
IHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRl
eGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxk
IG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAv
LyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgy
LDYgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBv
ZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwg
TWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGlu
Z1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+
IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVy
cmVkIGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMg
dGhlIGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQg
d2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBKU0NlbGw6OkludGVybmFsTG9ja2Vy
IGxvY2tlcih0aGlzKTsKICAgICAKICAgICBpZiAobW92ZUZyb250ICYmIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID49IGNvdW50KSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3Rv
cmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAg
c3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoICsgY291bnQpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9IGVs
c2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAg
IGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKHZtLCBkZWZlckdDLCBtb3ZlRnJvbnQsIGNv
dW50KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0
aEFycmF5U3RvcmEKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQog
ICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5kZXhdLmNsZWFyKCk7CisgICAgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShy
ZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1Byb3h5KCkgY29uc3Q7CiAgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25z
dDsKICAgICBib29sIGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7CisgICAgCisgICAgLy8gRWFj
aCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2suIEN1cnJlbnRseSBpdCdzIHNpbXBseSBhdmFpbGFi
bGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4gSXQncworICAgIC8vIGEgZnVsbC1ibG93biBXVEY6
OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxvY2sgaXMgY3VycmVudGx5IHVzZWQgaW4gSlNBcnJheSBh
bmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRlcmluZyB3aXRoIHRoZSBTdHJ1Y3R1cmUgbG9jayBp
cyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LgorICAgIHZv
aWQgbG9ja0ludGVybmFsTG9jaygpOworICAgIHZvaWQgdW5sb2NrSW50ZXJuYWxMb2NrKCk7Cisg
ICAgCisgICAgY2xhc3MgSW50ZXJuYWxMb2NrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50
ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxsKQorICAgICAgICAgICAgOiBtX2NlbGwoY2VsbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9jZWxsLT5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIH5JbnRlcm5hbExvY2tlcigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDZWxsKiBtX2NlbGw7CisgICAgfTsKIAogICAgIEpT
VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2Mo
KSBjb25zdDsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Q7CiAgICAgU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUlEOyB9CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE2Nyw2ICsxOTEsMTYgQEAgcHVi
bGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0
ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7
IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRlID0gZGF0YTsgfQorICAgIAor
ICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0
YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4g
V1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0
YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0YXRlIGF0b21pY0NvbXBhcmVFeGNo
YW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9u
ZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpAQCAtMTgzLDkgKzIxNywxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUp
OwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAg
ICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIHVzZSBhIENBUyBsb29wLCBz
aW5jZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQgdXNpbmcgQ0FTCisgICAgLy8gZnJvbSBvdGhlciB0
aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwgbG9jay4gT25lIGV4Y2VwdGlvbjogeW91IGRvbid0
IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAgICAvLyBvYmplY3QgaGFzIG5vdCBlc2NhcGVkIHlldC4K
KyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlQW5k
TWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQpA
QCAtMjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci0gICAgSW5kZXhp
bmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZUFu
ZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgQ0FTLgogICAgIEpT
VHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAg
IENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9z
dHJ1Y3R1cmVJRChzdHJ1Y3R1cmUtPmlkKCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkpCiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8o
KS5pbmxpbmVUeXBlRmxhZ3MoKSkKICAgICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hp
dGUpCkBAIC03NCw3ICs3NCw3IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHYKICAgICBpZiAoc3RydWN0dXJlKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmVJ
RCA9IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAgICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgICAgICBtX2luZGV4aW5nVHlwZUFuZE1pc2MgPSBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKICAgICAgICAgbV90eXBlID0gc3Ry
dWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKICAgICAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
QEAgLTkxLDkgKzkxLDE0IEBAIGlubGluZSBKU1R5cGUgSlNDZWxsOjp0eXBlKCkgY29uc3QKICAg
ICByZXR1cm4gbV90eXBlOwogfQogCitpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlz
YzsKK30KKwogaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlOworICAgIHJldHVybiBpbmRleGluZ1R5cGVB
bmRNaXNjKCkgJiBBbGxBcnJheVR5cGVzOwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBKU0NlbGw6
OnN0cnVjdHVyZSgpIGNvbnN0CkBAIC0xOTUsMTcgKzIwMCwyNyBAQCBpbmxpbmUgYm9vbCBKU0Nl
bGw6OmlzQVBJVmFsdWVXcmFwcGVyKCkgCiAgICAgcmV0dXJuIG1fdHlwZSA9PSBBUElWYWx1ZVdy
YXBwZXJUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorQUxXQVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6c2V0U3Ry
dWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCkgPT0gdGhpcy0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpKTsKICAg
ICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpCiAgICAgICAgIHx8IHRoaXMtPnN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8
IEhlYXA6OmhlYXAodGhpcyktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlLT5pZCgp
KSA9PSBzdHJ1Y3R1cmUpOwotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVy
ZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3Ry
dWN0dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCk7CiAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsK
LSAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5k
ZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpOworICAgIGlmIChtX2luZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5kZXhp
bmdUeXBlKSB7CisgICAgICAgIEFTU0VSVCghKG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJheVR5
cGVzQW5kSGlzdG9yeSkpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmRleGlu
Z1R5cGUgb2xkVmFsdWUgPSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJbmRl
eGluZ1R5cGUgbmV3VmFsdWUgPSAob2xkVmFsdWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3Rvcnkp
IHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAgICAg
ICBpZiAoV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGluZ1R5
cGVBbmRNaXNjLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVy
ZSk7CiB9CiAKIGlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgp
IGNvbnN0CkBAIC0yODQsMTEgKzI5OSwyNiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0
cnVjdG9yKFZNJiB2CiAgICAgaWYgKGlzWmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBB
U1NFUlQoc3RydWN0dXJlSUQoKSk7Ci0gICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0
dXJlSXNJbW1vcnRhbCkKLSAgICAgICAgc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmRlc3Ryb3kodGhpcyk7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3Mo
KSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
byA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95
RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAg
ICAgICAgZGVzdHJveSh0aGlzKTsKKyAgICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0Kj4odGhpcyktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRo
aXMpOwogICAgIHphcCgpOwogfQogCitpbmxpbmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5hbExv
Y2soKQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0
b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhp
bmdUeXBlTG9ja0FsZ29yaXRobTo6bG9jaygqbG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpTQ2Vs
bDo6dW5sb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9j
ayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFu
ZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzExMiwy
OCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAgICAg
Ly8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihi
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsK
LSAgICAKLSAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0Y2gg
KHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CisKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAgY2Fz
ZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1
YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fc3BhcnNlTWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdF
X0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHByb3Rl
Y3QgQ29udGlndW91cy0+QXJyYXlTdG9yYWdlIHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQgbWFr
ZSB0aGF0CisgICAgICAgIC8vIHJhY2Ugd29yayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAgIEpT
Q2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgICAgICBJbmRleGluZ1R5cGUg
bmV3VHlwZSA9IHRoaXMtPmluZGV4aW5nVHlwZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0aGlz
LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgc3dpdGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNhc2Ug
QUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+
cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8v
IEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYg
KGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQgQEAg
dm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2Vs
bDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRl
cmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVy
Zmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBXZSB3
YW50IHRvIGRlZmVuZCBhZ2FpbnN0IG11bHRpcGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhlIG11
dGF0b3I6CisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVyZmx5
IGFuZCB0aGVuIGluc3RhbGwgYSBzdHJ1Y3R1cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8vICAg
cHJvcGVydGllcy4gVGhpcyB0cml2aWFsbHkgd29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNvdWxk
IG11dGF0ZSB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBzdHJ1
Y3R1cmUgbG9jayBmb3IKKyAgICAvLyAgIGRpY3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAvLyAt
IFRoZSBidXR0ZXJmbHkgY291bGQgc2hyaW5rLCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiBp
ZiB0aGUgb2JqZWN0IHdhcyBhIGRpY3Rpb25hcnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlzIG1l
YW5zIHRoYXQgd2Ugd291bGQgZ2V0IHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNxdWly
ZSBhIGxvY2suIFRoYXQKKyAgICAvLyAgIHRyaXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxkIGxv
YWQgdGhlIHN0cnVjdHVyZSBiZWZvcmUgdGhlIG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5Cisg
ICAgLy8gICBhbmQgdGhlbiBsb2FkIHRoZSBidXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBXZSBw
cm90ZWN0IGFnYWluc3QgdGhpcyBjYXNlIGJ5IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3RydWN0
dXJlIGEgc2Vjb25kIHRpbWUgYmVmb3JlIHNjYW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMgbWVh
bnMgdGhhdCB0aGUgYnV0dGVyZmx5CisgICAgLy8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVyZmx5
IHRoYXQgdGhlIG11dGF0b3IgaGFkIGluc3RhbGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5nIHRo
ZQorICAgIC8vICAgc3R1cmN0dXJlLiBTbyBpZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBhIG5v
bi1kaWN0aW9uYXJ5IHRoZW4gdGhlIGJ1dHRlcmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBoYXZl
IGJlZW4gc2hydW5rLgorICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0
aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFy
eSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOworICAgICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1Y3R1
cmUtPmlkKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9y
LCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQor
ICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwxNSAr
MjM5LDI1IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAK
ICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkp
OwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0g
ICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlz
aXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBp
ZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAg
IGVsc2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVjdC0+
c3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZp
c2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFn
ZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3Jh
Z2UoKSwgc3RvcmFnZVNpemUpOwotCisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0
cnVjdHVyZS0+bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAg
ICAgCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03MzEs
NyArNzc3LDkgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlVW5kZWNpZGVkKTsKLSAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0
dXJuIG5ld0J1dHRlcmZseTsKIH0KIApAQCAtNzQyLDcgKzc5MCw5IEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIp
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAtNzUzLDcg
KzgwMyw5IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWEKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSk7
Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRl
cmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtNzY0LDcg
KzgxNiw5IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVy
ZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
KCk7CiB9CiAKQEAgLTc5Nyw3ICs4NTEsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVh
dGVBcnJheVN0b3JhCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0
b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMsIHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgs
IG1fYnV0dGVyZmx5LmdldCgpKTsKICAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAg
LTg4MCw3ICs5MzYsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVk
CiAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0
dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5
KHZtLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBzdG9yYWdlOwogfQogCkBAIC05MzUsNyArOTkzLDkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJl
dHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC05ODEsNyArMTA0MSw5IEBAIEFycmF5U3RvcmFnZSog
SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBu
ZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkp
OworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3Rv
cmFnZTsKIH0KIApAQCAtMTAwNiw3ICsxMDY4LDIyIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRDb250aWd1b3UKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
dHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKworICAgIC8vIFRoaXMgaGFzIGEgY3Jhenkg
cmFjZSB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gV2hlbiBjaGFuZ2luZyB0aGUgYnV0dGVy
Zmx5IGFuZCBzdHJ1Y3R1cmUsCisgICAgLy8gdGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0
cnVjdHVyZSBsYXN0LiBUaGUgY29sbGVjdG9yIHdpbGwgYWx3YXlzIHJlYWQgdGhlIHN0cnVjdHVy
ZQorICAgIC8vIGZpcnN0LiBXZSBwcm9iYWJseSBoYXZlIHRvIGZvbGxvdyB0aGF0IGNvbnZlbnRp
b24gaGVyZSBhcyB3ZWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvcgorICAgIC8vIHdp
bGwgc29tZXRpbWVzIHNlZSB0aGUgbmV3IGJ1dHRlcmZseSAodGhlIG9uZSB3aXRoIEFycmF5U3Rv
cmFnZSkgd2l0aCB0aGUgb25seSBzdHJ1Y3R1cmUgKHRoZQorICAgIC8vIG9uZSB0aGF0IHNheXMg
dGhhdCB0aGUgYnV0dGVyZmx5IGlzIENvbnRpZ3VvdXMpLiBXaGVuIHNjYW5uaW5nIENvbnRpZ3Vv
dXMsIHRoZSBjb2xsZWN0b3Igd2lsbAorICAgIC8vIG1hcmsgd29yZCBhdCBhZGRyZXNzZXMgZ3Jl
YXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBidXR0ZXJmbHkgcG9pbnRlciwgdXAgdG8gdGhlIHB1
YmxpY0xlbmd0aAorICAgIC8vIGluIHRoZSBidXR0ZXJmbHkuIEJ1dCBhbiBBcnJheVN0b3JhZ2Ug
aGFzIHNvbWUgbm9uLXBvaW50ZXIgaGVhZGVyIGRhdGEgYXQgbG93IHBvc2l0aXZlCisgICAgLy8g
b2Zmc2V0cyBmcm9tIHRoZSBidXR0ZXJmbHkgLSBzbyB3aGVuIHRoaXMgcmFjZSBoYXBwZW5zLCB0
aGUgY29sbGVjdG9yIHdpbGwgc3VyZWx5IGNyYXNoCisgICAgLy8gYmVjYXVzZSBpdCB3aWxsIGZh
aWwgdG8gZGVjb2RlIHR3byBjb25zZWN1dGl2ZSBpbnQzMnMgYXMgaWYgaXQgd2FzIGEgSlNWYWx1
ZS4KKyAgICAvLworICAgIC8vIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRoZSBKU0NlbGwgbG9jayBm
b3IgdGhpcyBwdXJwb3NlIQorICAgIAorICAgIEludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsK
KyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRT
dHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAK
QEAgLTE0NjgsNyArMTU0NSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2Vs
bCogY2UKIAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhp
c09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOwogCkBAIC0yNzI1LDcg
KzI4MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsg
KytpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3Jb
aV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVj
dG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0yNzQyLDcgKzI4MjAsOCBAQCBib29s
IEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7
Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJm
bHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNzYyLDYgKzI4NDEsNyBA
QCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgCiAgICAgdW5z
aWduZWQgYXZhaWxhYmxlT2xkTGVuZ3RoID0KICAgICAgICAgQnV0dGVyZmx5OjphdmFpbGFibGVD
b250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7
CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBudWxscHRyOwogICAgIGlmIChhdmFpbGFi
bGVPbGRMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hl
cmUgc29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNhdXNlZCBpbnRl
cm5hbAogICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpvYnMgcmlnaHQs
IHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNzCkBAIC0yNzc2
LDE3ICsyODU2LDI0IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAK
ICAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwog
ICAgICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgfQogCi0gICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5n
dGgobmV3VmVjdG9yTGVuZ3RoKTsKLQogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkp
KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1Zl
Y3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KClbaV0gPSBQTmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8ZG91
YmxlPigpW2ldID0gUE5hTjsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBidXR0ZXJm
bHktPmluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KClbaV0uY2xlYXIoKTsK
KyAgICB9CisKKyAgICBpZiAobmV3QnV0dGVyZmx5KSB7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0
VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBi
dXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwpAQCAtMjgwMiwxMiArMjg4OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFs
bG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJy
YXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3Ro
KSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5l
d0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5z
ZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5
KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwg
c2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxp
bmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAg
IEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKQEAgLTMwOTIsMTUgKzMxODAsMzMgQEAgdm9p
ZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdgogICAgICAgICB2bSwgU3RydWN0
dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAm
ZGVmZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlbmluZyhWTSYgdm0sIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9y
ZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1
dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwg
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVm
b3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IHRo
aXMtPmJ1dHRlcmZseVByZUNhcGFjaXR5KCk7Ci0gICAgdm9pZCogY3VycmVudEJhc2UgPSBidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwotICAgIHZv
aWQqIG5ld0Jhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFj
aXR5QmVmb3JlKTsKKyAgICAvLyBUaGlzIGNvdWxkIGludGVybGVhdmUgdmlzaXRDaGlsZHJlbiBi
ZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZlIGJlZW4gYSBub24KKyAgICAvLyBk
aWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBCdXQsIHdl
IGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKKyAgICAvLyB0aGUgc3RydWN0dXJlJ3MgbG9j
ayByaWdodCBub3csIGFuZCB0aGF0IGhlbHBzIGEgYml0LgorICAgIAorICAgIEJ1dHRlcmZseSog
b2xkQnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5
OworICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKKyAgICBpZiAoVU5MSUtF
TFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gb2xkQnV0dGVy
Zmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIo
KS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzID0gMDsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZs
eTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgdGhpcywgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7CiAKLSAgICBtZW1tb3ZlKG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCB0aGlzLT5idXR0ZXJmbHlU
b3RhbFNpemUoKSk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZt
LCBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0Jhc2UsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBh
Y2l0eUFmdGVyKSk7CisgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJhc2Uo
cHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQqIG5ld0Jhc2Ug
PSBuZXdCdXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QmVmb3Jl
KTsKKworICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNp
emUocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50
MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAg
ICBib29sIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVy
dGllcyhFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jv
d091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwot
ICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVy
Zmx5Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRP
ZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAg
ICAgCisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNo
YW5nZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZv
aWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5
QWZ0ZXJGbGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXpl
X3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVy
RmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KCkgY29uc3QKICAgICB7CkBAIC0xMjA1LDE0ICsxMjA0LDYgQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OmlzV2l0aFNjb3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlw
ZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLXsKLSAg
ICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0
aGlzKSkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKLSAgICBz
ZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQo
c3RydWN0dXJlKTsKQEAgLTEyMjAsNyArMTIxMSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmUoVk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTEyODIsNyArMTI3
Myw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW4KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGdldE93blN0YXRpY1Byb3BlcnR5U2xv
dCh2bSwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBnZXRQcm9w
ZXJ0eVNsb3QgcmVsaWVzIG9uIHRoaXMgbWV0aG9kIG5ldmVyIHJldHVybmluZyBpbmRleCBwcm9w
ZXJ0aWVzIQogICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIApAQCAtMTQx
NywxNiArMTQwOCwyMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNp
YmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZs
eSgpOwotICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3Jh
Z2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1
Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAg
ICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAorICAgICAg
ICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgewor
ICAgICAgICAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0
T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7CisgICAgICAgICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAg
ICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAg
ICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAgICB9KTsK
IAotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQodGhpcy0+
c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHB1dERpcmVjdCh2
bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zm
c2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRo
aXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAtMTQ0
NSwxMyArMTQ0MCwxNSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAg
IGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBj
dXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBj
dXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAg
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5
KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQo
b2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Cisg
ICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICAgICAgc2xvdC5zZXRO
ZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC0xNDk4LDEzICsxNDk1LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW4KICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCk7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwogICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7Ci0gICAg
aWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IG5ld1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7
Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdC
dXR0ZXJmbHkpOworICAgIGlmIChvbGRDYXBhY2l0eSAhPSBuZXdDYXBhY2l0eSkgeworICAgICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uo
dm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9CiAg
ICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAg
IGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29u
dGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE1NTYsMTUgKzE1NTMsMTkgQEAgaW5saW5l
IHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEFTU0VSVCghdmFsdWUuaXND
dXN0b21HZXR0ZXJTZXR0ZXIoKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2
bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0
ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9
IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFj
aXR5KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlmIChhdHRyaWJ1
dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVBy
b3BlcnRpZXMoKTsKLSAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0gICAgc3RydWN0
dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZE9wdGltaXplKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUp
OworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAg
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+
c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxk
T3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7
CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0
dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZz
ZXQsIHZhbHVlKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIFJl
Z2lzdGVyOjpvYmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMjA4NDE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVT
dGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlv
bmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVu
dEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1
cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENv
bnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VG
ZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3Jp
YmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBz
aXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3Qg
U3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0LgogY2xh
c3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0
NSw2IEBACiAKICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNpZm5k
ZWYgTkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxz
ZQotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSArMTU3
LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUo
KSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5VGFibGVPck51bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBz
OwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZSgpLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBz
U2l6ZSArPSB0YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMw
Niw3ICszMDAsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAg
ICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKICAg
ICAgICAgCi0gICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7
CisgICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAgICAg
ICAgIGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2Nr
ZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAg
ICAgICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zMjEs
MzAgKzMxNSwyOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAg
ICAgQVNTRVJUKCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwKFZNJiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3BlcnR5
VGFibGUoKSk7Ci0KKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKICAg
ICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVz
LCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KTsKICAgICBp
ZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVtYmVyT2ZTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFi
bGUgPSB0YWJsZS0+Y29weSh2bSwgY2FwYWNpdHkpOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9j
ay51bmxvY2soKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRhYmxlID0gUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBob2xkIHRoZSBs
b2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWluZyB0aGlzIHN0
cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdldENvbmN1cnJl
bnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAogICAgIC8vIHN0
YXRlLgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7Ci0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2
bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkp
KTsKLSAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxl
KTsKKyAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKKyAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlU
YWJsZSh2bSwgdGFibGUpOwogCiAgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1f
aW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CiAKQEAgLTM1NSwxMCArMzQ4LDExIEBAIHZvaWQgU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgUHJvcGVydHlNYXBFbnRy
eSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9v
ZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIGlmICh0
eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdl
dCgpKSkKICAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7Ci0gICAgICAg
IHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgdGFibGUtPmFkZChlbnRyeSwgbV9v
ZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAg
fQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gdGFibGU7
CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKQEAgLTQ3
Myw3ICs0NjcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuCiAg
ICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CiAgICAg
dHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0
cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFu
c2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRh
a2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0
UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBp
bm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNl
dDsKICAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIApAQCAt
NTIxLDM2ICs1MTUsMzAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bgogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKKyAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KHZtLCB0
cmFuc2l0aW9uLCBwcm90b3R5cGUpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgIAorICAg
IHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7
Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIGlmICghc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2l0
aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7
CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAg
ICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0
cmFuc2l0aW9uOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUo
KSk7Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50
cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0pLT5nZXQocHJvcGVydHlOYW1l
LnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwogICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0
cmlidXRlczsKIApAQCAtNTYxLDE3ICs1NDksMTUgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewog
ICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9u
ID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAotICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0p
KTsKKyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVG
b3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1f
b2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwotICAgIHRy
YW5zaXRpb24tPnBpbigpOwogICAgIHRyYW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRy
dWUpOwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwog
ICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQpAQCAtNjAzLDMxICs1ODksMjkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1
cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAgaWYgKGlzUGlubmVkUHJvcGVy
dHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBwcm9w
ZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpOwotICAgIAotICAgIC8vIEhvbGQgdGhlIGxvY2sgd2hp
bGUgc3RlYWxpbmcgdGhlIHRhYmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBhbm90
aGVyIHRocmVhZAotICAgIC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3RydWN0
dXJlLCBvciB3aWxsIGdldCB0byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgLy8gYmVmb3Jl
IGl0IGlzIHN0b2xlbi4KLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwot
ICAgIFByb3BlcnR5VGFibGUqIHRha2VuUHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGUoKS5n
ZXQoKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gdGFrZW5Qcm9w
ZXJ0eVRhYmxlOworICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgcmV0dXJuIGEgcHJvcGVydHkgdGFi
bGUuIEl0IGNhbid0IHJldHVybiBudWxsLgorICAgIFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IHBy
b3BlcnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChpc1Bp
bm5lZFByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHkodm0s
IHJlc3VsdC0+c2l6ZSgpICsgMSk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIG51bGxwdHIpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBmYWxz
ZTsKKyAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRh
YmxlKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNp
dGlvbktpbmQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFu
c2l0aW9uS2luZCk7Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4aW5n
VHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlv
bktpbmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0g
bmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
LCB0cmFuc2l0aW9uS2luZCk7CiAgICAgCiAgICAgaWYgKGNoYW5nZXNJbmRleGluZ1R5cGUodHJh
bnNpdGlvbktpbmQpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc3RydWN0dXJlLT5tX2dsb2JhbE9iamVjdC5nZXQoKSkgewogICAgICAgICAgICAgaWYgKGds
b2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpIHsKLSAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5
cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+
b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSkgewogICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0K
QEAgLTYzOCw3ICs2MjIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0CiAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgaWYgKCFzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1f
dHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgQVNTRVJUKGV4
aXN0aW5nVHJhbnNpdGlvbi0+YXR0cmlidXRlc0luUHJldmlvdXMoKSA9PSBhdHRyaWJ1dGVzKTsK
LSAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5z
aXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9
CiAgICAgCkBAIC02NDYsNyArNjMwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdAogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwg
c3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRy
aWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlKGluZGV4aW5n
VHlwZSk7CisgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgCiAgICAgaWYgKHByZXZl
bnRzRXh0ZW5zaW9ucyh0cmFuc2l0aW9uS2luZCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldERp
ZFByZXZlbnRFeHRlbnNpb25zKHRydWUpOwpAQCAtNjU3LDMyICs2NDEsMjkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAgICAvLyB0YWJsZSwgc2luY2Ug
b3VyIGxvZ2ljIGZvciB3YWxraW5nIHRoZSBwcm9wZXJ0eSB0cmFuc2l0aW9uIGNoYWluIHRvIHJl
bWF0ZXJpYWxpemUgdGhlCiAgICAgICAgIC8vIHRhYmxlIGRvZXNuJ3Qga25vdyBob3cgdG8gdGFr
ZSBpbnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAgICAgICAgIAotICAgICAgICBz
dHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAgIHRy
YW5zaXRpb24tPnBpbkZvckNhY2hpbmcodm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVG
b3JQaW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJl
LT5tX29mZnNldDsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZygpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgewotICAgICAgICAg
ICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRpZXModHJh
bnNpdGlvbktpbmQpKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERv
bnREZWxldGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQ
cm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7Cisg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlmIChzZXRz
RG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCisgICAgICAgICAgICAg
ICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOworICAgICAgICAgICAgaWYgKHNldHNS
ZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5
LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRl
cyB8PSBSZWFkT25seTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0
UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBp
bm5lZCh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0
aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHNldHNSZWFkT25s
eU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKQotICAgICAgICAmJiB0cmFu
c2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkKLSAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5
VGFibGUoKS0+aXNFbXB0eSgpKQorICAgICAgICAmJiAhdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZU9yTnVsbCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldEhhc1JlYWRPbmx5
T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8odHJ1ZSk7CiAgICAgCiAgICAg
aWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHRyYW5zaXRpb24tPnBpbigp
OworICAgICAgICB0cmFuc2l0aW9uLT5waW4odm0sIHRyYW5zaXRpb24tPmVuc3VyZVByb3BlcnR5
VGFibGUodm0pKTsKICAgICBlbHNlIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoc3RydWN0dXJlLT5tX2xvY2spOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRh
YmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CkBAIC02OTgsMTMgKzY3OSwxMiBAQCBib29sIFN0cnVj
dHVyZTo6aXNTZWFsZWQoVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQ
cm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRh
YmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHBy
b3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAorICAg
IFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewogICAgICAgICBpZiAoKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSAh
PSBEb250RGVsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTcxNywx
MyArNjk3LDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihWTSYgdm0pCiAgICAgaWYgKGlz
U3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBp
ZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFi
bGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxl
LT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICghKGl0ZXItPmF0
dHJpYnV0ZXMgJiBEb250RGVsZXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkpCkBAIC03
MzYsMjEgKzcxNSwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlT
CiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VSVChpc0RpY3Rpb25h
cnkoKSk7CisgICAgCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
LCB2bS5oZWFwKTsKIAogICAgIHNpemVfdCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
IHsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CisgICAgICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBBU1NFUlQodGFibGUp
OwogCi0gICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlUYWJsZSgpLT5zaXpl
KCk7CisgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFibGUtPnNpemUoKTsKIAogICAg
ICAgICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3RlZCBieSBpbnNlcnRpb24gb3JkZXIuCiAg
ICAgICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJvcGVydHlDb3VudCk7CiAKICAgICAgICAg
Ly8gQ29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhlaXIgaGFzaGVkIGxvY2F0aW9ucywgY29t
cGFjdGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFzIHdlIGdvLgogICAgICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlU
YWJsZSgpLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFi
bGUtPmVuZCgpOwogICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGZv
ciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CisgICAgICAgIGZvciAoUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCAr
K2kpIHsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9iamVjdC0+Z2V0RGlyZWN0KGl0ZXItPm9m
ZnNldCk7CiAgICAgICAgICAgICBtX29mZnNldCA9IGl0ZXItPm9mZnNldCA9IG9mZnNldEZvclBy
b3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgICAgICB9CkBAIC03NTksNyAr
NzQxLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQogICAgICAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5s
aW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOwogCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS0+Y2xl
YXJEZWxldGVkT2Zmc2V0cygpOworICAgICAgICB0YWJsZS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygp
OwogICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC03NzMsNTAg
Kzc1NSwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAg
ICAgIC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5n
L2NvbXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAgICAgLy8gd2Ug
bmVlZCB0byB6ZXJvIGl0IG91dCBiZWNhdXNlIHRoZSBjb2xsZWN0b3IgZGVwZW5kcyBvbiB0aGUg
U3RydWN0dXJlIHRvIGtub3cgdGhlIHNpemUgZm9yIGNvcHlpbmcuCiAgICAgICAgIGlmIChvYmpl
Y3QtPmJ1dHRlcmZseSgpICYmICFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5oYXNJ
bmRleGluZ0hlYWRlcihvYmplY3QpKQotICAgICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0ZXJm
bHkodm0sIG51bGxwdHIpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNpemVk
IHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxvbmdl
ciB3aXRoaW4gdGhlIAogICAgICAgICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXplIGJ5
dGVzLCB3ZSdsbCBnZXQgdGhlIHdyb25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUgYmFz
ZSBiYWNrIHRvIAogICAgICAgICAvLyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2ZW50
IHRoaXMgY2FzZSB3ZSBuZWVkIHRvIG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgogICAgICAg
ICBlbHNlIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5zaGlm
dEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFm
dGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZs
eUFmdGVyRmxhdHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0
eSwgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRoaXM7CiB9
CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
Ci17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotICAgIAotICAgIHBpbigp
OwotCi0gICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLX0KLQot
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3ZvaWQgU3RydWN0dXJlOjpwaW4o
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQoaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0K
LSAgICBwaW4oKTsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZvaWQg
U3RydWN0dXJlOjpwaW4oKQotewotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNl
dElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0
YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7CiAgICAgbV9uYW1lSW5QcmV2aW91cyA9IG51
bGxwdHI7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKCkKK3ZvaWQgU3RydWN0
dXJlOjpwaW5Gb3JDYWNoaW5nKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAg
QVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRy
dWUpOworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBtX25hbWVJblByZXZp
b3VzID0gbnVsbHB0cjsKIH0KIApAQCAtODkxLDE3ICs4NTIsMTMgQEAgdm9pZCBTdHJ1Y3R1cmU6
OndpbGxTdG9yZVZhbHVlU2xvdygKICAgICB9CiAKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYg
d2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5
VGFibGUpOwotCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZSh2bSk7CisgICAgCiAgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMg
YWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0
IGl0IHdhcyBwcmVzZW50Ci0gICAgLy8gYWxyZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVy
dHkgdGFibGUgbm93LgotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKTsKLQotICAgIC8vIC4uLiBh
bmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KKyAgICAvLyBhbHJlYWR5LCBzbyB0aGUg
cHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgogICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0g
cHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5
KTsKLQorICAgIAogICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKICAgICAgICAgZW50cnktPmhhc0lu
ZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgYWdlKTsKICAgICBlbHNlIHsKQEAgLTk0MywxOCArOTAwLDEyIEBAIFByb3BlcnR5TWFwU3Rh
dGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXIKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQotewotICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xv
bmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotfQotCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKHBy
b3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAq
cHJvcGVydHlUYWJsZSgpLmdldCgpKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRl
KHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0
eSkpOworICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwo
KSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOworICAg
IGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVBy
b3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykKQEAgLTk4OSw3MCArOTQwLDI0IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVu
dHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewot
ICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0g
ICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUp
KSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250
RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAgICAgICAgc2V0SXNRdWlja1Byb3Bl
cnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKLQotICAgIGF1dG8gcmVwID0g
cHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAg
IGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwotCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3
T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwot
Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1h
eUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdP
ZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAo
Y29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwog
fQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAg
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUu
dWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0g
cHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKLSAg
ICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUo
cG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQp
OwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZv
aWQgU3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoIXByb3Bl
cnR5VGFibGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOwor
ICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJv
cGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUg
PSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAg
ICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFt
ZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKLQotICAgIFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
dGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRh
YmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEFTU0VSVCghaXNR
dWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkgfHwgIShpdGVyLT5hdHRy
aWJ1dGVzICYgRG9udEVudW0pKTsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nl
c3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKICAg
ICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMoKSkgewpAQCAtMTExNCw2ICsxMDE5LDkgQEAgdm9pZCBTdHJ1Y3R1
cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0
aGlzT2JqZWN0LT5tX2xvY2spOworICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQogICAg
ICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmNsZWFyKCk7CkBAIC0xMjc2
LDkyICsxMTg0LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBDb250ZXh0SGVhZGVyKFByaW50Uwog
ICAgIG91dC5wcmludCgiU3RydWN0dXJlczoiKTsKIH0KIAotI2lmIERPX1BST1BFUlRZTUFQX0NP
TlNURU5DWV9DSEVDSwotCi12b2lkIFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3koKQot
ewotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA+PSBQcm9wZXJ0eVRhYmxlOjpNaW5pbXVtVGFibGVT
aXplKTsKLSAgICBBU1NFUlQobV9pbmRleE1hc2spOwotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA9
PSBtX2luZGV4TWFzayArIDEpOwotICAgIEFTU0VSVCghKG1faW5kZXhTaXplICYgbV9pbmRleE1h
c2spKTsKLQotICAgIEFTU0VSVChtX2tleUNvdW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAg
QVNTRVJUKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwot
ICAgIEFTU0VSVChtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDQpOwotCi0gICAgdW5z
aWduZWQgaW5kZXhDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGVsZXRlZEluZGV4Q291bnQgPSAw
OwotICAgIGZvciAodW5zaWduZWQgYSA9IDA7IGEgIT0gbV9pbmRleFNpemU7ICsrYSkgewotICAg
ICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFthXTsKLSAgICAgICAgaWYgKGVudHJ5
SW5kZXggPT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGRlbGV0ZWRFbnRyeUluZGV4KCkpIHsK
LSAgICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7Ci0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA8IGRlbGV0ZWRFbnRyeUluZGV4
KCkpOwotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAtIDEgPD0gdXNlZENvdW50KCkpOwotICAg
ICAgICArK2luZGV4Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBiID0gYSArIDE7IGIg
IT0gbV9pbmRleFNpemU7ICsrYikKLSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4W2JdICE9IGVu
dHJ5SW5kZXgpOwotICAgIH0KLSAgICBBU1NFUlQoaW5kZXhDb3VudCA9PSBtX2tleUNvdW50KTsK
LSAgICBBU1NFUlQoZGVsZXRlZEluZGV4Q291bnQgPT0gbV9kZWxldGVkQ291bnQpOwotCi0gICAg
QVNTRVJUKCF0YWJsZSgpW2RlbGV0ZWRFbnRyeUluZGV4KCkgLSAxXS5rZXkpOwotCi0gICAgdW5z
aWduZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBj
IDwgdXNlZENvdW50KCk7ICsrYykgewotICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSB0YWJsZSgp
W2NdLmtleTsKLSAgICAgICAgaWYgKHJlcCA9PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9L
RVkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgKytub25FbXB0eUVudHJ5Q291bnQ7
Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApOwotICAg
ICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleDsKLSAgICAg
ICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5SW5kZXggPSBtX2luZGV4W2kgJiBtX2lu
ZGV4TWFza107Ci0gICAgICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAhPSBQcm9wZXJ0eVRhYmxl
OjpFbXB0eUVudHJ5SW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlcCA9PSB0YWJsZSgpW2VudHJ5
SW5kZXggLSAxXS5rZXkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
ayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChJZGVudGlmaWVyUmVw
SGFzaDo6aGFzaChyZXApKTsKLSAgICAgICAgICAgIGkgKz0gazsKLSAgICAgICAgfQotICAgICAg
ICBBU1NFUlQoZW50cnlJbmRleCA9PSBjICsgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG5vbkVt
cHR5RW50cnlDb3VudCA9PSBtX2tleUNvdW50KTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNoZWNr
Q29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIGlm
ICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNRdWlja1By
b3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkpIHsKLSAgICAgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICAgICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRy
aWJ1dGVzICYgRG9udEVudW0pKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+a2V5LT5pc1N5
bWJvbCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3BlcnR5VGFibGUoKS0+Y2hlY2tD
b25zaXN0ZW5jeSgpOwotfQotCi0jZWxzZQotCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNr
Q29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLX0KLQotI2Vu
ZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCiBib29sIENsYXNzSW5mbzo6
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGZvciAo
Y29uc3QgQ2xhc3NJbmZvKiBjaSA9IHRoaXM7IGNpOyBjaSA9IGNpLT5wYXJlbnRDbGFzcykgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsOSArMTkxLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95
KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAg
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3Bl
cnR5TmFtZSk7CisgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiBWZXJz
aW9ucyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBpdCBhZnRlciBtYWtpbmcgdGhlCisgICAg
Ly8gY2hhbmdlIGJ1dCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgY2FsbGJhY2sg
aXMgbm90IGNhbGxlZCBpZiB0aGVyZSBpcyBubyBjaGFuZ2UKKyAgICAvLyBiZWluZyBtYWRlLCBs
aWtlIGlmIHlvdSBjYWxsIHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oKSBhbmQgdGhl
IHByb3BlcnR5IGlzIG5vdAorICAgIC8vIGZvdW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZv
aWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlw
ZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAg
ICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9
IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQpAQCAtMjI5LDggKzIzNCw4IEBAIHB1YmxpYzoKICAgICBU
eXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdz
KTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2Jq
ZWN0KCk7IH0KIAotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2IuaW5kZXhpbmdUeXBlKCkgJiBBbGxBcnJheVR5cGVzOyB9Ci0gICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Iu
aW5kZXhpbmdUeXBlKCk7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbEFycmF5
VHlwZXM7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7IH0K
ICAgICAgICAgCiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAog
ICAgIHsKQEAgLTQzMyw5ICs0MzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgfQogICAgICAgICAKLSAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9i
OjppbmRleGluZ1R5cGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnlPZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBwcm9w
ZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0KCkKQEAgLTU3OSw2ICs1ODQsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTdHJlYW0mKTsKICAgICAK
KyAgICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CkBAIC02MzMsNDQgKzY0MCw0NSBA
QCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChW
TSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25z
dCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAg
ICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIm
LCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCk7CiAKLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3BlcnR5VGFibGUoKTsK
LSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYp
OwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJik7Ci0gICAgUHJvcGVy
dHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJik7Ci0gICAgQUxXQVlTX0lO
TElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIERlZmVy
R0MmKQorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRE8gTk9UIGNhbGwg
d2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVu
c3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VS
VCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0
ZW5jeSgpKTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQot
ICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CisgICAgICAgIGlmIChQcm9w
ZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzSUQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRh
YmxlKHZtKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKKyAgICAKKyAg
ICAvLyBUaGlzIG1heSBncmFiIHRoZSBsb2NrLCBvciBub3QuIERPIE5PVCBjYWxsIHdoZW4gaG9s
ZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9w
ZXJ0eVRhYmxlKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZv
KCkpOwotICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAg
dGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgICAgIGlmICghdGFibGUgJiYgcHJl
dmlvdXNJRCgpKSB7Ci0gICAgICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
ICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKLSAgICAgICAgICAgIHRhYmxlID0g
cHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAgICAgICB9CisgICAgICAgIGlmIChQcm9wZXJ0eVRh
YmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZt
KTsKICAgICB9Ci0gICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQ
aW5uaW5nKFZNJiB2bSwgRGVmZXJHQyYpCisgICAgCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVy
dHlUYWJsZU9yTnVsbCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5n
ZXQoKTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGdyYWIgdGhlIGxvY2suIERPIE5P
VCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBKU19FWFBPUlRf
UFJJVkFURSBQcm9wZXJ0eVRhYmxlKiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mLCBib29s
IHNldFByb3BlcnR5VGFibGUgPSB0cnVlKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5VGFi
bGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSk7CisgICAgCisgICAgUHJvcGVydHlUYWJs
ZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKKyAgICBQcm9wZXJ0eVRh
YmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKIAogICAgIHZvaWQgc2V0UHJl
dmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTY5Nyw4ICs3
MDUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlk
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7
CiAgICAgICAgIAotICAgIHZvaWQgcGluKCk7Ci0gICAgdm9pZCBwaW5Gb3JDYWNoaW5nKCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwaW4oVk0mLCBQcm9wZXJ0eVRhYmxlKik7CisgICAg
dm9pZCBwaW5Gb3JDYWNoaW5nKFZNJiwgUHJvcGVydHlUYWJsZSopOwogICAgIAogICAgIGJvb2wg
aXNSYXJlRGF0YShKU0NlbGwqIGNlbGwpIGNvbnN0CiAgICAgewpAQCAtNzEwLDcgKzcxOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0
KCkpOwogICAgIH0KLSAgICAgICAgCisKICAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShW
TSYpOwpAQCAtNzQwLDcgKzc0OCw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQg
dGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5
IGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3Vy
ZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhl
ciB0aHJlYWQuCiAgICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVh
cmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCiAgICAgV3JpdGVCYXJyaWVyPFBy
b3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDIwODQx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHUuZG91
YmxlV29yZCA9IDB4YmJhZGJlZWY7CiAgICAgfQogCi0gICAgU3RydWN0dXJlSURCbG9iKFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8pCisgICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVy
ZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSwgY29uc3QgVHlw
ZUluZm8mIHR5cGVJbmZvKQogICAgIHsKICAgICAgICAgdS5maWVsZHMuc3RydWN0dXJlSUQgPSBz
dHJ1Y3R1cmVJRDsKLSAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBl
OworICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZv
LnR5cGUoKTsKICAgICAgICAgdS5maWVsZHMuaW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5s
aW5lVHlwZUZsYWdzKCk7CiAgICAgICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxs
U3RhdGU6Ok5ld1doaXRlOwpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgU3RydWN0dXJlSURCbG9iJiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhl
ci51LmRvdWJsZVdvcmQ7IH0KICAgICAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNv
bnN0IHsgcmV0dXJuIHUuZmllbGRzLnN0cnVjdHVyZUlEOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZTsgfQotICAg
IHZvaWQgc2V0SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpIHsgdS5maWVs
ZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9CisgICAgdm9pZCBzZXRJbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUu
ZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5OyB9CiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50
eXBlOyB9CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBj
b25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3M7IH0KICAgICAKQEAgLTY3LDE2
ICs2NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlSURCbG9iLCB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0
cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlKTsKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICB1bmlv
biB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJ
RDsKLSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgICAgIEpT
VHlwZSB0eXBlOwogICAgICAgICAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVU
eXBlRmxhZ3M7CiAgICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwODQxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDggKzkzLDcgQEAgQUxXQVlTX0lO
TElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7CiAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisgICAgUHJvcGVydHlU
YWJsZSogcHJvcGVydHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsK
ICAgICBpZiAoIXByb3BlcnR5VGFibGUpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0Owog
CkBAIC0yMjUsMjMgKzIyNCwxOSBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93
T3V0T2ZMCiAKICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXpl
KCkpOwogCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAoIXRhYmxlKSB7CiAgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZz
ZXQobV9vZmZzZXQpOwogICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBjdXJy
ZW50U2l6ZSk7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0
eSgpOwogICAgIH0KIAotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3Bl
cnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBpZiAocHJvcGVydHlUYWJs
ZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5
KCkgPj0gdGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgaWYgKHRhYmxlLT5oYXNE
ZWxldGVkT2Zmc2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVCh0b3Rh
bFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1
cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0K
LQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6
cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAg
ICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSB0YWJsZS0+c2l6ZSgpKTsKKyAgICBy
ZXR1cm4gdGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOwogfQogCiBpbmxp
bmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCkBAIC0yNzEsNyArMjY2LDcgQEAgaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6
cHJvcGVydAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsK
ICAgICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC0yOTIsNiArMjg3
LDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2UKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkK
K3sKKyAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Cit9CisKIGlubGluZSBzaXplX3QgbmV4
dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQogewogICAg
IGlmICghY3VycmVudENhcGFjaXR5KQpAQCAtMzExLDQgKzMxMSw4NSBAQCBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nCiAgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9T
dHJpbmdWYWx1ZShleGVjLCB2bSwgdGhpcywgdmFsdWUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxl
ID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIAorICAgIHNldFByb3BlcnR5VGFibGUo
dm0sIHRhYmxlKTsKKyAgICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0s
IHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0
cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBz
ZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisg
ICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBu
ZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICAKKyAg
ICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMp
LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOworICAg
IAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQp
OworICAgIHJldHVybiBuZXdPZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citp
bmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGF1dG8g
cmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOworICAgIAorICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZy
b20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJv
cGVydHkgdGFibGUuCisgICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEg
dGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKKworICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRp
b24gPSB0YWJsZS0+ZmluZChyZXApOworICAgIGlmICghcG9zaXRpb24uZmlyc3QpCisgICAgICAg
IHJldHVybiBpbnZhbGlkT2Zmc2V0OworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CisKKyAgICB0YWJsZS0+cmVtb3ZlKHBvc2l0aW9uKTsK
KyAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIsIG9mZnNldCk7CisgICAgcmV0dXJuIG9mZnNldDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQorewor
ICAgIHBpbih2bSwgZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkpOworICAgIAorICAgIHJldHVybiBh
ZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29u
c3QgRnVuYyYgZnVuYykKK3sKKyAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7
CisgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKKyAgICBBU1NFUlQocHJvcGVy
dHlUYWJsZU9yTnVsbCgpKTsKKyAgICAKKyAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwg
ZnVuYyk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJsZShWTSYg
dm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQoreworICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5z
ZXRNYXlCZU51bGwodm0sIHRoaXMsIHRhYmxlKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMDg0MTUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBz
ZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEw
MDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8q
IExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07
CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2
QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3
MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0
ZXMuaCAqLzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJC
MjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CkBAIC0zNzQsNiArMzc1LDcgQEAK
IAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRD
QjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxn
b3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNG
IC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZD
b3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0Rjcw
MEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNo
TWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTk1Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNG
RiAvKiBMaXN0SGFzaFNldC5oICovLAogCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBM
b2NrLmNwcCAqLywKIAkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAor
CQkJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8sCiAJCQkJ
QThBNDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAogCQkJCTUxM0UxNzBBMUNE
N0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQlBOEE0NzJDNjE1
MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8sCkBAIC0xMzIzLDYgKzEzMjYsNyBA
QAogCQkJCUE4QTQ3MzlCMTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRv
bU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8q
IENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUx
QTgyNUIwMDQxMjNGRiAvKiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBGQ0RERTFE
RDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczOUQxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzM5RjE1MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczQTExNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQo
V1RGX0hFQURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAg
TG9jay5oCisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAg
IE1haW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBA
QCBMaXN0RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7
Cit1c2luZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNp
bmcgV1RGOjpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNp
bmcgV1RGOjpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAog
I2VuZGlmIC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODQxNSkKKysr
IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIx
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAi
RGF0YUxvZy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmlu
dFN0cmVhbS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0
aHJlYWQ+Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExv
Y2tCYXNlOjpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAg
IC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBh
c3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0g
NDA7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFs
dWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVu
dEJ5dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBi
YXJnZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAg
ICAgICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUs
IGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0
b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShj
dXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQp
IHsKLSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVh
ZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmly
c3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBw
YXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAg
ICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYg
IW1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Ly8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9u
ZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQ
YXJrUmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFu
ZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBh
cmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8
VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRv
ZmY6Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3
YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAg
ICAgICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBo
YXMgcmVsZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVl
biB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUg
bG9jay4gQnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNv
IHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUg
dmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5k
IHRyeSBhZ2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1f
Ynl0ZSk7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Ns
b3dJbXBsKFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9i
eXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6
dW5sb2NrRmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5F
VkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVz
cykKLXsKLSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1
bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNv
bWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0
aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2Vk
IGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0g
ICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2Fk
KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwg
b2xkQnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAo
bV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFNvbWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFu
ZCB0aGUgbG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2ls
bCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cg
Zm9yIGJhcmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhl
IHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxs
Ci0gICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0
ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xv
dDo6dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFy
a2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAg
ICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNI
ZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hv
dWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBB
U1NFUlQobV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQg
JiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5k
IHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8g
d2FpdGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRo
cmVhZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDAp
OwotICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6
dW5sb2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg0MTUpCisrKyBTb3VyY2UvV1RG
L3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RG
X0xvY2tfaAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgot
I2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+
CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgog
CkBAIC0zNyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RG
IHsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxn
b3JpdGhtOworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJl
cXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8g
Y29tcGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVk
IGFuZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bp
bm5pbmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUg
dG8gc3RkOjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdU
RiB7CiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBp
ZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjpt
ZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWlu
Z1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJv
b2wgdHJ5TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50
OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1
cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRl
VmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6dHJ5TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZv
ciBzdGQ6OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsK
ICAgICAvLyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0
IGEgZmFpciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtF
TFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9k
eSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHVubG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRo
bTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Ns
b3coKTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJh
bnRlZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwK
QEAgLTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAg
IHZvaWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNv
bXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNl
KSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGlu
ZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJs
eVNsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5s
b2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNs
b3coKTsKICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7
CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsK
ICAgICB9CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBA
IHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAx
OwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxv
Y2tGYWlybHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIs
Ci0gICAgICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVz
cyk7Ci0gICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwK
LSAgICAgICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3Ig
dGVzdGluZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9M
b2NrQWxnb3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29y
aXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29y
aXRobV9oCisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4K
KyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlz
IHRoZSBhbGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExv
Y2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNz
IExvY2tBbGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJp
dDsKKworcHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21p
YzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CisgICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJf
YWNxdWlyZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tU
eXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykp
KQorICAgICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBi
b29sIHRyeUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZh
bHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVu
dEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCB1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IHVubG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tU
eXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAg
ICAgICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZh
bHVlLCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAg
ICAgICAgICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Ns
b3cobG9jaywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNv
bnN0IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5s
b2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAK
KyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYg
bG9jaykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAg
Ly8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFz
dCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0
ID0gNDA7CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3Vy
cmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBv
dXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVl
ICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vh
ayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBw
YXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNw
aW4gYXJvdW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bhcmtl
ZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNv
dW50Kys7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVl
ZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFu
ZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFy
a2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAg
ICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAg
ICAgJiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1Bh
cmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAg
ICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQ
YXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVs
ZEJpdCB8IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBh
cmtlZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtS
ZXN1bHQudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBo
YW5kZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAg
ICAgICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQg
dGhhdCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAg
ICAgICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBh
biBvcHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlz
IGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5n
ZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFn
YWluLgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAg
ICBGYWlyLAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMg
dm9pZCB1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNz
KQorICAgIHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBD
QVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAg
ICAgICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYg
cmlnaHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUg
aGVsZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFy
ZSB1bmxvY2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xk
Qnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAg
ICAgICAgICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAg
ICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJr
ZWRCaXQpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2sp
ID09IGlzSGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoaXNIZWxkQml0LCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTb21l
b25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhl
IGxvY2sgdG8gdGhhdCB0aHJlYWQKKyAgICAgICAgICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxs
IHVubG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBm
b3IgYmFyZ2luZy4KKyAgICAgICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUg
dGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0
aWxsCisgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KKyAgICAgICAgICAgIEFT
U0VSVCgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkp
OworICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAorICAgICAgICAgICAgICAgICZs
b2NrLAorICAgICAgICAgICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3Vs
dCkgLT4gaW50cHRyX3QgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkg
b25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2Vk
Qml0LAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGgg
Yml0cyBzZXQgcmlnaHQgbm93LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKGxvY2subG9h
ZCgpICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAo
ZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5k
IHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdhaXRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9m
ZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9ja1R5cGUg
b2xkVmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBl
IG5ld1ZhbHVlID0gb2xkVmFsdWUgJiB+bWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5ld1ZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChs
b2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBlbnVtIFRva2VuIHsKKyAgICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAorICAgICAgICBE
aXJlY3RIYW5kb2ZmCisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OkxvY2tBbGdvcml0aG07CisKKyNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCisKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNp
b24gMjA4NDE1KQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5o
IgogI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUg
PGNmbG9hdD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxv
Y2ssIHRpbWUpOwogfQogCitib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJiB0aW1lKQoreworICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRp
bWUgPiB0aW1lLndpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGlt
ZS5ub3dXaXRoU2FtZUNsb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg0
MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM0LDggKzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VY
UE9SVF9QUklWQVRFIGJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUmKTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlOwordXNpbmcgV1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAog
I2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294327</attachid>
            <date>2016-11-09 20:27:04 -0800</date>
            <delta_ts>2016-11-10 17:47:13 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>199766</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDA0LDYgKzMwMDUsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4Niw2ICs1Njg4LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE4LDYgKzc5MjEsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwODAsNyArMTAwODQsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0yNjUsNyArMjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVS
ZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8p
OwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNj
cmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5
IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1Bh
dGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5
cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNT
RVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRo
cm91Z2guYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKElzQXJyYXkpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgICAgICAvLyBieXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5
aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwg
c2luY2UgYXJyYXlpZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGpp
dC0+bV9qaXQubG9hZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
bV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIp
OworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlR1BSKTsKICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAg
ICAgICAgICAgICAgIGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3Ry
dWN0dXJlR1BSLCBtX2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTkx
OCw2ICs5MTgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKFdv
cmxkKTsgLy8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0Nl
bGxfc3RydWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAg
ICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIw
ODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRj
aDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7
CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpB
YnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMjA4NTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1
cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAot
dm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3Jp
dGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAg
IC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFu
ZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQg
ZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRP
bmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2b2lkIFBsYW46OnJlbWVtYmVy
Q29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygp
KQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMg
b2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4
cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUg
dGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdD
LgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJv
ZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAg
IENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tz
KCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworICAgIHZvaWQgcmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsK
ICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwog
ICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAg
ICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAg
ICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwNSw3ICs5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAg
CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRl
bXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4
ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3QuaCIK
IAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4
LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5B
QkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGljIEF1dG9t
YXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9sZGVyJiBs
b2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExvY2s+IGxv
Y2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50IHJlbGF0
aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9
CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAgIGZvciAo
UGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3BsYW5z
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgp
OworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZv
aWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVt
ZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0IEBAIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQgbWFya0Nv
ZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAgICAgIGlm
IChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4
T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90
VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7
CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAg
ICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJMRShERkdf
SklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3ZvaWQgbWFy
a0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V29ya2xpc3QuaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFuLmgiCiAj
aW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQu
aD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFjZSBERkcg
ewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25vd24sIENv
bXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdv
cmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90
VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lk
IHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBA
QCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0dXJuICpy
ZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21wbGV0ZUFs
bFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYp
Owogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBAQCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9v
dCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNz
dW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5LgotICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXplb2YoaW50
MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zm
c2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBl
Lm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNpemVvZihp
bnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFu
ZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9
PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlND
ZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUu
b2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgmSlNDZWxs
X2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlNDZWxsX2hl
YWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZK
U0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50
KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg1
MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxT
dGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFk
ZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0
cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBt
YWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBc
Ci0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Nj
b3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVu
Y3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsOCBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3Jl
U3RvcmVGZW5jZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2Rl
LT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAtNTA0MCw2ICs1MDQyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3Jp
Z2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTA0Nyw3ICs1MDUwLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0
aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTA1NSw3ICs1MDYyLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUs
IHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xMTcyNCw3ICsxMTczMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMu
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChB
cnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAg
ICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3Jv
QXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1v
ZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSwxMiBAQCBGZW5jZVZhbHVlKiBPdXRwdXQ6
OmZlbmNlKCkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCkpOwogfQogCit2b2lkIE91dHB1dDo6c3RvcmVTdG9yZUZlbmNlKCkKK3sKKyAg
ICBGZW5jZVZhbHVlKiBmZW5jZSA9IHRoaXMtPmZlbmNlKCk7CisgICAgZmVuY2UtPndyaXRlID0g
SGVhcFJhbmdlKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIpCiB7CiAgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlOCwgb3JpZ2luKCksIHZhbHVlLCBwb2lu
dGVyLnZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShy
ZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNiArMTkwLDcgQEAgcHVibGljOgogICAgIExWYWx1ZSBs
b2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBv
aW50ZXIpOwogICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIHZvaWQgc3RvcmVTdG9y
ZUZlbmNlKCk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKICAg
ICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3
LDExIEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gU2xvdFZpc2l0
b3JzIGFyZSBkb25lLgogICAgIEFudGhyYWNpdGVPckJsYWNrID0gMCwKICAgICAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmpl
Y3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCisgICAgLy8gVGhlIG9iamVjdCBpcyBnb2luZyB0
byBiZSBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhh
cyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4g
aXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8g
b2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNv
bmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJh
cnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBH
cmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7
IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVi
bGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hl
YXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFw
Lm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAg
ICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRo
ZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50
R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3JsZCgpOworCisgICAgICAg
IGRhdGFMb2coIltHQzogIik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBIZWFwJiBtX2hl
YXA7Cit9OworCiBuYW1lc3BhY2UgewogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlSGVhcFNp
emUgPSAzMiAqIE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVyYWdlIHdlYnBhZ2UuCkBAIC0yNDQs
NyArMjczLDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgw
KQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9zbG90VmlzaXRvcigqdGhp
cykKKyAgICAsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3VuaXF1ZTxTbG90Vmlz
aXRvcj4oKnRoaXMpKQorICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8
TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1fY29kZUJs
b2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkKICAgICAsIG1faml0U3R1YlJv
dXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkpCkBAIC0yNjYsNiAr
Mjk2LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIFVTRShG
T1VOREFUSU9OKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5k
aWYKKyAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFrZV91bmlxdWU8TWFy
a1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2soc3RkOjptYWtl
X3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFwSGVs
cGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3JlYXRlKCkpCiAgICAg
LCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OmNyZWF0ZSgpKQpA
QCAtNDE2LDEyICs0NDgsMTIgQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxs
LCBBcgogCiB2b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCiB7Ci0gICAgbV9zbG90
VmlzaXRvci5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIH0KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmZpbmFsaXplVW5j
b25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5maW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiB9CiAKIHZvaWQgSGVhcDo6d2lsbFN0YXJ0
SXRlcmF0aW5nKCkKQEAgLTQzOSwxMTcgKzQ3MSwxNjQgQEAgdm9pZCBIZWFwOjpjb21wbGV0ZUFs
bEpJVFBsYW5zKCkKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVFdvcmtsaXN0OjppbnN0YW5jZSgp
LT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQotI2lmIEVO
QUJMRShERkdfSklUKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKCptX3ZtKTsKLSNl
bmRpZgogfQogCi12b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCit2b2lk
IEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKLSAgICBUaW1pbmdT
Y29wZSBtYXJrUm9vdHNUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyIpOworICAg
IFRpbWluZ1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJr
VG9GaXhwb2ludCIpOwogICAgIAotICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3Io
bV9zbG90VmlzaXRvcik7CisgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcigqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CiAgICAgCi0gICAgewotICAgICAgICBUaW1pbmdTY29wZSBw
cmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGJlZm9yZSBj
b252ZXJnZW5jZSIpOworICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpIHsKKyAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOworICAgICAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKKyAgICAgICAgbV9tdXRhdG9y
TWFya1N0YWNrLT5jbGVhcigpOworICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAg
ICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0jZW5kaWYKKyAgICBiZWdpbk1hcmtp
bmcoKTsKIAotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICAgICAgaWYgKFNhbXBs
aW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkp
IHsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIG93biB0aGUgbG9jayBmcm9t
IG5vdyB1bnRpbCB3ZSdyZSBkb25lCi0gICAgICAgICAgICAvLyBtYXJraW5nIHRoZSBTYW1wbGlu
Z1Byb2ZpbGVyJ3MgZGF0YSBiZWNhdXNlIG9uY2Ugd2UgdmVyaWZ5IHRoZQotICAgICAgICAgICAg
Ly8gU2FtcGxpbmdQcm9maWxlcidzIHN0YWNrIHRyYWNlcywgd2UgZG9uJ3Qgd2FudCBpdCB0byBh
Y2N1bXVsYXRlCi0gICAgICAgICAgICAvLyBtb3JlIHN0YWNrIHRyYWNlcyBiZWZvcmUgd2UgZ2V0
IHRoZSBjaGFuY2UgdG8gbWFyayBpdC4KLSAgICAgICAgICAgIC8vIFRoaXMgbG9jayBpcyByZWxl
YXNlZCBpbnNpZGUgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkuCi0gICAgICAgICAgICBzYW1wbGlu
Z1Byb2ZpbGVyLT5nZXRMb2NrKCkubG9jaygpOwotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxl
ci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOwotICAgICAgICB9Ci0jZW5kaWYgLy8g
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCA9IGZhbHNlOwogCi0gICAgICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpIHsKLSAgICAgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAgICAg
ICAgICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJrU3RhY2soKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJlZ2luTWFya2luZygpOwotCi0gICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhp
dCA9IGZhbHNlOwotCi0gICAgICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKAotICAgICAg
ICAgICAgW3RoaXNdICgpIHsKLSAgICAgICAgICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0
b3I7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+
KCp0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3VmlzaXRv
ci5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMu
YXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxl
bFNsb3RWaXNpdG9ycy50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICBtX2hlbHBl
ckNsaWVudC5zZXRGdW5jdGlvbigKKyAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgIFNs
b3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9y
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdl
dCgpOworICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChX
VEZNb3ZlKG5ld1Zpc2l0b3IpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRh
a2VMYXN0KCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBXVEY6OnJlZ2lzdGVy
R0NUaHJlYWQoR0NUaHJlYWRUeXBlOjpIZWxwZXIpOworICAgICAgICAgICAgV1RGOjpyZWdpc3Rl
ckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKIAotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVy
KCpzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRTdGFy
dE1hcmtpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2Rl
RW5hYmxlcigqc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRT
dGFydE1hcmtpbmcoKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hh
cmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxl
bFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxs
ZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAgICAgICAgICAgICBtX2F2
YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOwogCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJr
aW5nKCk7Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICBUaW1pbmdTY29wZSBjb252ZXJnZW5jZVRp
bWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnZlcmdlbmNlIik7Ci0gICAgICAg
IFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKIAorICAgIFNlY29uZHMgY29uY3VycmVudFRp
bWU7CisgICAgZG91YmxlIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvID0gMC4xOworICAgIGNv
bnN0IGRvdWJsZSByYXRpb1N0ZXAgPSAxLjM7CisgICAgTW9ub3RvbmljVGltZSBpbml0aWFsVGlt
ZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIE1vbm90b25pY1RpbWUgdG9wT2ZMb29wVGlt
ZSA9IGluaXRpYWxUaW1lOworICAgIGZvciAodW5zaWduZWQgaXRlcmF0aW9uID0gMTsgOyArK2l0
ZXJhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRh
dGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOworICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVU
b1Jlc3VtZSA9IHRvcE9mTG9vcFRpbWUgKyBjb25jdXJyZW50VGltZSAqIHN0b3BwZWRPdmVyQ29u
Y3VycmVudFJhdGlvOworICAgICAgICBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyAqPSByYXRp
b1N0ZXA7CiAgICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNl
VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29uc2VydmF0aXZlIHNjYW4iKTsK
KyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMs
ICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIpOwogICAgICAgICAgICAg
Q29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMpOwogICAgICAgICAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgICAgICAgICAg
Z2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJK
U1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgZ2F0aGVyU2NyYXRj
aEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIHZpc2l0Q29uc2Vy
dmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3QgZ2V0IGJhcnJpZXJlZCwg
c28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cworICAgICAgICAvLyBhbGwg
b2YgdGhlbS4KKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgICAgICBzY2FuRXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisjZW5kaWYKKyAg
ICAgICAgICAgIAorICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0
ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgCisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQorICAgICAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAg
ICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhoZWFwUm9vdFZpc2l0b3IsICpt
X21hcmtMaXN0U2V0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBk
byB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBi
bG9ja3MgdGhhdCBhcmUKLSAgICAgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVy
LCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJs
b2NrCi0gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5
IG5lZWRzIGEgYmFycmllci4KLSAgICAgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVy
Q3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlzaXRFeHRl
cm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAg
ICAgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0
QXJndW1lbnRCdWZmZXJzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0RXhjZXB0aW9u
KGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZp
c2l0b3IpOwotICAgICAgICB2aXNpdEhhbmRsZVN0YWNrKGhlYXBSb290VmlzaXRvcik7Ci0gICAg
ICAgIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwotICAgICAgICB2aXNpdFR5cGVQcm9maWxlcigp
OwotICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICAgICAgdHJhY2VDb2RlQmxvY2tz
QW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hh
cmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgfQotICAgIAotICAgIFRpbWluZ1Nj
b3BlIHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGFm
dGVyIGNvbnZlcmdlbmNlIik7Ci0KLSAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBiZSBtYXJr
ZWQgbGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KLSAgICAvLyB0aGUgbGl2
ZW5lc3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KLSAgICB2aXNpdFdlYWtIYW5k
bGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGlmIChtX3ZtLT5leGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRpb24o
KSk7CisgICAgICAgIGlmIChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCisgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXMoaGVhcFJvb3RW
aXNpdG9yKTsKKyAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFwUm9vdFZpc2l0b3IpOwor
CisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICBpZiAoU2FtcGxpbmdQcm9m
aWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgeworICAg
ICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpKTsK
KyAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFj
ZXMoKTsKKyAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBk
YXRhOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICB9CisjZW5kaWYgLy8g
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPnR5
cGVQcm9maWxlcigpKQorICAgICAgICAgICAgbV92bS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0
KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV92
bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIAorICAgICAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJr
ZWRTdHViUm91dGluZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworCisgICAgICAgIG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworICAgICAg
ICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisg
ICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgp
OworCisgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyhoZWFwUm9vdFZpc2l0b3Ip
OworICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgdmlzaXRDb21waWxl
cldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgREZHOjptYXJrQ29kZUJsb2Nrcygq
bV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBib29sIHNob3VsZFRlcm1p
bmF0ZSA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmlzRW1wdHkoKSAmJiBtX211dGF0b3JNYXJr
U3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhp
cyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tz
IHRoYXQgYXJlCisgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3ZSBuZWVk
IHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2NrCisgICAg
ICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJy
aWVyLiBBbHNvLCB0aGlzIGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCisgICAgICAgIC8vIGZpeHBv
aW50IGNoZWNrIC0gb3RoZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZlci4gSW5jaWRlbnRhbGx5
LCB3ZSBhbHNvIHdhbnQgdG8gZG8gdGhpcworICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIEdDIHNv
IHRoYXQgYW55dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBnZXRzIGJhcnJpZXJlZCBp
biB0aGUgbmV4dAorICAgICAgICAvLyBHQy4KKyAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJh
cnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7CisgICAgICAgIERGRzo6cmVtZW1iZXJDb2Rl
QmxvY2tzKCptX3ZtKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91bGRUZXJtaW5hdGUpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBTbG90VmlzaXRvcidz
IG1hcmsgc3RhY2tzIGFyZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9yIHRocmVhZCAoaS5lLiB0
aGlzIHRocmVhZCkKKyAgICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhhdCdzIHdoeSB3ZSBkb3Vi
bGUtYnVmZmVyLgorICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRyYW5zZmVyVG8obV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBk
YXRhTG9nKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNvbGxlY3Rvck1hcmtTdGFjaygpLnNpemUo
KSwgIisiLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkuc2l6ZSgp
LCAiICIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRyYWNlVGltaW5n
U2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCB0cmFjaW5nIik7CisgICAgICAgICAg
ICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
ICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4odGltZVRv
UmVzdW1lKTsKKyAgICAgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBkcmFp
blJlc3VsdCA9CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5G
cm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbiwgdGltZVRvUmVzdW1lKTsKKyAgICAg
ICAgICAgIGlmIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQ6
OkRvbmUpIHsKKyAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHJlc3VtZVRoZVdv
cmxkU2NvcGUoKnRoaXMpOworICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRv
ci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZU9mU3Rv
cCA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBjb25jdXJyZW50VGltZSA9IHRpbWVP
ZlN0b3AgLSB0aW1lVG9SZXN1bWU7CisgICAgICAgIHRvcE9mTG9vcFRpbWUgPSB0aW1lT2ZTdG9w
OworICAgIH0KIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9t
YXJraW5nTXV0ZXgpOwpAQCAtNTYzLDcgKzY0Miw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRv
dWJsZSBnY1N0YXJ0VGltZSkKIAogdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygp
OwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocm9vdHMsICpt
X2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJsb2Nrcyk7CiB9CiAKQEAgLTU5MCw2ICs2NjgsNyBA
QCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjpiZWdpbk1hcmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUg
PT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFy
a3NGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtz
KCk7CiAgICAgCiAgICAgewogICAgICAgICBUaW1pbmdTY29wZSBjbGVhck1hcmtzVGltaW5nU2Nv
cGUoKnRoaXMsICJtX29iamVjdFNwYWNlLmJlZ2luTWFya2luZyIpOwpAQCAtNTk3LDQyICs2NzYs
MjIgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2
aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpCi17Ci0jaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
LSAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Nsb3RWaXNpdG9yKTsKLSNl
bmRpZgotfQotCi12b2lkIEhlYXA6OnZpc2l0U21hbGxTdHJpbmdzKCkKLXsKLSAgICBpZiAoIW1f
dm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVy
ZW5jZXMobV9zbG90VmlzaXRvcik7Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTbWFsbCBzdHJpbmdzOlxuIiwgbV9zbG90
VmlzaXRvcik7Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCiB2b2lk
IEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQog
ewotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kKHJvb3RzKTsKKyAgICBtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5hcHBlbmQocm9vdHMpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4i
LCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsK
KyAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgKm1fY29sbGVjdG9yU2xv
dFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZl
cmVuY2VzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBE
Rkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERGRzo6ZXhpc3RpbmdXb3Jr
bGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7CisgICAg
ICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMo
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwg
bV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CiAjZW5kaWYKIH0KIApAQCAtNzA1LDEzMiArNzY0LDEwIEBA
IHZvaWQgSGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEgKICAgICB9CiB9CiAKLXZv
aWQgSGVhcDo6dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYgaGVhcFJvb3RW
aXNpdG9yKQotewotICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQotICAg
ICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiUHJvdGVj
dGVkIE9iamVjdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFw
Um9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX21hcmtMaXN0U2V0IHx8ICFtX21h
cmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwotCi0gICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJB
cmd1bWVudCBCdWZmZXJzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9y
LmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeGNlcHRpb24oSGVhcFJv
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICghbV92bS0+ZXhjZXB0aW9uKCkgJiYgIW1f
dm0tPmxhc3RFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlzaXRvci52aXNp
dChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSk7Ci0gICAgdmlzaXRvci52aXNpdChtX3ZtLT5h
ZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJFeGNlcHRpb25zOlxuIiwgbV9z
bG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlzaXRvcik7Ci0KLSAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIlN0cm9uZyBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRIYW5kbGVTdGFjayhI
ZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVTdGFjay52aXNpdCh2aXNp
dG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkK
LSAgICAgICAgZGF0YUxvZygiSGFuZGxlIFN0YWNrOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRT
YW1wbGluZ1Byb2ZpbGVyKCkKLXsKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAg
aWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1By
b2ZpbGVyKCkpIHsKLSAgICAgICAgQVNTRVJUKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5p
c0xvY2tlZCgpKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQobV9zbG90VmlzaXRv
cik7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCBtX3Nsb3RW
aXNpdG9yKTsKLQotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAg
ICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS51bmxvY2soKTsKLSAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotfQotCi12b2lkIEhlYXA6OnZpc2l0VHlwZVBy
b2ZpbGVyKCkKLXsKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgdm0o
KS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKCJUeXBlIFByb2ZpbGVyIHZpc2l0IGRhdGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgIH0KLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFNoYWRvd0NoaWNrZW4oKQotewotICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNp
dENoaWxkcmVuKG1fc2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6OnRyYWNlQ29kZUJsb2Nr
c0FuZEpJVFN0dWJSb3V0aW5lcygpCi17Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFy
a2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb2RlIEJsb2NrcyBh
bmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFdlYWtIYW5kbGVz
KEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMiKTsKLSAgICB3aGlsZSAodHJ1ZSkgewot
ICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIm1f
b2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS52
aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9Ci0gICAgICAgIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygp
OwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0
b3IpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cihtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJh
aW4oKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNp
dG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgSGVhcDo6dXBk
YXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAgc2l6ZV90IHZpc2l0Q291
bnQgPSBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAgc2l6ZV90IHZpc2l0Q291
bnQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAgICAgIHZpc2l0
Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBkYXRhTG9nRigiXG5OdW1iZXIg
b2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNlY3NcbiIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFz
aW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgzOCwxOSArNzc1LDIyIEBAIHZv
aWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKICAgICBpZiAobV9jb2xsZWN0
aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX3RvdGFsQnl0ZXNW
aXNpdGVkID0gMDsKIAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPSBtX3Nsb3RW
aXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CisgICAgbV90b3Rh
bEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAgICAgCiAg
ICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlOwog
fQogCiB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xvdFZpc2l0b3IucmVzZXQo
KTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgZm9yIChhdXRv
JiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQogICAgICAgICBwYXJh
bGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsK
ICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAgLTk4OCwxNCArOTI4LDIw
IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKIHsKICAgICBBU1NF
UlQoY2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgfHwgIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENl
bGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwotICAgIC8vIEluZGljYXRlIHRoYXQgdGhpcyBv
YmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8v
IC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQgY29sbGVjdGlvbi4KLSAg
ICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICAvLyAiT2xkR3JleSIgZG9lc24n
dCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBidXQgd2UgdXN1YWxseSB0
cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQotICAgIC8vIHNhbWUuCi0gICAgY2VsbC0+c2V0Q2VsbFN0
YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmRUb01hcmtT
dGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlv
biBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0
CisgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1
bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cworICAgICAgICAvLyBtYXJr
ZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5vcm1h
bCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAgICAgICAvLyBzYWZlbHkgaWdub3JlIHRoZXNlIHN0
b3Jlcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRo
ZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9y
IG1heSBzZXQgdGhlCisgICAgLy8gc3RhdGUgdG8gR3JleSBhbmQgdGhlbiB0byBBbnRocmFjaXRl
T3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8gcmFjZSB3aXRoIHRoZQorICAg
IC8vIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1
c2UgdGhlIG9iamVjdCBfd2lsbF8gZ2V0IHNjYW5uZWQgYWdhaW4uCisgICAgLy8gSWYgd2UgbG9z
ZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fpbi4gVGhhdCB3
b3VsZCBiZSB1bmZvcnR1bmF0ZSBidXQgbm90CisgICAgLy8gdGhlIGVuZCBvZiB0aGUgd29ybGQu
CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CisgICAgbV9tdXRhdG9y
TWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJh
Z2UoKQpAQCAtMTA5NCwyNCArMTA0MCwxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgp
CiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUgYmVmb3JlID0gMDsKKyAg
ICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAg
ICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIpOwotICAgICAg
ICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGRhdGFMb2coIltHQzogU1RBUlQg
IiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7CisgICAgICAgIGJlZm9yZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7CiAgICAg
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAgfQotI2VuZGlm
IC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9pc1NhZmVUb0Nv
bGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBkYXRhTG9nKCJD
b2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xsZWN0aW9uU2Nv
cGUsICJcbiIpOwpAQCAtMTEzMSwxMiArMTA2Nyw5IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhy
ZWFkKCkKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVy
OjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQogICAgICAgICAKLSAgICBmbHVzaE9sZFN0
cnVjdHVyZUlEVGFibGVzKCk7Ci0gICAgc3RvcEFsbG9jYXRpb24oKTsKICAgICBwcmVwYXJlRm9y
TWFya2luZygpOwotICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CiAgICAgICAgIAotICAg
IG1hcmtSb290cyhnY1N0YXJ0VGltZSk7CisgICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUp
OwogICAgICAgICAKICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5n
YXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAt
MTE3Myw4ICsxMTA2LDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgIH0KICAg
ICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBkb3VibGUgYWZ0ZXIgPSBj
dXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXNdXG4i
KTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgICAgICBkYXRhTG9nKChhZnRlciAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1z
LCBjeWNsZSAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIEVORF1cbiIp
OwogICAgIH0KICAgICAKICAgICB7CkBAIC0xMTk2LDEwICsxMTI5LDMzIEBAIHZvaWQgSGVhcDo6
c3RvcFRoZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxl
clRocmVhZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
ID0gdHJ1ZTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgeworICAgICAgICBEZWZlckdDRm9yQVdo
aWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+
Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCisgICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorICAgIAorICAgIHZtKCktPnNoYWRvd0NoaWNrZW4o
KS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgCisgICAgZmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMo
KTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgCisgICAgbV9zdG9w
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiB2b2lkIEhlYXA6OnJlc3VtZVRoZVdv
cmxkKCkKIHsKKyAgICAvLyBDYWxsaW5nIHJlc3VtZUFsbG9jYXRpbmcgZG9lcyB0aGUgUmlnaHQg
VGhpbmcgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyB0aGUgZW5kIG9mIGEKKyAgICAvLyBj
b2xsZWN0aW9uIGN5Y2xlIG9yIHRoaXMgaXMganVzdCBhIGNvbmN1cnJlbnQgcGhhc2Ugd2l0aGlu
IGEgY29sbGVjdGlvbiBjeWNsZToKKyAgICAvLyAtIEF0IGVuZCBvZiBjb2xsZWN0aW9uIGN5Y2xl
OiBpdCdzIGEgbm8tb3AgYmVjYXVzZSBwcmVwYXJlRm9yQWxsb2NhdGlvbiBhbHJlYWR5IGNsZWFy
ZWQgdGhlCisgICAgLy8gICBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICAvLyAtIER1cmluZyBjb2xs
ZWN0aW9uIGN5Y2xlOiBpdCByZWluc3RhdGVzIHRoZSBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICBt
X29iamVjdFNwYWNlLnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKICAgICBSRUxFQVNFX0FTU0VS
VChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKICAgICBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgcmVzdW1lQ29t
cGlsZXJUaHJlYWRzKCk7CkBAIC0xNDY5LDEwICsxNDI1LDE1IEBAIHZvaWQgSGVhcDo6bm90aWZ5
VGhyZWFkU3RvcHBpbmcoY29uc3QgTG8KIAogdm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiB7Ci0gICAg
SGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOwotICAgIGRlbGV0ZVVubWFya2Vk
Q29tcGlsZWRDb2RlKCk7Ci0gICAgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKLSAgICBz
d2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAgICB7CisgICAgICAgIEhlbHBpbmdHQ1Njb3BlIGhl
bHBpbmdHQ1Njb3BlKCp0aGlzKTsKKyAgICAgICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KTsKKyAgICAgICAgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKyAgICAgICAgc3dlZXBM
YXJnZUFsbG9jYXRpb25zKCk7CisgICAgfQorICAgIAorICAgIGlmIChPcHRpb25zOjpjb2xsZWN0
Q29udGludW91c2x5KCkpCisgICAgICAgIGNvbGxlY3RBc3luYygpOwogICAgIGlmIChIYXNPd25Q
cm9wZXJ0eUNhY2hlKiBjYWNoZSA9IHZtKCktPmhhc093blByb3BlcnR5Q2FjaGUoKSkKICAgICAg
ICAgY2FjaGUtPmNsZWFyKCk7CiB9CkBAIC0xNTU0LDIzICsxNTE1LDkgQEAgdm9pZCBIZWFwOjp3
aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPAogICAgICAgICBvYnNlcnZlci0+d2lsbEdhcmJh
Z2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQgSGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygp
Ci17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFibGVzKCk7Ci19Ci0KIHZvaWQg
SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKQogewotICAgIGlmIChtX2NvbGxlY3Rpb25T
Y29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4pIHsKLSAgICAgICAgbV93cml0ZUJhcnJpZXJC
dWZmZXIuZmx1c2goKnRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fd3JpdGVC
YXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19Ci0KLXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQot
ewotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICBtX3dyaXRlQmFycmll
ckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9CiAKIHZvaWQgSGVhcDo6cHJlcGFyZUZvck1hcmtpbmco
KQpAQCAtMTk1NCw3ICsxOTAxLDcgQEAgYm9vbCBIZWFwOjpjYW5Db2xsZWN0KCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgfHwgbXV0YXRvclN0YXRlKCkgPT0g
TXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCisgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0
b3JTdGF0ZTo6SGVscGluZ0dDKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xOTc2LDEyICsxOTIzLDggQEAgYm9vbCBIZWFwOjppc0N1cnJlbnRUaHJlYWRC
dXN5KCkKICAgICByZXR1cm4gbWF5QmVHQ1RocmVhZCgpIHx8IG11dGF0b3JTdGF0ZSgpICE9IE11
dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0KIAotdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gZG91YmxlLWNvdW50IHRoZSBleHRyYSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJl
dmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rp
b25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4dHJhTWVtb3J5U2l6ZTsKICAg
ICAKICAgICBmb3IgKDs7KSB7CkBAIC0xOTkyLDEyICsxOTM1LDggQEAgdm9pZCBIZWFwOjpyZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbAogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdF
KQotdm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0
YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVk
KHNpemVfdCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRo
ZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlv
bnMuCi0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAm
JiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IHNpemVfdCogY291bnRlciA9ICZtX2V4dGVybmFsTWVtb3J5U2l6ZTsKIAogICAgIGZvciAoOzsp
IHsKQEAgLTIwOTEsNCArMjAzMCwxMSBAQCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29w
UmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8gVVNFKENGKQogCit2b2lkIEhlYXA6Om5vdGlmeUlzU2Fm
ZVRvQ29sbGVjdCgpCit7CisgICAgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOworICAgIGlmIChP
cHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAgICAgIGNvbGxlY3RBc3luYygpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbGxl
Y3Rpb25TY29wZS5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5j
bHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0zNSw3ICszNiw2IEBACiAjaW5jbHVkZSAiTWFya2VkU3Bh
Y2UuaCIKICNpbmNsdWRlICJNdXRhdG9yU3RhdGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0j
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAj
aW5jbHVkZSAiVGlueUJsb29tRmlsdGVyLmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFs
aXplci5oIgpAQCAtNzAsNyArNzAsOSBAQCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNz
IEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Citj
bGFzcyBNYXJrU3RhY2tBcnJheTsKIGNsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xhc3Mg
U2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBA
IC0xMjksNyArMTMxLDggQEAgcHVibGljOgogICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgp
IHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7IH0KICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRo
cmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKLSAgICBjb25zdCBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IoKSBjb25zdCB7IHJldHVybiBtX3Nsb3RWaXNpdG9yOyB9CisgICAg
U2xvdFZpc2l0b3ImIGNvbGxlY3RvclNsb3RWaXNpdG9yKCkgeyByZXR1cm4gKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3I7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsg
cmV0dXJuICptX211dGF0b3JNYXJrU3RhY2s7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdD
QWN0aXZpdHlDYWxsYmFjayogZnVsbEFjdGl2aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CkBAIC0x
NjgsNyArMTcxLDcgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRmlu
YWxpemVyKEpTQ2VsbCosIEZpbmFsaXplcik7CiAgICAgdm9pZCBhZGRFeGVjdXRhYmxlKEV4ZWN1
dGFibGVCYXNlKik7CiAKLSAgICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpIHsgbV9pc1Nh
ZmVUb0NvbGxlY3QgPSB0cnVlOyB9CisgICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsK
ICAgICBib29sIGlzU2FmZVRvQ29sbGVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTYWZlVG9Db2xs
ZWN0OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSGVhcFNuYXBzaG90dGluZygp
IGNvbnN0OwpAQCAtMjAzLDExICsyMDYsMTEgQEAgcHVibGljOgogICAgIC8vIGNhbGwgYm90aCBv
ZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxpbmcgb25seSBvbmUgbWF5IHRyaWdnZXIgY2F0YXN0cm9w
aWMKICAgICAvLyBtZW1vcnkgZ3Jvd3RoLgogICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxv
Y2F0ZWQoc2l6ZV90KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKIAogI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKICAgICAvLyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJz
ZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQgbGl2ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0
YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0
RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5
U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJuYWxNZW1vcnlTaXplOyB9CiAjZW5kaWYKIApAQCAtMzkx
LDYgKzM5NCw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdG9wVGhlV29ybGQoKTsKICAgICB2b2lk
IHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCisgICAgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsK
KyAgICBmcmllbmQgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICAKICAgICB2b2lkIHN0
b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9pZCByZXN1bWVUaGVNdXRhdG9yKCk7CiAgICAgCkBAIC00
MjIsMzEgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3VzcGVuZENvbXBpbGVy
VGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDxDb2xsZWN0
aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKICAgICB2
b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgdm9pZCBzdG9wQWxsb2NhdGlvbigp
OwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAgICAKLSAgICB2b2lkIG1hcmtSb290
cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFya1RvRml4cG9pbnQoZG91YmxlIGdj
U3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
KTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAg
IHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAg
dm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0
KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAgIHZvaWQgdmlzaXRDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlzaXRDb21waWxlcldv
cmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldvcmts
aXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290Vmlz
aXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJik7
Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZp
c2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0SGFuZGxl
U3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFNhbXBsaW5nUHJvZmlsZXIo
KTsKLSAgICB2b2lkIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFNoYWRvd0No
aWNrZW4oKTsKLSAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOwot
ICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lkIG1h
cmtUb0ZpeHBvaW50KEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291
bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CiAKQEAgLTUx
OCw3ICs1MTEsOCBAQCBwcml2YXRlOgogCiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5lVGhy
ZWFkczsKICAgICAKLSAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKIAogICAgIC8vIFdl
IHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMu
IEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBh
bmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1l
bW9yeSBmcm9tCkBAIC01NzIsNyArNTY2LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJr
aW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAg
IE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlx
dWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAgICAgdW5z
aWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1bnNpZ25l
ZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1fcGFy
YWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkBAIC02MDAsNiArNTk1LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8
PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZh
cmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJvb2wgbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgTW9u
b3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENvbGxlY3Rp
b25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7IDAg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNp
b24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJheTo6
TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2ZlclRv
KE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9ICZv
dGhlcik7CisgICAgCisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUg
b3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFkID0g
bV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxs
Kj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1fbnVt
YmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIAor
ICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOworICAgIAorICAgIG90aGVy
Lm1fbnVtYmVyT2ZTZWdtZW50cyArPSBtX251bWJlck9mU2VnbWVudHM7CisgICAgbV9udW1iZXJP
ZlNlZ21lbnRzID0gMDsKKyAgICAKKyAgICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJhY2sg
aW4gdGhlaXIgcGxhY2VzLgorICAgIG1fc2VnbWVudHMucHVzaChteUhlYWQpOworICAgIG90aGVy
Lm1fc2VnbWVudHMucHVzaChvdGhlckhlYWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cysrOwor
ICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIAorICAgIHdoaWxlICghaXNFbXB0
eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFzdCgp
KQorICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQorfQorCiB2
b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3Ro
ZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMuIFRv
IHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrLmgJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xhc3MgTWFy
a1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NTZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtTdGFja0Fy
cmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhl
cik7Ci0gICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBz
aXplX3QgaWRsZVRocmVhZENvdW50KTsKKyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNrQXJy
YXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7CisgICAg
dm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRocmVh
ZENvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDg1MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcsNyArMTM3LDYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0
ZUluKE1hcmtlZAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFi
bG9jay0+aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVl
TGlzdGVkKCkpOwogICAgIAogICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDEyICs4MiwxNCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUm
CiAgICAgLCBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFs
c2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7
CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3Jp
YmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFs
bG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+Cit0
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxs
b2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtz
TW9kZSBtYXJrc01vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBEb2Vz
Tm90TmVlZERlc3RydWN0aW9uICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYg
c3dlZXBNb2RlID09IFN3ZWVwT25seSkpOwogICAgIAogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIApAQCAtOTksNyArMTAxLDcgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgIGlmIChPcHRpb25zOjp1c2VCdW1wQWxs
b2NhdG9yKCkKICAgICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkKICAgICAgICAgJiYgbmV3
bHlBbGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKLSAgICAgICAg
QVNTRVJUKG1hcmtzTW9kZSA9PSBNYXJrc1N0YWxlKTsKKyAgICAgICAgQVNTRVJUKG1hcmtzTW9k
ZSA9PSBNYXJrc1N0YWxlIHx8IGJsb2NrLm1fbWFya3MuaXNFbXB0eSgpKTsKICAgICAgICAgCiAg
ICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxsQWxp
Z24oYmxvY2suYXRvbXMoKSArIG1fZW5kQXRvbSAtIDEpKTsKICAgICAgICAgY2hhciogcGF5bG9h
ZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplKCk7CkBAIC0xMTEsNiArMTEzLDggQEAg
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgc2V0
SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYWxsb2NhdG9yLT5z
ZXRJc0VtcHR5KHRoaXMsIHRydWUpOworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkp
CisgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIEZyZWVMaXN0IHJl
c3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVn
aW4pOwogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3
ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNp
emUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxu
Iik7CkBAIC0xMjMsMTcgKzEyNywxMSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
cGVjaWFsaXplCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwogICAgIHNpemVfdCBjb3VudCA9IDA7
CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9t
KCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAgaWYgKGVt
cHR5TW9kZSA9PSBOb3RFbXB0eQotICAgICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFya3NO
b3RTdGFsZSAmJiBibG9jay5tX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgICAgICB8fCAobmV3
bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0ZWQu
Z2V0KGkpKSkpIHsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAorICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxs
czsKKyAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAgICBI
ZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2NrLmF0
b21zKClbaV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gTmVlZHNEZXN0cnVj
dGlvbiAmJiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1v
ZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpLT5jYWxsRGVzdHJ1Y3Rvcigqdm0o
KSk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKQEAgLTE0
NCwxMiArMTQyLDMzIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUK
ICAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291bnQ7CiAgICAg
ICAgIH0KKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5k
QXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICBpZiAoZW1wdHlNb2RlID09IE5v
dEVtcHR5CisgICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGJs
b2NrLm1fbWFya3MuZ2V0KGkpKQorICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1v
ZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgewor
ICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNE
ZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZykKKyAgICAgICAgICAgIGRlYWRDZWxscy5h
cHBlbmQoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwog
ICAgIH0KLQorICAgIAogICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBuZXdseUFs
bG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCiAgICAgLy8gb3RoZXJ3
aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2ZS4K
ICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRlZE1v
ZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCiAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
ID0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKKyAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgIAorICAgIGlmIChk
ZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmlu
ZykgeworICAgICAgICBmb3IgKHNpemVfdCBpIDogZGVhZENlbGxzKQorICAgICAgICAgICAgaGFu
ZGxlRGVhZENlbGwoaSk7CisgICAgfQogCiAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6
Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdCkKQEAgLTE3NywxMiArMTk2LDE4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0Fs
bG9jYXRlZCh0aGlzKSk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9
PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3Jp
YmJsZU1vZGU8TmVlZHNEZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKLSAgICByZXR1cm4gc3dlZXBI
ZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8RG9lc05vdE5lZWREZXN0cnVjdGlvbj4oc3dlZXBNb2Rl
KTsKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrKCkubV9sb2Nr
LmxvY2soKTsKKyAgICAKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRz
RGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAg
ICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1
Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmc+KHN3ZWVwTW9kZSk7CisgICAgICAgIHJldHVybiBz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzPihzd2VlcE1v
ZGUpOworICAgIH0KKyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8Qmxv
Y2tIYXNOb0Rlc3RydWN0b3JzPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKIHsKICAgICBpZiAoc2NyaWJibGVGcmVlQ2VsbHMoKSkKQEAgLTE5MCw3ICsyMTUsNyBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0RW1wdHlNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFNjcmliYmxlPihzd2Vl
cE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgordGVtcGxhdGU8
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgogRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGUoU3dlZXBN
b2RlIHN3ZWVwTW9kZSkKIHsKICAgICAvLyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0
aGUgb25seSB3YXkgdG8ga25vdyBpZiB0aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkK
QEAgLTIwNSw3ICsyMzAsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhl
bHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQ8Tm90RW1w
dHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlPihzd2VlcE1vZGUpOwogfQogCi10ZW1w
bGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUg
c2NyaWJibGVNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVt
cHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2Rl
PgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RIYXNOZXds
eUFsbG9jYXRlZChTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChoYXNBbnlOZXdseUFs
bG9jYXRlZCgpKQpAQCAtMjEzLDcgKzIzOCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGU8ZW1w
dHlNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZD4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6
RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBsYXRl
PE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCiB7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0yMjEsMTAg
KzI0NiwxNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAg
cmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlPGVtcHR5TW9kZSwgU3dlZXBPbmx5LCBk
ZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlPigpOwogfQog
Ci10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0
ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKQogewotICAgIGlmIChh
cmVNYXJrc1N0YWxlKCkpCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSBzcGFjZSgp
LT5tYXJraW5nVmVyc2lvbigpOworICAgIGJvb2wgbWFya3NBcmVVc2VmdWwgPSAhYmxvY2soKS5h
cmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+aXNN
YXJraW5nKCkpCisgICAgICAgIG1hcmtzQXJlVXNlZnVsIHw9IGJsb2NrKCkubWFya3NDb252ZXlM
aXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmICghbWFy
a3NBcmVVc2VmdWwpCiAgICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9kZSwg
c3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRN
b2RlLCBNYXJrc1N0YWxlPigpOwogICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBNYXJrc05vdFN0YWxlPigpOwogfQpAQCAtMjQxLDI0ICsyNzIsNiBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0
cnVlOwogfQogCi1jbGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFya2Vk
QmxvY2s6OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0
b3IoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9jaykK
LSAgICB7Ci0gICAgfQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwq
IGNlbGwsIEhlYXBDZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1hcmtl
ZEJsb2NrOjpibG9ja0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAgIG1f
YmxvY2stPnNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogbV9ibG9jazsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9j
YXRpbmcoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAgLTI2
NiwxMiArMjc5LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBpZiAo
IWlzRnJlZUxpc3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9yIGFs
bG9jYXRpb24gc2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxyZWFk
eSBkb25lIHN0b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxpc3Qu
YWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAg
IGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwgIlxu
Iik7CisgICAgCiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhlYXAg
aW50cm9zcGVjdGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIgZnJl
ZSBsaXN0IGFyZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAgICAg
Ly8gd2F5IHRvIHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI5NywxNyBA
QCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXdseUFs
bG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgp
LT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3bHlB
bGxvY2F0ZWRGdW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rvcik7
CisgICAgZm9yRWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxs
OjpLaW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxvY2F0
ZWQoY2VsbCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
KyAgICAgICAgfSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0LAog
ICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAi
XG4iKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNE
ZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAgIGNs
ZWFyTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMzMCwxNCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxv
Y2F0aW5nIVxuIik7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykp
OwogICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXdseUFs
bG9jYXRlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRo
ZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5z
IHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9j
YXRpb24uCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICszODEs
OCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAgICAg
aWYgKGhhbmRsZSgpLmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAgICAg
IHx8ICFtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikpIHsK
KyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMp
LCAiOiBDbGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsKICAg
ICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlzIGFs
cmVhZHkgcmVjb2duaXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9jayBk
aWQgbm90IHN1cnZpdmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsgYml0
cyB0aGUgb2xkIGZhc2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBvc3Np
YmxlIGZvciBzdWNoIGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVwLXRv
LQpAQCAtMzYyLDYgKzM5MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhI
ZWFwVmUKICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAgICBt
X21hcmtzLmNsZWFyQWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4iKTsK
ICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+bmV3
bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxsb2Nh
dGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8vIE1l
cmdlIHRoZSBjb250ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2UgZ2V0
IHRoZSBmdWxsIHNldCBvZiBiaXRzCkBAIC00MjksNyArNDYwLDcgQEAgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhp
cyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCFcbiIpOwogICAg
IEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSBmYWxzZTsKLSAg
ICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CisgICAgYWxsb2NhdG9y
KCktPmF0b21pY1NldEFuZENoZWNrSXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CiB9CiAKIHNpemVf
dCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDMwICsxOTAsMzIg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgdm9pZCopOwog
ICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlPgorICAgICAgICBlbnVt
IFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHsgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBCbG9ja0hhc0Rl
c3RydWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nIH07Cisg
ICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZT4KICAgICAgICAg
RnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlID0gU3dlZXBP
bmx5KTsKICAgICAgICAgICAgIAogICAgICAgICBlbnVtIFNjcmliYmxlTW9kZSB7IERvbnRTY3Jp
YmJsZSwgU2NyaWJibGUgfTsKICAgICAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVjdGlv
bk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RF
bXB0eU1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAgICBl
bnVtIEVtcHR5TW9kZSB7IElzRW1wdHksIE5vdEVtcHR5IH07CiAgICAgICAgIAotICAgICAgICB0
ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAgICAg
ICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+
CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQoU3dl
ZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTmV3bHlBbGxvY2F0
ZWRNb2RlIHsgSGFzTmV3bHlBbGxvY2F0ZWQsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQgfTsK
ICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBT
Y3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlN
b2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1v
ZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9k
ZSA9IFN3ZWVwT25seSk7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3
ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9k
ZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJlZUxp
c3Qgc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGVudW0g
TWFya3NNb2RlIHsgTWFya3NTdGFsZSwgTWFya3NOb3RTdGFsZSB9OwogICAgICAgICAKLSAgICAg
ICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJi
bGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8
RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUs
IE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgogICAgICAgICBGcmVlTGlzdCBzcGVjaWFs
aXplZFN3ZWVwKCk7CiAgICAgICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6
OnByZXBhcmVGb3JNYXJraW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGlu
ZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3Io
CiAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0
YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3Js
ZFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAy
MDg1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlNDZWxs
KiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQot
ICAgIDogbV9zdGFjaygpCi0gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRlc0Nv
cGllZCgwKQorICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgwKQog
ICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lvbihN
YXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNpdG9y
OjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkK
IHsKLSAgICBjbGVhck1hcmtTdGFjaygpOworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQogCiB2
b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcgQEAg
dm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6
cmVzZXQoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7CiAg
ICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlz
aXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAgICBB
U1NFUlQoIW1fY3VycmVudENlbGwpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRDZWxs
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90Vmlz
aXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAgbV9j
b2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9CiAK
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZl
Um9vdHMpCkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlNDZWxs
T3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAgICBq
c0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVuZFRv
TWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNhdGUg
dGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBjb25j
dXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBjeWNs
ZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmplY3Qg
dGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0g
ICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+c2V0
Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3RhY2so
Y29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWRD
b25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0gICAg
QVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxsLT5j
ZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5jZWxs
U3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3RlTWFy
a2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2UgdGhl
IEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1dAot
ICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdDLgog
ICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5jZWxs
U2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVjdG9y
U3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0
b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNrLmFw
cGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25zdCB2
b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTYsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVudENl
bGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxsLT5j
ZWxsU3RhdGUoKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgZGF0YUxvZygiVmlzaXRpbmcg
IiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIGlmIChtX2lzVmlzaXRpbmdNdXRhdG9yU3Rh
Y2spCisgICAgICAgICAgICBkYXRhTG9nKCIgKG11dGF0b3IpIik7CisgICAgICAgIGRhdGFMb2co
IlxuIik7CisgICAgfQogICAgIAotICAgIC8vIFRoZXJlIGlzIG5vIHJhY2UgaGVyZSAtIHRoZSBj
ZWxsIHN0YXRlIGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LiBHcmV5IG9iamVjdHMgY2FuIG9ubHkg
YmUKLSAgICAvLyB2aXNpdGVkIGJ5IG9uZSBtYXJraW5nIHRocmVhZC4gTmVpdGhlciB0aGUgYmFy
cmllciBub3IgbWFya2luZyB3aWxsIGNoYW5nZSB0aGUgc3RhdGUgb2YgYW4KLSAgICAvLyBvYmpl
Y3QgdGhhdCBpcyBhbHJlYWR5IGdyZXkuCi0gICAgQVNTRVJUKG1fb2xkQ2VsbFN0YXRlID09IENl
bGxTdGF0ZTo6T2xkR3JleSB8fCBtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkp
OworICAgIC8vIEZ1bm55IHN0b3J5OiBpdCdzIHBvc3NpYmxlIGZvciB0aGUgb2JqZWN0IHRvIGJl
IGJsYWNrIGFscmVhZHksIGlmIHdlIGJhcnJpZXIgdGhlIG9iamVjdCBhdAorICAgIC8vIGFib3V0
IHRoZSBzYW1lIHRpbWUgdGhhdCBpdCdzIG1hcmtlZC4gVGhhdCdzIGZpbmUuIEl0J3MgYSBnbmFy
bHkgYW5kIHN1cGVyLXJhcmUgcmFjZS4gSXQncworICAgIC8vIG5vdCBjbGVhciB0byBtZSB0aGF0
IGl0IHdvdWxkIGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0byBiYWlsIGhlcmUgaWYgdGhlIG9i
amVjdCBpcyBhbHJlYWR5CisgICAgLy8gYmxhY2suCiAgICAgCiAgICAgY2VsbC0+c2V0Q2VsbFN0
YXRlKENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwogICAgIApAQCAtMzI2LDIzICszMzMs
MjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIH0KICAg
ICAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkgewotICAgICAgICBp
ZiAobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KQorICAgICAgICBpZiAoIW1f
aXNWaXNpdGluZ011dGF0b3JTdGFjaykKICAgICAgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRl
ci0+YXBwZW5kTm9kZShjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKICAgICB9CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQordm9pZCBTbG90VmlzaXRvcjo6
ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkm
IHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4gYWZm
b3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRpbmcg
aXMgbm90IHByb2ZpdGFibGUuCiAKICAgICAvLyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJlYWQg
cmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgaWYgKG1fc3RhY2su
c2l6ZSgpIDwgMikKKyAgICBpZiAoZnJvbS5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFyZWQgd29yayBxdWV1ZWQgdXAsIGJl
IGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhhdCBkb25hdGluZyBtb3JlIGlzIG5v
dCBwcm9maXRhYmxlLgotICAgIGlmIChtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgpKQor
ICAgIGlmICh0by5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3JlIGNv
bnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lIHRoYXQgYW5v
dGhlcgpAQCAtMzUyLDI2ICszNTksNDMgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25Q
YXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRo
YXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAgbV9zdGFjay5k
b25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2spOworICAgIGZyb20uZG9u
YXRlU29tZUNlbGxzVG8odG8pOwogCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCit2b2lkIFNs
b3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sKKyAgICBkb25hdGVLbm93blBhcmFs
bGVsKG1fY29sbGVjdG9yU3RhY2ssICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2sp
OworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9tdXRhdG9yU3RhY2ssICptX2hlYXAubV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9ub3Rv
bmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAg
Ci0gICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBtX3N0YWNrLnJlZmls
bCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1O
dW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSAm
JiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fc3RhY2sucmVtb3Zl
TGFzdCgpKTsKKyAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAhbV9t
dXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAgICAg
ICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2NvbGxl
Y3RvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNr
ID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6
Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX2NvbGxlY3RvclN0YWNr
LmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbihtX2NvbGxlY3RvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9tdXRhdG9yU3Rh
Y2sucmVmaWxsKCk7CisgICAgICAgICAgICAvLyBXZSBrbm93IGZvciBzdXJlIHRoYXQgd2UgYXJl
IHZpc2l0aW5nIG9iamVjdHMgYmVjYXVzZSBvZiB0aGUgYmFycmllciwgbm90IGJlY2F1c2Ugb2YK
KyAgICAgICAgICAgIC8vIG1hcmtpbmcuIE1hcmtpbmcgd2lsbCB2aXNpdCBhbiBvYmplY3QgZXhh
Y3RseSBvbmNlLiBUaGUgYmFycmllciB3aWxsIHZpc2l0IGl0CisgICAgICAgICAgICAvLyBwb3Nz
aWJseSBtYW55IHRpbWVzLCBhbmQgYWx3YXlzIGFmdGVyIGl0IHdhcyBhbHJlYWR5IG1hcmtlZC4K
KyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5z
QmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291
bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3RhY2su
cmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfQogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7
CiAgICAgfQogICAgIAogICAgIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERy
YWluTW9kZSkKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6ZHJh
aW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1Rp
bWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKQEAg
LTM5Miw0OCArNDE2LDYwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFy
ZWQKICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBpcyBy
ZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKICAgICAgICAgICAgICAgICAvLyBm
b3IgdXMgdG8gZG8uCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OworICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2su
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRD
b2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGltZSBm
b3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJr
aW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1
bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
d2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91dCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2hhcmVkRHJh
aW5Nb2RlID09IFNsYXZlRHJhaW4pOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQo
dGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIGRl
dGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAg
ICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAgICAgICAgICAgICAgIG1faGVhcC5t
X21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KAotICAgICAgICAgICAgICAgICAgICBsb2Nr
LAorICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0
VW50aWwoCisgICAgICAgICAgICAgICAgICAgIGxvY2ssIHRpbWVvdXQsCiAgICAgICAgICAgICAg
ICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+
aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8gSWYg
c28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgaWYgKG1faGVh
cC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgK
LSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNr
LnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMp
OworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAg
ICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1i
ZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBk
cmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAgICB9CiB9CiAKQEAgLTQ1Myw3ICs0
ODksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiBib29sIFNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAgICBB
U1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNF
bXB0eSgpKTsKICAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9vdCk7
CiB9CiAKQEAgLTQ2NywxMyArNTAyLDYgQEAgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRhaW5z
T3BhcXVlUm9vdAogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1pbnQgU2xvdFZpc2l0
b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUp
OwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1faGVh
cC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
CkBAIC00OTcsMTUgKzUyNSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogICAgIGRv
bmF0ZUtub3duUGFyYWxsZWwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1l
b3V0KQogewogICAgIGRvbmF0ZSgpOwotICAgIGRyYWluKCk7CisgICAgZHJhaW4odGltZW91dCk7
CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogewotICAgIEFTU0VS
VCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hl
biBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19n
dWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwogICAgICAgICBmb3Ig
KGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQpAQCAtNTI2LDEwICs1NTMsOSBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGCiAgICAgICAgIG1faGVhcC5tX3VuY29u
ZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHko
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Cit2b2lk
IFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9yIChj
b25zdCBKU0NlbGwqIGNlbGwgOiBtYXJrU3RhY2soKSkKLSAgICAgICAgZGF0YUxvZygqY2VsbCwg
IlxuIik7CisgICAgb3V0LnByaW50KCJDb2xsZWN0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAoY29s
bGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0YXRvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChtdXRh
dG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA4NTIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVkZSAi
TWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgorI2luY2x1ZGUgPHd0Zi9N
b25vdG9uaWNUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Nyw5ICs1OCwxMSBAQCBw
dWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoSGVhcCYpOwogICAgIH5TbG90VmlzaXRvcigpOwogCi0g
ICAgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KLSAgICBj
b25zdCBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjazsg
fQotCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygp
IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIGNv
bGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fbXV0YXRvclN0YWNrOyB9CisgICAgCiAgICAgVk0mIHZtKCk7CiAgICAgY29uc3QgVk0mIHZt
KCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwpAQCAtODQsMjQgKzg3LDIzIEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25z
dDsKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29uc3Q7
Ci0gICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1
cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0KIAog
ICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwotICAgIHZvaWQg
Y2xlYXJNYXJrU3RhY2soKTsKKyAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAgc2l6
ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0gICAg
c2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQogICAg
IHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CiAKICAg
ICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQgZHJhaW4oKTsKLSAgICB2b2lkIGRvbmF0ZUFuZERy
YWluKCk7CisgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUg
dGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIAogICAgIGVudW0gU2hh
cmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJhaW4gfTsKLSAgICB2b2lkIGRyYWlu
RnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOworICAgIGVudW0gY2xhc3MgU2hhcmVkRHJhaW5S
ZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9OworICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWluRnJv
bVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25p
Y1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsK
ICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKQEAgLTEyNCw2ICsx
MjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBj
b25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKKyAgICB2b2lkIG1lcmdlT3BhcXVl
Um9vdHNJZk5lY2Vzc2FyeSgpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxl
bE1vZGVFbmFibGVyOwogICAgIApAQCAtMTQxLDIxICsxNDUsMjMgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogICAgIHZvaWQgYXBwZW5kVG9NYXJrU3Rh
Y2soQ29udGFpbmVyVHlwZSYsIEpTQ2VsbCopOwogICAgIAorICAgIHZvaWQgYXBwZW5kVG9NdXRh
dG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgbm90ZUxpdmVBdXhp
bGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nhcnko
KTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKIAogICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtub3du
UGFyYWxsZWwoKTsKKyAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkm
IGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX3N0YWNr
OworICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNrQXJy
YXkgbV9tdXRhdG9yU3RhY2s7CiAgICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAvLyBI
YW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFnZSBj
b2xsZWN0b3IuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVfdCBt
X2J5dGVzQ29waWVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgYm9vbCBtX2lzSW5Q
YXJhbGxlbE1vZGU7CiAgICAgCkBAIC0xNjUsNyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAgIEhl
YXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNuYXBzaG90QnVpbGRlciB7IG51bGxwdHIgfTsKICAg
ICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgQ2VsbFN0YXRlIG1fb2xk
Q2VsbFN0YXRlOworICAgIGJvb2wgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrIHsgZmFsc2UgfTsK
IAogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMDg1MjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTUgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFk
ZFVuY29uZGl0aW9uYQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0
b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZSk7
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRv
cjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAo
KS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAg
ICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA4NTIw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRT
dG9yZVN0cnVjdHVyZQogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFIU3RydWN0dXJlSURJ
c1ZhbGlkKTsKICAgICAgICAgY29ycmVjdFN0cnVjdHVyZS5saW5rKCZqaXQpOwogCi0gICAgICAg
IEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgSnVtcCBjb3Jy
ZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKSk7CiAgICAg
ICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJbmRleGluZ1R5cGVJc1ZhbGlkKTsKICAgICAgICAg
Y29ycmVjdEluZGV4aW5nVHlwZS5saW5rKCZqaXQpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw3ICs5OTYsNyBA
QCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgICAgIHN0b3Jl
MzIoaW5kZXhpbmdUeXBlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSk7CiAgICAgfQogCi0gICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKKyAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKIH0KIAog
aW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdp
dGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjcsOCArMjI2Nyw4IEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0g
b2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5KTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgcmVzdWx0KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBv
YmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjI3Nyw4ICsyMjc3LDggQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCi0gICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKLSAgICBvYmplY3Qt
PnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAgICBC
dXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2
bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7Cisg
ICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg1MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3Bl
KEluc3RydWN0aQogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVt
aXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0
dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwogICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNT
Y29wZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2so
cmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnN0YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAg
ICBpZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkg
JiYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlz
IHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0
ICsxMDM3LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAg
ICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNl
dCoqPigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9w
ZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQp
OworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAg
Y2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5
cGUpKTsKICAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3Qs
IHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2Ug
RHluYW1pYzoKQEAgLTExNTcsMTEgKzExNTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X2FyZ3VtZW50cyhJbnN0cgogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKICAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKLSAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBz
dG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZz
ZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQog
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwODUyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
d29ya2luZyBjb3B5KQpAQCAtODg3LDcgKzg4Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxs
QW5kSW5kZXhpbmdUeXBlLCAKICAgICBjb25zdCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhp
bmdUeXBlIAogICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAog
ICAgIHN0b3JlaSBzY3JhdGNoLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtw
cm9maWxlXQotICAgIGxvYWRiIEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5n
VHlwZQorICAgIGxvYWRiIEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRl
eGluZ1R5cGUKIGVuZAogCiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBz
bG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRK
SVRMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
Y3VycmVudEpJVExvY2suaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUg
Kzk0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ09OQ1VSUkVO
VF9KSVQpCiAgICAgRGVmZXJHQyBtX2RlZmVyR0M7Ci0jZWxzZQotICAgIHN0cnVjdCBOb0RlZmVy
IHsKLSAgICAgICAgTm9EZWZlcihIZWFwJiBoZWFwKSA6IG1faGVhcChoZWFwKSB7IH0KLSAgICAg
ICAgSGVhcCYgbV9oZWFwOwotICAgIH07Ci0gICAgTm9EZWZlciBtX2RlZmVyR0M7Ci0jZW5kaWYK
IH07CiAKIGNsYXNzIENvbmN1cnJlbnRKSVRMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpJVExv
Y2tlckJhc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0xv
Y2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7
CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4
MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgotc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBFOwot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAw
Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgPSAw
eDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgwRTsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAgICAg
ICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAg
ICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAg
ICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3Jh
Z2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3Owog
CiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlw
ZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRo
ZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNj
ZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxkIG9m
IEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAvLyBM
aXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgyLDYg
QEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBvZiBh
bGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwgTWF5
SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGluZ1R5
cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+IElu
ZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODUyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2Fz
ZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0
aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
aW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6OnVu
c2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVycmVk
IGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMgdGhl
IGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQgd2ls
bCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBKU0NlbGw6OkludGVybmFsTG9ja2VyIGxv
Y2tlcih0aGlzKTsKICAgICAKICAgICBpZiAobW92ZUZyb250ICYmIHN0b3JhZ2UtPm1faW5kZXhC
aWFzID49IGNvdW50KSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFn
ZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAgc3Rv
cmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1f
aW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVj
dG9yTGVuZ3RoICsgY291bnQpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9IGVsc2Ug
aWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAgICAg
ICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAgIGVs
c2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKHZtLCBkZWZlckdDLCBtb3ZlRnJvbnQsIGNvdW50
KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFy
cmF5U3RvcmEKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAg
ICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5kZXhdLmNsZWFyKCk7CisgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZp
c2lvbiAyMDg1MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1By
b3h5KCkgY29uc3Q7CiAgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25zdDsK
ICAgICBib29sIGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7CisgICAgCisgICAgLy8gRWFjaCBj
ZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2suIEN1cnJlbnRseSBpdCdzIHNpbXBseSBhdmFpbGFibGUg
Zm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4gSXQncworICAgIC8vIGEgZnVsbC1ibG93biBXVEY6Okxv
Y2suIE5vdGUgdGhhdCB0aGlzIGxvY2sgaXMgY3VycmVudGx5IHVzZWQgaW4gSlNBcnJheSBhbmQg
dGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRlcmluZyB3aXRoIHRoZSBTdHJ1Y3R1cmUgbG9jayBpcyB0
aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LgorICAgIHZvaWQg
bG9ja0ludGVybmFsTG9jaygpOworICAgIHZvaWQgdW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAg
CisgICAgY2xhc3MgSW50ZXJuYWxMb2NrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50ZXJu
YWxMb2NrZXIoSlNDZWxsKiBjZWxsKQorICAgICAgICAgICAgOiBtX2NlbGwoY2VsbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9jZWxsLT5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIH5JbnRlcm5hbExvY2tlcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSlNDZWxsKiBtX2NlbGw7CisgICAgfTsKIAogICAgIEpTVHlw
ZSB0eXBlKCkgY29uc3Q7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2MoKSBj
b25zdDsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Q7CiAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUlEOyB9CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE2Nyw2ICsxOTEsMTYgQEAgcHVibGlj
OgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0ZTsg
fQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNv
bnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRlID0gZGF0YTsgfQorICAgIAorICAg
IGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0YXRl
IG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RG
OjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0YXRl
LCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0YXRlIGF0b21pY0NvbXBhcmVFeGNoYW5n
ZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9uZygm
bV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQogCiAgICAgc3RhdGljIHB0
cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpAQCAtMTgzLDkgKzIxNywxMiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAv
LyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIHVzZSBhIENBUyBsb29wLCBzaW5j
ZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQgdXNpbmcgQ0FTCisgICAgLy8gZnJvbSBvdGhlciB0aHJl
YWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwgbG9jay4gT25lIGV4Y2VwdGlvbjogeW91IGRvbid0IG5l
ZWQgdGhlIENBUyBpZiB0aGUKKyAgICAvLyBvYmplY3QgaGFzIG5vdCBlc2NhcGVkIHlldC4KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlQW5kTWlz
Yyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQpAQCAt
MjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4
dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci0gICAgSW5kZXhpbmdU
eXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZUFuZE1p
c2M7IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgQ0FTLgogICAgIEpTVHlw
ZSBtX3R5cGU7CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAgIENl
bGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyAr
NDcsNyBAQCBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlubGlu
ZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9zdHJ1
Y3R1cmVJRChzdHJ1Y3R1cmUtPmlkKCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpKQorICAgICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkpCiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5p
bmxpbmVUeXBlRmxhZ3MoKSkKICAgICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUp
CkBAIC03NCw3ICs3NCw3IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHYKICAgICBpZiAoc3RydWN0dXJlKSB7CiAjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmVJRCA9
IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAgICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpOworICAgICAgICBtX2luZGV4aW5nVHlwZUFuZE1pc2MgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKICAgICAgICAgbV90eXBlID0gc3RydWN0
dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKICAgICAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKQEAg
LTkxLDkgKzkxLDE0IEBAIGlubGluZSBKU1R5cGUgSlNDZWxsOjp0eXBlKCkgY29uc3QKICAgICBy
ZXR1cm4gbV90eXBlOwogfQogCitpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlQW5kTWlzYygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsK
K30KKwogaW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlOworICAgIHJldHVybiBpbmRleGluZ1R5cGVBbmRN
aXNjKCkgJiBBbGxBcnJheVR5cGVzOwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBKU0NlbGw6OnN0
cnVjdHVyZSgpIGNvbnN0CkBAIC0xOTUsMTcgKzIwMCwyNyBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6
OmlzQVBJVmFsdWVXcmFwcGVyKCkgCiAgICAgcmV0dXJuIG1fdHlwZSA9PSBBUElWYWx1ZVdyYXBw
ZXJUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorQUxXQVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0
dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCkgPT0gdGhpcy0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpKTsKICAgICBB
U1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgpCiAgICAgICAgIHx8IHRoaXMtPnN0cnVjdHVyZSgpLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8IEhl
YXA6OmhlYXAodGhpcyktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlLT5pZCgpKSA9
PSBzdHJ1Y3R1cmUpOwotICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0
dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlw
ZUZsYWdzKCk7CiAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKLSAg
ICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5kZXhp
bmdUeXBlIG5ld0luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpOworICAgIGlmIChtX2luZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5kZXhpbmdU
eXBlKSB7CisgICAgICAgIEFTU0VSVCghKG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJheVR5cGVz
QW5kSGlzdG9yeSkpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmRleGluZ1R5
cGUgb2xkVmFsdWUgPSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJbmRleGlu
Z1R5cGUgbmV3VmFsdWUgPSAob2xkVmFsdWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpIHwg
c3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAgICAgICBp
ZiAoV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGluZ1R5cGVB
bmRNaXNjLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7
CiB9CiAKIGlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNv
bnN0CkBAIC0yODQsMTEgKzI5OSwyNiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0cnVj
dG9yKFZNJiB2CiAgICAgaWYgKGlzWmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQoc3RydWN0dXJlSUQoKSk7Ci0gICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJl
SXNJbW1vcnRhbCkKLSAgICAgICAgc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRh
YmxlLmRlc3Ryb3kodGhpcyk7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAm
IFN0cnVjdHVyZUlzSW1tb3J0YWwpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVu
Y3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAg
ICAgZGVzdHJveSh0aGlzKTsKKyAgICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0Kj4odGhpcyktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMp
OwogICAgIHphcCgpOwogfQogCitpbmxpbmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5hbExvY2so
KQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21p
YzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdU
eXBlTG9ja0FsZ29yaXRobTo6bG9jaygqbG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6
dW5sb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9
IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1p
c2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzExMiwyOCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAgICAgLy8g
TWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAg
ICAKLSAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0Y2ggKHRo
aXMtPmluZGV4aW5nVHlwZSgpKSB7CisKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
PnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lO
REVYSU5HX1RZUEVTOiB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHByb3RlY3Qg
Q29udGlndW91cy0+QXJyYXlTdG9yYWdlIHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQgbWFrZSB0
aGF0CisgICAgICAgIC8vIHJhY2Ugd29yayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAgIEpTQ2Vs
bDo6SW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgICAgICBJbmRleGluZ1R5cGUgbmV3
VHlwZSA9IHRoaXMtPmluZGV4aW5nVHlwZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0aGlzLT5i
dXR0ZXJmbHkoKTsKKyAgICAgICAgc3dpdGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZh
bHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIEFM
TF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQgQEAgdm9p
ZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZs
eSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5
LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBXZSB3YW50
IHRvIGRlZmVuZCBhZ2FpbnN0IG11bHRpcGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhlIG11dGF0
b3I6CisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVyZmx5IGFu
ZCB0aGVuIGluc3RhbGwgYSBzdHJ1Y3R1cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8vICAgcHJv
cGVydGllcy4gVGhpcyB0cml2aWFsbHkgd29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIG11
dGF0ZSB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBzdHJ1Y3R1
cmUgbG9jayBmb3IKKyAgICAvLyAgIGRpY3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAvLyAtIFRo
ZSBidXR0ZXJmbHkgY291bGQgc2hyaW5rLCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiBpZiB0
aGUgb2JqZWN0IHdhcyBhIGRpY3Rpb25hcnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlzIG1lYW5z
IHRoYXQgd2Ugd291bGQgZ2V0IHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNxdWlyZSBh
IGxvY2suIFRoYXQKKyAgICAvLyAgIHRyaXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxkIGxvYWQg
dGhlIHN0cnVjdHVyZSBiZWZvcmUgdGhlIG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5CisgICAg
Ly8gICBhbmQgdGhlbiBsb2FkIHRoZSBidXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBXZSBwcm90
ZWN0IGFnYWluc3QgdGhpcyBjYXNlIGJ5IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3RydWN0dXJl
IGEgc2Vjb25kIHRpbWUgYmVmb3JlIHNjYW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMgbWVhbnMg
dGhhdCB0aGUgYnV0dGVyZmx5CisgICAgLy8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVyZmx5IHRo
YXQgdGhlIG11dGF0b3IgaGFkIGluc3RhbGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5nIHRoZQor
ICAgIC8vICAgc3R1cmN0dXJlLiBTbyBpZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBhIG5vbi1k
aWN0aW9uYXJ5IHRoZW4gdGhlIGJ1dHRlcmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBoYXZlIGJl
ZW4gc2hydW5rLgorICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9u
YXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkg
eworICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisgICAgICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOworICAgICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1Y3R1cmUt
PmlkKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBi
dXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAg
ICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdh
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwxNSArMjM5
LDI1IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAg
ICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwot
ICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAg
aWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRv
ciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAg
Ym9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAo
d2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIGVs
c2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9h
ZEZlbmNlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0
b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFnZVNp
emUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2Uo
KSwgc3RvcmFnZVNpemUpOwotCisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVj
dHVyZS0+bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2
aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0ZXJmbHlX
aXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAg
CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03MzEsNyAr
Nzc3LDkgQEAgQnV0dGVyZmx5KiBKU09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNy
ZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlVW5kZWNpZGVkKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJu
IG5ld0J1dHRlcmZseTsKIH0KIApAQCAtNzQyLDcgKzc5MCw5IEBAIENvbnRpZ3VvdXNKU1ZhbHVl
cyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpOwot
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICBy
ZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAtNzUzLDcgKzgw
Myw5IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWEKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAg
ICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSk7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZs
eSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5l
d0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJl
dHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtNzY0LDcgKzgx
Niw5IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAg
ICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpT
VmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9u
OjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
bmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
CiB9CiAKQEAgLTc5Nyw3ICs4NTEsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVB
cnJheVN0b3JhCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3Jh
Z2VCdXR0ZXJmbHkodm0sIHRoaXMsIHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1f
YnV0dGVyZmx5LmdldCgpKTsKICAgICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dl
c3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg4
MCw3ICs5MzYsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAg
ICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1
cmUpOwogICAgIHJldHVybiBzdG9yYWdlOwogfQogCkBAIC05MzUsNyArOTkzLDkgQEAgQXJyYXlT
dG9yYWdlKiBKU09iamVjdDo6Y29udmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdTdG9yYWdlOwogfQogCkBAIC05ODEsNyArMTA0MSw5IEBAIEFycmF5U3RvcmFnZSogSlNP
YmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdT
dHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOwor
ICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFn
ZTsKIH0KIApAQCAtMTAwNiw3ICsxMDY4LDIyIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNv
bnZlcnRDb250aWd1b3UKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJh
bnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKworICAgIC8vIFRoaXMgaGFzIGEgY3JhenkgcmFj
ZSB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gV2hlbiBjaGFuZ2luZyB0aGUgYnV0dGVyZmx5
IGFuZCBzdHJ1Y3R1cmUsCisgICAgLy8gdGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0cnVj
dHVyZSBsYXN0LiBUaGUgY29sbGVjdG9yIHdpbGwgYWx3YXlzIHJlYWQgdGhlIHN0cnVjdHVyZQor
ICAgIC8vIGZpcnN0LiBXZSBwcm9iYWJseSBoYXZlIHRvIGZvbGxvdyB0aGF0IGNvbnZlbnRpb24g
aGVyZSBhcyB3ZWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvcgorICAgIC8vIHdpbGwg
c29tZXRpbWVzIHNlZSB0aGUgbmV3IGJ1dHRlcmZseSAodGhlIG9uZSB3aXRoIEFycmF5U3RvcmFn
ZSkgd2l0aCB0aGUgb25seSBzdHJ1Y3R1cmUgKHRoZQorICAgIC8vIG9uZSB0aGF0IHNheXMgdGhh
dCB0aGUgYnV0dGVyZmx5IGlzIENvbnRpZ3VvdXMpLiBXaGVuIHNjYW5uaW5nIENvbnRpZ3VvdXMs
IHRoZSBjb2xsZWN0b3Igd2lsbAorICAgIC8vIG1hcmsgd29yZCBhdCBhZGRyZXNzZXMgZ3JlYXRl
ciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBidXR0ZXJmbHkgcG9pbnRlciwgdXAgdG8gdGhlIHB1Ymxp
Y0xlbmd0aAorICAgIC8vIGluIHRoZSBidXR0ZXJmbHkuIEJ1dCBhbiBBcnJheVN0b3JhZ2UgaGFz
IHNvbWUgbm9uLXBvaW50ZXIgaGVhZGVyIGRhdGEgYXQgbG93IHBvc2l0aXZlCisgICAgLy8gb2Zm
c2V0cyBmcm9tIHRoZSBidXR0ZXJmbHkgLSBzbyB3aGVuIHRoaXMgcmFjZSBoYXBwZW5zLCB0aGUg
Y29sbGVjdG9yIHdpbGwgc3VyZWx5IGNyYXNoCisgICAgLy8gYmVjYXVzZSBpdCB3aWxsIGZhaWwg
dG8gZGVjb2RlIHR3byBjb25zZWN1dGl2ZSBpbnQzMnMgYXMgaWYgaXQgd2FzIGEgSlNWYWx1ZS4K
KyAgICAvLworICAgIC8vIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRoZSBKU0NlbGwgbG9jayBmb3Ig
dGhpcyBwdXJwb3NlIQorICAgIAorICAgIEludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAg
LTE0NjgsNyArMTU0NSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCog
Y2UKIAogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXIm
LCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpc09i
amVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOwogCkBAIC0yNzI1LDcgKzI4
MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytp
KQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0u
Y2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9y
TGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0yNzQyLDcgKzI4MjAsOCBAQCBib29sIEpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0g
ICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkp
OworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNzYyLDYgKzI4NDEsNyBAQCBi
b29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgCiAgICAgdW5zaWdu
ZWQgYXZhaWxhYmxlT2xkTGVuZ3RoID0KICAgICAgICAgQnV0dGVyZmx5OjphdmFpbGFibGVDb250
aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7Cisg
ICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBudWxscHRyOwogICAgIGlmIChhdmFpbGFibGVP
bGRMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUg
c29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNhdXNlZCBpbnRlcm5h
bAogICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpvYnMgcmlnaHQsIHRo
aXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNzCkBAIC0yNzc2LDE3
ICsyODU2LDI0IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAg
ICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAg
ICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgICAgICBuZXdCdXR0ZXJm
bHkgPSBidXR0ZXJmbHk7CiAgICAgfQogCi0gICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgo
bmV3VmVjdG9yTGVuZ3RoKTsKLQogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rv
ckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV0gPSBQTmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8ZG91Ymxl
PigpW2ldID0gUE5hTjsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBv
bGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBidXR0ZXJmbHkt
PmluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KClbaV0uY2xlYXIoKTsKKyAg
ICB9CisKKyAgICBpZiAobmV3QnV0dGVyZmx5KSB7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVj
dG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBidXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtMjgwMiwxMiArMjg4OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9j
YXRlQW5kU2hyaW5rQnV0dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXko
dm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7
Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQ
dWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5KiBK
U09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6
ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVT
dG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAgIEFT
U0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKQEAgLTMwOTIsMTUgKzMxODAsMzMgQEAgdm9pZCBK
U09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdgogICAgICAgICB2bSwgU3RydWN0dXJl
Ojp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVm
ZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZs
eUFmdGVyRmxhdHRlbmluZyhWTSYgdm0sIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwg
c2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRl
cmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3Jl
LCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IHRoaXMt
PmJ1dHRlcmZseVByZUNhcGFjaXR5KCk7Ci0gICAgdm9pZCogY3VycmVudEJhc2UgPSBidXR0ZXJm
bHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwotICAgIHZvaWQq
IG5ld0Jhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5
QmVmb3JlKTsKKyAgICAvLyBUaGlzIGNvdWxkIGludGVybGVhdmUgdmlzaXRDaGlsZHJlbiBiZWNh
dXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBjb3VsZCBoYXZlIGJlZW4gYSBub24KKyAgICAvLyBkaWN0
aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBCdXQsIHdlIGFy
ZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRpbmcKKyAgICAvLyB0aGUgc3RydWN0dXJlJ3MgbG9jayBy
aWdodCBub3csIGFuZCB0aGF0IGhlbHBzIGEgYml0LgorICAgIAorICAgIEJ1dHRlcmZseSogb2xk
QnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5Owor
ICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4
aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKKyAgICBpZiAoVU5MSUtFTFko
aGFzSW5kZXhpbmdIZWFkZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gb2xkQnV0dGVyZmx5
LT5pbmRleGluZ0hlYWRlcigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBwcmVDYXBhY2l0eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
ID0gMDsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6
Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwgdGhpcywgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFj
aXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7
CiAKLSAgICBtZW1tb3ZlKG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCB0aGlzLT5idXR0ZXJmbHlUb3Rh
bFNpemUoKSk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBC
dXR0ZXJmbHk6OmZyb21CYXNlKG5ld0Jhc2UsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0
eUFmdGVyKSk7CisgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJhc2UocHJl
Q2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQqIG5ld0Jhc2UgPSBu
ZXdCdXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QmVmb3JlKTsK
KworICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
cHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBp
bmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50MzJf
dCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAgICBi
b29sIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRp
Y1Byb3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVydGll
cyhFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091
dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAg
IHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5
Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRPZkxp
bmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAgICAg
CisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNoYW5n
ZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZvaWQg
c2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4LDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25h
cnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0
ZXJGbGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qg
b3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxh
dHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkg
Y29uc3QKICAgICB7CkBAIC0xMjA1LDE0ICsxMjA0LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OmlzV2l0aFNjb3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlwZTsK
IH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLXsKLSAgICBB
U1NFUlQoc3RydWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0aGlz
KSkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKLSAgICBzZXRT
dHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlKTsKQEAgLTEyMjAsNyArMTIxMSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRT
dHJ1Y3R1cmUoVk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsK
IH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZvaWQgSlNPYmpl
Y3Q6OnNldEJ1dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTEyODIsNyArMTI3Myw3
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW4KICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdCh2
bSwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBnZXRQcm9wZXJ0
eVNsb3QgcmVsaWVzIG9uIHRoaXMgbWV0aG9kIG5ldmVyIHJldHVybmluZyBpbmRleCBwcm9wZXJ0
aWVzIQogICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKIApAQCAtMTQxNywx
NiArMTQwOCwyMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAg
ICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxl
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgp
OwotICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3Rv
cmFnZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
dm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBv
ZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgb2Zm
c2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAorICAgICAgICAg
ICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgICAgIFsmXSAoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAg
ICAgICAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CisgICAg
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZM
aW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRo
aXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
CisgICAgICAgICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAg
ICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAg
ICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAgICB9KTsKIAot
ICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQodGhpcy0+c3Ry
dWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMt
PnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAtMTQ0NSwx
MyArMTQ0MCwxNSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAg
ICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlm
IChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CiAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJy
ZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJy
ZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQp
KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5l
d0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAg
ICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICAgICAgc2xvdC5zZXROZXdQ
cm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
NDk4LDEzICsxNDk1LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW4KICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7Ci0gICAgaWYg
KG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7Ci0g
ICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIGlmIChvbGRDYXBhY2l0eSAhPSBuZXdDYXBhY2l0eSkgeworICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0s
IG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9CiAgICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0
cnVjdHVyZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlm
IChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFp
bnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE1NTYsMTUgKzE1NTMsMTkgQEAgaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0
b21HZXR0ZXJTZXR0ZXIoKSk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRl
cmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3Rv
cmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwg
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIG5ld0J1dHRlcmZseSA9IGFs
bG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5
KCkpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlmIChhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3Bl
cnRpZXMoKTsKLSAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJl
LT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZE9wdGltaXplKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVj
dHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwor
ICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgdm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0
Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0
aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JO
ZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Cisg
ICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKKyAgICAgICAgfSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIFJlZ2lz
dGVyOjpvYmplY3QoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAkocmV2aXNpb24gMjA4NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFj
aywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFs
R0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJh
cnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJl
bnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENvbnRp
bnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5j
ZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJs
ZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXpl
Q2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFy
cmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgU3Bh
cnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
IH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0LgogY2xhc3Mg
U3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSw2
IEBACiAKICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNpZm5kZWYg
TkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxzZQot
I2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSArMTU3LDkg
QEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkg
eworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGVPck51bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwot
ICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6
ZSArPSB0YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNiw3
ICszMDAsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAg
Zm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+
cHJldmlvdXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKICAgICAg
ICAgCi0gICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Cisg
ICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAgICAgICAg
IGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQs
IHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAgICAg
ICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zMjEsMzAg
KzMxNSwyOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAg
QVNTRVJUKCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5
TWFwKFZNJiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VSVChzdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFi
bGUoKSk7Ci0KKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKICAgICAK
ICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBz
dHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KTsKICAgICBpZiAo
dGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUg
PSB0YWJsZS0+Y29weSh2bSwgY2FwYWNpdHkpOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51
bmxvY2soKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRhYmxlID0gUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBob2xkIHRoZSBsb2Nr
IG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWluZyB0aGlzIHN0cnVj
dHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdldENvbmN1cnJlbnRs
eSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAogICAgIC8vIHN0YXRl
LgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7
Ci0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSwg
bnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsK
LSAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsK
KyAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKKyAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJs
ZSh2bSwgdGFibGUpOwogCiAgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1faW5m
ZXJyZWRUeXBlVGFibGUuZ2V0KCk7CiAKQEAgLTM1NSwxMCArMzQ4LDExIEBAIHZvaWQgU3RydWN0
dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBl
bnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZz
ZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIGlmICh0eXBl
VGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgp
KSkKICAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7Ci0gICAgICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgdGFibGUtPmFkZChlbnRyeSwgbV9vZmZz
ZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQog
ICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICByZXR1cm4gdGFibGU7CiB9
CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKQEAgLTQ3Myw3
ICs0NjcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuCiAgICAg
dHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFu
c2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0UHJv
cGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
ICAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2bSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIApAQCAtNTIx
LDM2ICs1MTUsMzAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbgog
CiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKKyAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOwogCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KHZtLCB0cmFu
c2l0aW9uLCBwcm90b3R5cGUpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgIAorICAgIHRy
YW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0g
ICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIGlmICghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAgIAorICAgICAgICB0cmFuc2l0aW9u
LT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFu
c2l0aW9uOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSk7
Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUo
KS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkg
PSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0pLT5nZXQocHJvcGVydHlOYW1lLnVp
ZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwogICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0cmli
dXRlczsKIApAQCAtNTYxLDE3ICs1NDksMTUgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nZVRyYQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewogICAg
IEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0g
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAotICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsK
KyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwotICAgIHRyYW5z
aXRpb24tPnBpbigpOwogICAgIHRyYW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5KHRydWUp
OwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAg
IHJldHVybiB0cmFuc2l0aW9uOwogfQpAQCAtNjAzLDMxICs1ODksMjkgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAgaWYgKGlzUGlubmVkUHJvcGVydHlU
YWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBwcm9wZXJ0
eVRhYmxlKCktPnNpemUoKSArIDEpOwotICAgIAotICAgIC8vIEhvbGQgdGhlIGxvY2sgd2hpbGUg
c3RlYWxpbmcgdGhlIHRhYmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBhbm90aGVy
IHRocmVhZAotICAgIC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3RydWN0dXJl
LCBvciB3aWxsIGdldCB0byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgLy8gYmVmb3JlIGl0
IGlzIHN0b2xlbi4KLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
IFByb3BlcnR5VGFibGUqIHRha2VuUHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGUoKS5nZXQo
KTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gdGFrZW5Qcm9wZXJ0
eVRhYmxlOworICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgcmV0dXJuIGEgcHJvcGVydHkgdGFibGUu
IEl0IGNhbid0IHJldHVybiBudWxsLgorICAgIFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IHByb3Bl
cnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChpc1Bpbm5l
ZFByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHkodm0sIHJl
c3VsdC0+c2l6ZSgpICsgMSk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIG51bGxwdHIpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBmYWxzZTsK
KyAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxl
KTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlv
bktpbmQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0
aW9uS2luZCk7Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktp
bmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gbmV3
SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0
cmFuc2l0aW9uS2luZCk7CiAgICAgCiAgICAgaWYgKGNoYW5nZXNJbmRleGluZ1R5cGUodHJhbnNp
dGlvbktpbmQpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5tX2dsb2JhbE9iamVjdC5nZXQoKSkgewogICAgICAgICAgICAgaWYgKGdsb2Jh
bE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpIHsKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUp
IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3Jp
Z2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSkgewogICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KQEAg
LTYzOCw3ICs2MjIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
CiAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJh
bnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+YXR0cmlidXRlc0luUHJldmlvdXMoKSA9PSBhdHRyaWJ1dGVzKTsKLSAg
ICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRp
b24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICB9CiAg
ICAgCkBAIC02NDYsNyArNjMwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdAogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3Ry
dWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1
dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlKGluZGV4aW5nVHlw
ZSk7CisgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgCiAgICAgaWYgKHByZXZlbnRz
RXh0ZW5zaW9ucyh0cmFuc2l0aW9uS2luZCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldERpZFBy
ZXZlbnRFeHRlbnNpb25zKHRydWUpOwpAQCAtNjU3LDMyICs2NDEsMjkgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAgICAvLyB0YWJsZSwgc2luY2Ugb3Vy
IGxvZ2ljIGZvciB3YWxraW5nIHRoZSBwcm9wZXJ0eSB0cmFuc2l0aW9uIGNoYWluIHRvIHJlbWF0
ZXJpYWxpemUgdGhlCiAgICAgICAgIC8vIHRhYmxlIGRvZXNuJ3Qga25vdyBob3cgdG8gdGFrZSBp
bnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAgICAgICAgIAotICAgICAgICBzdHJ1
Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAgIHRyYW5z
aXRpb24tPnBpbkZvckNhY2hpbmcodm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5t
X29mZnNldDsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZygpOwogICAgICAgICAK
LSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6ICp0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRpZXModHJhbnNp
dGlvbktpbmQpKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERvbnRE
ZWxldGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9w
ZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikp
Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7CisgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlmIChzZXRzRG9u
dERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCisgICAgICAgICAgICAgICAg
ZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOworICAgICAgICAgICAgaWYgKHNldHNSZWFk
T25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5LmF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8
PSBSZWFkT25seTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyYW5zaXRpb24t
PnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJv
cGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZz
ZXQ7CiAgICAgICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9u
LT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHNldHNSZWFkT25seU9u
Tm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKQotICAgICAgICAmJiB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkKLSAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKS0+aXNFbXB0eSgpKQorICAgICAgICAmJiAhdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZU9y
TnVsbCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldEhhc1JlYWRPbmx5T3JH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8odHJ1ZSk7CiAgICAgCiAgICAgaWYg
KHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwor
ICAgICAgICB0cmFuc2l0aW9uLT5waW4odm0sIHRyYW5zaXRpb24tPmVuc3VyZVByb3BlcnR5VGFi
bGUodm0pKTsKICAgICBlbHNlIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
c3RydWN0dXJlLT5tX2xvY2spOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxl
LmFkZCh2bSwgdHJhbnNpdGlvbik7CkBAIC02OTgsMTMgKzY3OSwxMiBAQCBib29sIFN0cnVjdHVy
ZTo6aXNTZWFsZWQoVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYg
KCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9w
ZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxl
KCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3Bl
cnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAorICAgIFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgewogICAgICAgICBpZiAoKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSAhPSBE
b250RGVsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTcxNywxMyAr
Njk3LDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihWTSYgdm0pCiAgICAgaWYgKGlzU3Ry
dWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRh
YmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAo
IXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUt
PmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkpCkBAIC03MzYs
MjEgKzcxNSwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiB7
CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VSVChpc0RpY3Rpb25hcnko
KSk7CisgICAgCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2
bS5oZWFwKTsKIAogICAgIHNpemVfdCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91
dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsK
LSAgICAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CisgICAgICAgIFByb3BlcnR5VGFibGUq
IHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBBU1NFUlQodGFibGUpOwog
Ci0gICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlUYWJsZSgpLT5zaXplKCk7
CisgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFibGUtPnNpemUoKTsKIAogICAgICAg
ICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3RlZCBieSBpbnNlcnRpb24gb3JkZXIuCiAgICAg
ICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJvcGVydHlDb3VudCk7CiAKICAgICAgICAgLy8g
Q29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhlaXIgaGFzaGVkIGxvY2F0aW9ucywgY29tcGFj
dGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFzIHdlIGdvLgogICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJs
ZSgpLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUt
PmVuZCgpOwogICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGZvciAo
UHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CisgICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kp
IHsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9iamVjdC0+Z2V0RGlyZWN0KGl0ZXItPm9mZnNl
dCk7CiAgICAgICAgICAgICBtX29mZnNldCA9IGl0ZXItPm9mZnNldCA9IG9mZnNldEZvclByb3Bl
cnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgICAgICB9CkBAIC03NTksNyArNzQx
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQogICAgICAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5l
Q2FwYWNpdHkpLCB2YWx1ZXNbaV0pOwogCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS0+Y2xlYXJE
ZWxldGVkT2Zmc2V0cygpOworICAgICAgICB0YWJsZS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwog
ICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC03NzMsNTAgKzc1
NSwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgICAg
IC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5nL2Nv
bXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAgICAgLy8gd2UgbmVl
ZCB0byB6ZXJvIGl0IG91dCBiZWNhdXNlIHRoZSBjb2xsZWN0b3IgZGVwZW5kcyBvbiB0aGUgU3Ry
dWN0dXJlIHRvIGtub3cgdGhlIHNpemUgZm9yIGNvcHlpbmcuCiAgICAgICAgIGlmIChvYmplY3Qt
PmJ1dHRlcmZseSgpICYmICFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5oYXNJbmRl
eGluZ0hlYWRlcihvYmplY3QpKQotICAgICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHko
dm0sIG51bGxwdHIpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNpemVkIHRv
IHRoZSBwb2ludCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxvbmdlciB3
aXRoaW4gdGhlIAogICAgICAgICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXplIGJ5dGVz
LCB3ZSdsbCBnZXQgdGhlIHdyb25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUgYmFzZSBi
YWNrIHRvIAogICAgICAgICAvLyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2ZW50IHRo
aXMgY2FzZSB3ZSBuZWVkIHRvIG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgogICAgICAgICBl
bHNlIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1
dHRlcmZseUFmdGVyRmxhdHRlbmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFmdGVy
T3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSwg
YWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAK
LVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi17
Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotICAgIAotICAgIHBpbigpOwot
Ci0gICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLX0KLQotUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oVk0m
IHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0KLSAg
ICBwaW4oKTsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSk7Ci19Ci0KLXZvaWQgU3Ry
dWN0dXJlOjpwaW4oKQotewotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElz
UGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJs
ZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7CiAgICAgbV9uYW1lSW5QcmV2aW91cyA9IG51bGxw
dHI7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKCkKK3ZvaWQgU3RydWN0dXJl
OjpwaW5Gb3JDYWNoaW5nKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNT
RVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUp
OworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBtX25hbWVJblByZXZpb3Vz
ID0gbnVsbHB0cjsKIH0KIApAQCAtODkxLDE3ICs4NTIsMTMgQEAgdm9pZCBTdHJ1Y3R1cmU6Ondp
bGxTdG9yZVZhbHVlU2xvdygKICAgICB9CiAKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2Un
dmUgZ290IGEgcHJvcGVydHkgdGFibGUuCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJs
ZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFi
bGUpOwotCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1hdGVyaWFsaXplUHJv
cGVydHlUYWJsZSh2bSk7CisgICAgCiAgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0
ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0
IHdhcyBwcmVzZW50Ci0gICAgLy8gYWxyZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkg
dGFibGUgbm93LgotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKTsKLQotICAgIC8vIC4uLiBhbmQg
dGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KKyAgICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJv
cGVydHkgbXVzdCBiZSBwcmVzZW50LgogICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJv
cGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsK
LQorICAgIAogICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKICAgICAgICAgZW50cnktPmhhc0luZmVy
cmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YWdlKTsKICAgICBlbHNlIHsKQEAgLTk0MywxOCArOTAwLDEyIEBAIFByb3BlcnR5TWFwU3RhdGlz
dGljc0V4aXRMb2dnZXI6On5Qcm9wZXIKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQotewotICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
dm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotfQotCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1
cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKHByb3Bl
cnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJv
cGVydHlUYWJsZSgpLmdldCgpKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZt
LCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkp
OworICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKSkK
KyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOworICAgIGJv
b2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3Bl
cnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldENvbmN1cnJlbnRseShVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYg
YXR0cmlidXRlcykKQEAgLTk4OSw3MCArOTQwLDI0IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5
PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAg
IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAg
Ci0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7
Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51
bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5
QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKLQotICAgIGF1dG8gcmVwID0gcHJv
cGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNy
ZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwotCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zm
c2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwotCi0g
ICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwg
YXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNo
YW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZz
ZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29u
c3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQog
CiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0g
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlk
KCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRP
ZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJv
cGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKLSAgICAg
ICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBw
b3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9z
aXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwot
Ci0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQg
U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5
VGFibGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOworICAg
IHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVy
dHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBl
bnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAg
ICAgcmV0dXJuOwotCisgICAgCiAgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMu
Y2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFi
bGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxl
LT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEFTU0VSVCghaXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkgfHwgIShpdGVyLT5hdHRyaWJ1
dGVzICYgRG9udEVudW0pKTsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NB
bGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKICAgICAg
ICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250
RW51bVByb3BlcnRpZXMoKSkgewpAQCAtMTExNCw2ICsxMDE5LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlz
T2JqZWN0LT5tX2xvY2spOworICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQogICAgICAg
ICB0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmNsZWFyKCk7CkBAIC0xMjc2LDky
ICsxMTg0LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBDb250ZXh0SGVhZGVyKFByaW50UwogICAg
IG91dC5wcmludCgiU3RydWN0dXJlczoiKTsKIH0KIAotI2lmIERPX1BST1BFUlRZTUFQX0NPTlNU
RU5DWV9DSEVDSwotCi12b2lkIFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3koKQotewot
ICAgIEFTU0VSVChtX2luZGV4U2l6ZSA+PSBQcm9wZXJ0eVRhYmxlOjpNaW5pbXVtVGFibGVTaXpl
KTsKLSAgICBBU1NFUlQobV9pbmRleE1hc2spOwotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA9PSBt
X2luZGV4TWFzayArIDEpOwotICAgIEFTU0VSVCghKG1faW5kZXhTaXplICYgbV9pbmRleE1hc2sp
KTsKLQotICAgIEFTU0VSVChtX2tleUNvdW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNT
RVJUKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAg
IEFTU0VSVChtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDQpOwotCi0gICAgdW5zaWdu
ZWQgaW5kZXhDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGVsZXRlZEluZGV4Q291bnQgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgYSA9IDA7IGEgIT0gbV9pbmRleFNpemU7ICsrYSkgewotICAgICAg
ICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFthXTsKLSAgICAgICAgaWYgKGVudHJ5SW5k
ZXggPT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGRlbGV0ZWRFbnRyeUluZGV4KCkpIHsKLSAg
ICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA8IGRlbGV0ZWRFbnRyeUluZGV4KCkp
OwotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAtIDEgPD0gdXNlZENvdW50KCkpOwotICAgICAg
ICArK2luZGV4Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBiID0gYSArIDE7IGIgIT0g
bV9pbmRleFNpemU7ICsrYikKLSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4W2JdICE9IGVudHJ5
SW5kZXgpOwotICAgIH0KLSAgICBBU1NFUlQoaW5kZXhDb3VudCA9PSBtX2tleUNvdW50KTsKLSAg
ICBBU1NFUlQoZGVsZXRlZEluZGV4Q291bnQgPT0gbV9kZWxldGVkQ291bnQpOwotCi0gICAgQVNT
RVJUKCF0YWJsZSgpW2RlbGV0ZWRFbnRyeUluZGV4KCkgLSAxXS5rZXkpOwotCi0gICAgdW5zaWdu
ZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwg
dXNlZENvdW50KCk7ICsrYykgewotICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSB0YWJsZSgpW2Nd
LmtleTsKLSAgICAgICAgaWYgKHJlcCA9PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgKytub25FbXB0eUVudHJ5Q291bnQ7Ci0g
ICAgICAgIHVuc2lnbmVkIGkgPSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApOwotICAgICAg
ICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleDsKLSAgICAgICAg
d2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5SW5kZXggPSBtX2luZGV4W2kgJiBtX2luZGV4
TWFza107Ci0gICAgICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAhPSBQcm9wZXJ0eVRhYmxlOjpF
bXB0eUVudHJ5SW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlcCA9PSB0YWJsZSgpW2VudHJ5SW5k
ZXggLSAxXS5rZXkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoayA9
PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChJZGVudGlmaWVyUmVwSGFz
aDo6aGFzaChyZXApKTsKLSAgICAgICAgICAgIGkgKz0gazsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoZW50cnlJbmRleCA9PSBjICsgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG5vbkVtcHR5
RW50cnlDb3VudCA9PSBtX2tleUNvdW50KTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29u
c2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNRdWlja1Byb3Bl
cnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICAgICAgZm9yIChQ
cm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1
dGVzICYgRG9udEVudW0pKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+a2V5LT5pc1N5bWJv
bCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3BlcnR5VGFibGUoKS0+Y2hlY2tDb25z
aXN0ZW5jeSgpOwotfQotCi0jZWxzZQotCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29u
c2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLX0KLQotI2VuZGlm
IC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCiBib29sIENsYXNzSW5mbzo6aGFz
U3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGZvciAoY29u
c3QgQ2xhc3NJbmZvKiBjaSA9IHRoaXM7IGNpOyBjaSA9IGNpLT5wYXJlbnRDbGFzcykgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDIw
ODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTEsOSArMTkxLDE0IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgUHJv
cGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5
TmFtZSk7CisgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiBWZXJzaW9u
cyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBpdCBhZnRlciBtYWtpbmcgdGhlCisgICAgLy8g
Y2hhbmdlIGJ1dCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrLiBUaGUgY2FsbGJhY2sgaXMg
bm90IGNhbGxlZCBpZiB0aGVyZSBpcyBubyBjaGFuZ2UKKyAgICAvLyBiZWluZyBtYWRlLCBsaWtl
IGlmIHlvdSBjYWxsIHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oKSBhbmQgdGhlIHBy
b3BlcnR5IGlzIG5vdAorICAgIC8vIGZvdW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZvaWQg
c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkg
eyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAgICAg
Ym9vbCBpc0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5v
bmVEaWN0aW9uYXJ5S2luZDsgfQpAQCAtMjI5LDggKzIzNCw4IEBAIHB1YmxpYzoKICAgICBUeXBl
SW5mbyB0eXBlSW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsg
fQogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0
KCk7IH0KIAotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2IuaW5kZXhpbmdUeXBlKCkgJiBBbGxBcnJheVR5cGVzOyB9Ci0gICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5k
ZXhpbmdUeXBlKCk7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbEFycmF5VHlw
ZXM7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7IH0KICAg
ICAgICAgCiAgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAogICAg
IHsKQEAgLTQzMyw5ICs0MzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoU3RydWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0
aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBp
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjpp
bmRleGluZ1R5cGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1
Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnlPZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBwcm9wZXJ0
eVRhYmxlVW5zYWZlT2Zmc2V0KCkKQEAgLTU3OSw2ICs1ODQsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgc3RhdGljIHZvaWQgZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTdHJlYW0mKTsKICAgICAKKyAg
ICBDb25jdXJyZW50SklUTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CkBAIC02MzMsNDQgKzY0MCw0NSBAQCBw
cml2YXRlOgogICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25zdCBG
dW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAgICB2
b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBW
TSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7
CiAKLSAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3BlcnR5VGFibGUoKTsKLSAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOwot
ICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJik7Ci0gICAgUHJvcGVydHlU
YWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJik7Ci0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIERlZmVyR0Mm
KQorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRE8gTk9UIGNhbGwgd2hl
biBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3Vy
ZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpKTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQotICAg
ICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CisgICAgICAgIGlmIChQcm9wZXJ0
eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzSUQoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxl
KHZtKTsKICAgICB9Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShWTSYgdm0sIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKKyAgICAKKyAgICAv
LyBUaGlzIG1heSBncmFiIHRoZSBsb2NrLCBvciBub3QuIERPIE5PVCBjYWxsIHdoZW4gaG9sZGlu
ZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0
eVRhYmxlKFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OwotICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAgdGFi
bGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgICAgIGlmICghdGFibGUgJiYgcHJldmlv
dXNJRCgpKSB7Ci0gICAgICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAg
ICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKLSAgICAgICAgICAgIHRhYmxlID0gcHJv
cGVydHlUYWJsZSgpLmdldCgpOwotICAgICAgICB9CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxl
KiByZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsK
ICAgICB9Ci0gICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5u
aW5nKFZNJiB2bSwgRGVmZXJHQyYpCisgICAgCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZU9yTnVsbCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
LSAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwKHZtKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQo
KTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGdyYWIgdGhlIGxvY2suIERPIE5PVCBj
YWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBQcm9wZXJ0eVRhYmxlKiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mLCBib29sIHNl
dFByb3BlcnR5VGFibGUgPSB0cnVlKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5VGFibGUo
Vk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSk7CisgICAgCisgICAgUHJvcGVydHlUYWJsZSog
dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKIAogICAgIHZvaWQgc2V0UHJldmlv
dXNJRChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTY5Nyw4ICs3MDUs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVy
ZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAg
ICAgICAgIAotICAgIHZvaWQgcGluKCk7Ci0gICAgdm9pZCBwaW5Gb3JDYWNoaW5nKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwaW4oVk0mLCBQcm9wZXJ0eVRhYmxlKik7CisgICAgdm9p
ZCBwaW5Gb3JDYWNoaW5nKFZNJiwgUHJvcGVydHlUYWJsZSopOwogICAgIAogICAgIGJvb2wgaXNS
YXJlRGF0YShKU0NlbGwqIGNlbGwpIGNvbnN0CiAgICAgewpAQCAtNzEwLDcgKzcxOCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkp
OwogICAgIH0KLSAgICAgICAgCisKICAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBj
b25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShWTSYp
OwpAQCAtNzQwLDcgKzc0OCw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhy
b3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFu
b3RoZXIgdGhyZWFkLgorICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVBy
b3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0
aHJlYWQuCiAgICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmlu
ZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCiAgICAgV3JpdGVCYXJyaWVyPFByb3Bl
cnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDIwODUyMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHUuZG91Ymxl
V29yZCA9IDB4YmJhZGJlZWY7CiAgICAgfQogCi0gICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVy
ZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBjb25zdCBUeXBlSW5m
byYgdHlwZUluZm8pCisgICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSwgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvKQogICAgIHsKICAgICAgICAgdS5maWVsZHMuc3RydWN0dXJlSUQgPSBzdHJ1
Y3R1cmVJRDsKLSAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOwor
ICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5
cGUoKTsKICAgICAgICAgdS5maWVsZHMuaW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5saW5l
VHlwZUZsYWdzKCk7CiAgICAgICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3Rh
dGU6Ok5ld1doaXRlOwpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRv
cj0oY29uc3QgU3RydWN0dXJlSURCbG9iJiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhlci51
LmRvdWJsZVdvcmQ7IH0KICAgICAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0
IHsgcmV0dXJuIHUuZmllbGRzLnN0cnVjdHVyZUlEOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZTsgfQotICAgIHZv
aWQgc2V0SW5kZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpIHsgdS5maWVsZHMu
aW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5OyB9CisgICAgdm9pZCBzZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5KEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUuZmll
bGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5OyB9CiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50eXBl
OyB9CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBjb25z
dCB7IHJldHVybiB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3M7IH0KICAgICAKQEAgLTY3LDE2ICs2
NywxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
SURCbG9iLCB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRp
ZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICB1bmlvbiB7
CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsK
LSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7CisgICAgICAgICAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgICAgIEpTVHlw
ZSB0eXBlOwogICAgICAgICAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBl
RmxhZ3M7CiAgICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwODUyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDggKzkzLDcgQEAgQUxXQVlTX0lOTElO
RSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRo
cmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
CiAKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisgICAgUHJvcGVydHlUYWJs
ZSogcHJvcGVydHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKICAg
ICBpZiAoIXByb3BlcnR5VGFibGUpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBA
IC0yMjUsMjMgKzIyNCwxOSBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0
T2ZMCiAKICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkp
OwogCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAoIXRhYmxlKSB7CiAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQo
bV9vZmZzZXQpOwogICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBjdXJyZW50
U2l6ZSk7CiAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgp
OwogICAgIH0KIAotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5
VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgp
LT5oYXNEZWxldGVkT2Zmc2V0KCkpCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkg
Pj0gdGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgaWYgKHRhYmxlLT5oYXNEZWxl
dGVkT2Zmc2V0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVCh0b3RhbFN0
b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4g
cHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQot
QUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJv
cGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKKyAgICBB
U1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSB0YWJsZS0+c2l6ZSgpKTsKKyAgICByZXR1
cm4gdGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOwogfQogCiBpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CkBAIC0yNzEsNyArMjY2LDcgQEAgaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJv
cGVydAogCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3Rl
bmN5KCkgY29uc3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlLmdldCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUg
PSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAg
ICAgICAgQVNTRVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC0yOTIsNiArMjg3LDEx
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2UKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKK3sK
KyAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Cit9CisKIGlubGluZSBzaXplX3QgbmV4dE91
dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQogewogICAgIGlm
ICghY3VycmVudENhcGFjaXR5KQpAQCAtMzExLDQgKzMxMSw4NSBAQCBpbmxpbmUgdm9pZCBTdHJ1
Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nCiAgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJp
bmdWYWx1ZShleGVjLCB2bSwgdGhpcywgdmFsdWUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIAorICAgIHNldFByb3BlcnR5VGFibGUodm0s
IHRhYmxlKTsKKyAgICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHBy
b3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmli
dXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJ
c1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisgICAg
YXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdP
ZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICAKKyAgICB0
YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBt
X29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOworICAgIAor
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQpOwor
ICAgIHJldHVybiBuZXdPZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Citpbmxp
bmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGF1dG8gcmVw
ID0gcHJvcGVydHlOYW1lLnVpZCgpOworICAgIAorICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZyb20g
dW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJvcGVy
dHkgdGFibGUuCisgICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEgdGFi
bGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCk7CisKKyAgICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKKworICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24g
PSB0YWJsZS0+ZmluZChyZXApOworICAgIGlmICghcG9zaXRpb24uZmlyc3QpCisgICAgICAgIHJl
dHVybiBpbnZhbGlkT2Zmc2V0OworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHBv
c2l0aW9uLmZpcnN0LT5vZmZzZXQ7CisKKyAgICB0YWJsZS0+cmVtb3ZlKHBvc2l0aW9uKTsKKyAg
ICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworCisgICAgZnVuYyhsb2NrZXIsIG9mZnNldCk7CisgICAgcmV0dXJuIG9mZnNldDsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAg
IHBpbih2bSwgZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkpOworICAgIAorICAgIHJldHVybiBhZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3Qg
RnVuYyYgZnVuYykKK3sKKyAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7Cisg
ICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKKyAgICBBU1NFUlQocHJvcGVydHlU
YWJsZU9yTnVsbCgpKTsKKyAgICAKKyAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVu
Yyk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJsZShWTSYgdm0s
IFByb3BlcnR5VGFibGUqIHRhYmxlKQoreworICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5zZXRN
YXlCZU51bGwodm0sIHRoaXMsIHRhYmxlKTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg1MjApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0
aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMz
ODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExv
Y2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CiAJ
CTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRG
NzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdC
NkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMu
aCAqLzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJCMjU4
QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CkBAIC0zNzQsNiArMzc1LDcgQEAKIAog
LyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEw
MDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3Jp
dGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8q
IERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3Vu
dGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3
QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0
aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk1Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAv
KiBMaXN0SGFzaFNldC5oICovLAogCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2Nr
LmNwcCAqLywKIAkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAorCQkJ
CTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8sCiAJCQkJQThB
NDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1
QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQlBOEE0NzJDNjE1MUE4
MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8sCkBAIC0xMzIzLDYgKzEzMjYsNyBAQAog
CQkJCUE4QTQ3MzlCMTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51
bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUxQTgy
NUIwMDQxMjNGRiAvKiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBGQ0RERTFERDE2
N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
OUQxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzM5RjE1MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDczQTExNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAgTG9j
ay5oCisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAgIE1h
aW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBM
aXN0RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1
c2luZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcg
V1RGOjpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcg
V1RGOjpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2Vu
ZGlmIC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODUyMCkKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAiRGF0
YUxvZy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0
cmVhbS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJl
YWQ+Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tC
YXNlOjpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8v
IFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3Qg
SmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7
Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUg
PSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5
dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJn
ZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAg
ICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28g
bXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsK
LSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3Qs
IGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJr
ZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBp
ZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
V2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBh
cyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJr
UmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBh
cmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtS
ZXN1bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9r
ZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMg
aGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAg
ICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMg
cmVsZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3
b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9j
ay4gQnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRo
ZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFs
dWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRy
eSBhZ2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0
ZSk7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJ
bXBsKFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRl
LCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5s
b2NrRmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVS
X0lOTElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykK
LXsKLSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxv
Y2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVv
bmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUg
bG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlm
IHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xk
Qnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9i
eXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNv
bWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0
aGUgbG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1
bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9y
IGJhcmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBh
cmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0g
ICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZh
bHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6
dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2lu
Z0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxk
Qml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxk
IHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYg
KGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRo
ZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2Fp
dGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVh
ZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwot
ICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5s
b2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg1MjApCisrKyBTb3VyY2UvV1RGL3d0
Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xv
Y2tfaAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBA
IC0zNyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsK
IAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3Jp
dGhtOworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVp
cmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29t
cGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFu
ZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5p
bmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8g
c3RkOjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7
CiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAo
TElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1pl
cm8obV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wg
dHJ5TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90
IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJl
bnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFs
dWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6
dHJ5TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBz
dGQ6OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAg
ICAvLyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEg
ZmFpciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFko
bV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3
YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVu
bG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6
dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3co
KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRl
ZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAg
LTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZv
aWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkp
IHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNs
b3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
RmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3co
KTsKICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7Cisg
ICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAg
ICB9CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHBy
b3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwog
ICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tG
YWlybHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0g
ICAgICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7
Ci0gICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAg
ICAgICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVz
dGluZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
QWxnb3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRo
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRo
bV9oCisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNp
bmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIHRo
ZSBhbGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tU
eXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNzIExv
Y2tBbGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsK
KworcHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxM
b2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisg
ICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykpKQor
ICAgICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IHRyeUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVl
ICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5
dGVWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCB1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgewor
ICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHVu
bG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBl
IG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVl
LCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAg
ICAgICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2
b2lkIHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3co
bG9jaywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0
IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAg
ICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8g
VGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBK
aWtlc1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0g
NDA7CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVu
dEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBvdXJz
ZWx2ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYg
aXNIZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJr
ZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4g
YXJvdW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNvdW50
Kys7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0
byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0
aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFya2Vk
IGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgICAg
IGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAgICAg
JiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0
ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1Bhcmtl
ZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAgICAg
UGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJp
dCB8IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtl
ZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1
bHQudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5k
ZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAgICAg
ICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhh
dCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAgICAg
ICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBv
cHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8g
b3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxv
b3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSBh
d29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQu
IEVpdGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAgICBG
YWlyLAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9p
ZCB1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMg
aW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAg
ICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmln
aHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUgaGVs
ZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1
bmxvY2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xkQnl0
ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAg
ICAgICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAgICAg
ICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRC
aXQpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09
IGlzSGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoaXNIZWxkQml0LCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTb21lb25l
IGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxv
Y2sgdG8gdGhhdCB0aHJlYWQKKyAgICAgICAgICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVu
bG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3Ig
YmFyZ2luZy4KKyAgICAgICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhl
IHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxs
CisgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KKyAgICAgICAgICAgIEFTU0VS
VCgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwor
ICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAorICAgICAgICAgICAgICAgICZsb2Nr
LAorICAgICAgICAgICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkg
LT4gaW50cHRyX3QgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25l
cyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0
LAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0
cyBzZXQgcmlnaHQgbm93LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKGxvY2subG9hZCgp
ICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFp
cm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRo
ZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHdhaXRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9ja1R5cGUgb2xk
VmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBlIG5l
d1ZhbHVlID0gb2xkVmFsdWUgJiB+bWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
d1ZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBlbnVtIFRva2VuIHsKKyAgICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAorICAgICAgICBEaXJl
Y3RIYW5kb2ZmCisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OkxvY2tBbGdvcml0aG07CisKKyNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24g
MjA4NTIwKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgog
I2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNm
bG9hdD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ss
IHRpbWUpOwogfQogCitib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJiB0aW1lKQoreworICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUg
PiB0aW1lLndpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5u
b3dXaXRoU2FtZUNsb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg1MjAp
CisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM0LDggKzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUg
dm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUm
KTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlOwordXNpbmcgV1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2Vu
ZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294449</attachid>
            <date>2016-11-10 17:47:13 -0800</date>
            <delta_ts>2016-11-11 11:27:21 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>216136</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb3ZlcnNpemUtZGljdGlvbmFyeS1vYmplY3Qu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vdmVyc2l6ZS1kaWN0aW9u
YXJ5LW9iamVjdC5qcwkocmV2aXNpb24gMjA4NTcyKQorKysgSlNUZXN0cy9zdHJlc3MvZmxhdHRl
bi1vdmVyc2l6ZS1kaWN0aW9uYXJ5LW9iamVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjYsOSAr
MjYsOCBAQCBub0lubGluZShmb28pOwogICAgIHZhciBzdW0gPSAwOwogICAgIHZhciBpVmFsID0g
bGV0dGVycy5pbmRleE9mKCJiIik7CiAgICAgdmFyIG5pdGVycyA9IDEwMDA7Ci0gICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuaXRlcnM7ICsraSkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbml0
ZXJzOyArK2kpCiAgICAgICAgIHN1bSArPSBmb28obyk7Ci0gICAgfQogCiAgICAgaWYgKHN1bSAh
PSBpVmFsICogbml0ZXJzKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImluY29ycmVjdCByZXN1
bHQ6ICIgKyBzdW0pOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvaGF2ZS1hLWJhZC10aW1lLXdpdGgt
YXJndW1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2hhdmUtYS1iYWQtdGlt
ZS13aXRoLWFyZ3VtZW50cy5qcwkocmV2aXNpb24gMjA4NTcyKQorKysgSlNUZXN0cy9zdHJlc3Mv
aGF2ZS1hLWJhZC10aW1lLXdpdGgtYXJndW1lbnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUs
OCArMTE1LDYgQEAgZm9yIChsZXQgYXJnc0RlY2xJbmRleCBpbiBhcmd1bWVudHNEZWNscwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybXVwRnVuY3Rpb24odGllcldhcm11cENv
dW50LCB0ZXN0QXJncykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dhcm11
cCgpJyArICdcbicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZEVx
dWFsKDEwMDAwLCB0ZXN0KCcgKyB0ZXN0QXJncyArICcpLCAnICsgZXhwZWN0ZWRSZXN1bHRbJ2Jl
Zm9yZUJhZFRpbWUnXSArICcpOycgKyAnXG4nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGF2ZUFCYWRUaW1lICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdz
aG91bGRFcXVhbCgyMDAwMCwgdGVzdCgnICsgdGVzdEFyZ3MgKyAnKSwgJyArIGV4cGVjdGVkUmVz
dWx0WydhZnRlckJhZFRpbWUnXSArICcpOycgKyAnXG4nOwogCiAgICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnUnVubmluZyB0
ZXN0IGNvbmZpZ3VyYXRpb246ICcgKyB0ZXN0TmFtZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMDg1NzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9iamNPYmplY3Qo
aWQgb2JqZWMKIC0gKGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0CiB7CiAgICAg
SlNDOjpWTSogdm0gPSB0b0pTKG1fZ3JvdXApOwotICAgIHJldHVybiB2bS0+aGVhcC5zbG90Vmlz
aXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOworICAgIHJldHVybiB2bS0+aGVhcC5j
b2xsZWN0b3JTbG90VmlzaXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOwogfQogCiAt
ICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDooaWQpb2JqZWN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQg
LyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4
QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZE
ODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQg
LyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJMEZBREREMUQxREQwMUVE
RTAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURERDFDMUREMDFFREMwMDgyNzVFOCAvKiBSZXN1
bWVUaGVXb3JsZFNjb3BlLmggKi87IH07CiAJCTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBI
ZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJCTBGQUY3RUZE
MTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAv
KiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzAwNCw2
ICszMDA1LDcgQEAKIAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURERDFDMURE
MDFFREMwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlc3VtZVRoZVdvcmxkU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGlzYXNzZW1ibGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2ODYs
NiArNTY4OCw3IEBACiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0
ZS5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
Ki8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2Nv
cGUuaCAqLywKKwkJCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRT
Y29wZS5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8s
CiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
LApAQCAtNzkxOCw2ICs3OTIxLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIgLyog
REZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0MTdBMEI4
Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkJEOTYxQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZBREREMUQxREQwMUVERTAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDM0QyQjBBMUQzNDMxNjIwMEJBOTE4QyAvKiBIZWFw
Q2VsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERG
R0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEg
LyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDgwLDcgKzEwMDg0
LDYgQEAKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENCMzQxMDA0QzJFQjggLyogRGVi
dWdnZXJQYXJzZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTNGRjdGOUQxREMwMERCMTAw
QTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5
NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZF
MjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9p
ZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgICAgICBDQ2FsbEhlbHBl
cnMgaml0KCZ2bSk7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB2YWx1ZTsKLSAgICAg
ICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdmFsdWUp
OwogICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8
IEluZGV4aW5nU2hhcGVNYXNrKSwgdmFsdWUpOwogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpOwpAQCAtMTU4LDcg
KzE1OCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUKIGJvb2wg
SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYgdm0sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0KKyAgICAKICAgICBHUFJS
ZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAg
ICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAtMTczLDcg
KzE3Myw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUEKICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3JhZ2UgPSB2
YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgfQotCisgICAgCiAgICAgaml0LmxvYWRWYWx1ZSgKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uob2Zmc2V0KSksIHZhbHVlKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgSW5saW5lQWNj
ZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFYKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJ
bmZvLnZhbHVlUmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2NyYXRjaFJlZ2lzdGVy
KHN0dWJJbmZvKTsKIAotICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zm
c2V0KCkpLCBzY3JhdGNoKTsKICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CiAgICAgYXV0byBicmFu
Y2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICBDQ2FsbEhlbHBl
cnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+
aW5kZXhpbmdUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA4NTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRo
R3VhcmQoCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CiAg
ICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCiAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93
UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8g
dGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgogICAgICAgICAgICAgLy8gVGhh
dCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCiAgICAg
ICAgICAgICBqaXQtPm1faml0LmxvYWQ4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIG1fc3Ry
dWN0dXJlR1BSKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwKKyAgICAgICAgICAg
ICAgICBtX3N0cnVjdHVyZUdQUik7CiAgICAgICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAu
ZmlsbCgKICAgICAgICAgICAgICAgICBqaXQsIGppdC0+anVtcFNsb3dGb3JVbndhbnRlZEFycmF5
TW9kZShtX3N0cnVjdHVyZUdQUiwgbV9hcnJheU1vZGUpKTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODU3MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MTgsNiArOTE4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAg
ICAgcmVhZChXb3JsZCk7IC8vIFRoaXMgaXMgYSBzdG9yZS1zdG9yZSBmZW5jZS4KICAgICAgICAg
d3JpdGUoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZv
VHlwZSk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShy
ZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihzY3JhdGNoMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0
cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gx
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
dmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDEpOwog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
MSksIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihzY3JhdGNoMSwg
c2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5
SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2Rl
cygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNSw5ICs1MDUsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUu
aXNDZWxsKCkpKSB7CiAgICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsK
IAotICAgICAgICBpZiAocHJvcGVydHkuaXNVSW50MzIoKSkgeworICAgICAgICBpZiAocHJvcGVy
dHkuaXNVSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBnZXRCeVZhbChleGVjLCBiYXNlLCBw
cm9wZXJ0eS5hc1VJbnQzMigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJs
ZSgpKSB7CisgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKICAgICAgICAg
ICAgIGRvdWJsZSBwcm9wZXJ0eUFzRG91YmxlID0gcHJvcGVydHkuYXNEb3VibGUoKTsKICAgICAg
ICAgICAgIHVpbnQzMl90IHByb3BlcnR5QXNVSW50MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
cHJvcGVydHlBc0RvdWJsZSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHlBc1VJbnQzMiA9PSBw
cm9wZXJ0eUFzRG91YmxlICYmIGlzSW5kZXgocHJvcGVydHlBc1VJbnQzMikpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCwx
NiArNjEwLDM0IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxh
bjo6cmVtZW1iZXJDb2RlQmxvY2tzKCkKK3ZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZp
c2l0b3ImIHNsb3RWaXNpdG9yKQogeworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0Mo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3Rz
IG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBl
eHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1l
IHRoYXQKKyAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBH
Qy4KKworICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNv
ZGVCbG9jayk7CisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50
ZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxv
Y2spCisgICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVy
KHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKK30KKwordm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9j
a3MoVk0mIHZtKQoreworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAogICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVl
cyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBi
YXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAg
ICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAg
IEhlYXA6OmhlYXAoY29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgSGVh
cDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgaWYgKHByb2ZpbGVkREZH
Q29kZUJsb2NrKQotICAgICAgICBIZWFwOjpoZWFwKHByb2ZpbGVkREZHQ29kZUJsb2NrKS0+d3Jp
dGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5l
c3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIHN0
cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxh
dGlvbktleSBrZXkoKTsKICAgICAKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAg
IHZvaWQgbWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHJlbWVtYmVyQ29k
ZUJsb2NrcyhWTSYpOwogICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImKTsKICAgICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9p
ZCBjYW5jZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODM2LDcgKzgz
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0
KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIEJh
ZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIDAsCiAg
ICAgICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFy
cmF5TW9kZSgpKSk7CkBAIC05MDAsNyArOTAwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJy
YXlpZnkoTm9kZSogbm9kZQogICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkOCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BS
KTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIAogICAgICAg
ICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBu
b2RlLT5hcnJheU1vZGUoKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9GVEwoKSkK
ICAgICAgICAgICAgIGxldmVsID0gRlRMOjpDYW5Db21waWxlOwotCisgICAgICAgIAogICAgICAg
ICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwogICAgICAgICBOYXR1cmFsTG9vcHMmIG5h
dHVyYWxMb29wcyA9ICptX2dyYXBoLm1fbmF0dXJhbExvb3BzOwogICAgICAgICBIYXNoTWFwPGNv
bnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IG5hdHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxk
TmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKG5hdHVyYWxMb29wcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMjA4NTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJERkdXb3JrbGlz
dC5oIgogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR1NhZmVwb2ludC5oIgpA
QCAtMzgsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKwogY2xhc3MgV29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMg
QXV0b21hdGljVGhyZWFkIHsKIHB1YmxpYzoKICAgICBUaHJlYWRCb2R5KGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmtsaXN0LCBUaHJlYWREYXRhJiBkYXRhLCBCb3g8TG9j
az4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbj4gY29uZGl0aW9uLCBpbnQg
cmVsYXRpdmVQcmlvcml0eSkKQEAgLTM0OSw2ICszNDksMTcgQEAgdm9pZCBXb3JrbGlzdDo6Y29t
cGxldGVBbGxQbGFuc0ZvclZNKFZNJgogICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZt
KTsKIH0KIAordm9pZCBXb3JrbGlzdDo6bWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRv
ciYgc2xvdFZpc2l0b3IpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAg
Zm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1f
cGxhbnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUu
Z2V0KCk7CisgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcGxhbi0+bWFya0NvZGVCbG9ja3Moc2xvdFZpc2l0b3IpOworICAgIH0KK30K
Kwogdm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKIHsKICAgICBMb2Nr
SG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKQEAgLTM1Niw3ICszNjcsNyBAQCB2b2lkIFdvcmtsaXN0
OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtCiAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52
YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3MoKTsKKyAgICAgICAgcGxh
bi0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKICAgICB9CiB9CiAKQEAgLTU1Myw2ICs1NjQsMTQg
QEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mIHZtKQogICAgIH0KIH0KIAordm9pZCBt
YXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKKyAgICAg
ICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9y
SW5kZXhPck51bGwoaSkpCisgICAgICAgICAgICB3b3JrbGlzdC0+bWFya0NvZGVCbG9ja3Modm0s
IHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2
bSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGkt
LTspIHsKQEAgLTU2MSw3ICs1ODAsMjIgQEAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
KQogICAgIH0KIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworI2Vsc2UgLy8gRU5BQkxF
KERGR19KSVQpCisKK3ZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJikKK3sKK30KKwordm9p
ZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJikKK3sKK30KKwordm9pZCByZW1lbWJl
ckNvZGVCbG9ja3MoVk0mKQoreworfQogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkRGR1BsYW4u
aCIKICNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1Ro
cmVhZC5oPgpAQCAtNDIsNiArNDAsOCBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNl
IERGRyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwogY2xhc3MgV29ya2xpc3QgOiBwdWJsaWMg
UmVmQ291bnRlZDxXb3JrbGlzdD4gewogcHVibGljOgogICAgIGVudW0gU3RhdGUgeyBOb3RLbm93
biwgQ29tcGlsaW5nLCBDb21waWxlZCB9OwpAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKICAgICB2b2lkIGNv
bXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYs
IFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogICAg
IHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CkBAIC0xNjMsOSArMTY0
LDExIEBAIGlubGluZSBXb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGUKICAgICByZXR1
cm4gKnJlc3VsdDsKIH0KIAorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiB2b2lkIGNvbXBs
ZXRlQWxsUGxhbnNGb3JWTShWTSYpOwordm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNp
dG9yJik7CiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNw
cAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDE0IEBA
IEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG8KICAgICAsIGFic29sdXRl
KCZyb290LCAiYWJzb2x1dGUiKQogewogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG91ciBleHBsaWNp
dCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgU3RydWN0dXJlSURCbG9iIG1hdGNoIHJlYWxpdHkuCi0g
ICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICYgKHNpemVv
ZihpbnQzMl90KSAtIDEpKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlw
ZS5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5cGVJbmZvVHlwZS5vZmZzZXQoKSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDIgPT0gSlNDZWxsX3R5
cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGlu
Z1R5cGUub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxsU3RhdGUub2Zmc2V0KCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgJiAoc2l6
ZW9mKGludDMyX3QpIC0gMSkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdU
eXBlQW5kTWlzYy5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5cGVJbmZvVHlwZS5vZmZzZXQoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkg
KyAyID09IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxT
dGF0ZS5vZmZzZXQoKSk7CiAKICAgICBKU0NlbGxfc3RydWN0dXJlSUQuY2hhbmdlUGFyZW50KCZK
U0NlbGxfaGVhZGVyKTsKICAgICBKU0NlbGxfdXNlZnVsQnl0ZXMuY2hhbmdlUGFyZW50KCZKU0Nl
bGxfaGVhZGVyKTsKLSAgICBKU0NlbGxfaW5kZXhpbmdUeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxs
X3VzZWZ1bEJ5dGVzKTsKKyAgICBKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5jaGFuZ2VQYXJl
bnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJbmZvVHlwZS5jaGFuZ2VQ
YXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX3R5cGVJbmZvRmxhZ3MuY2hh
bmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF9jZWxsU3RhdGUuY2hh
bmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9u
IDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvciwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpIFwKICAgICBtYWNybyhKU0NlbGxf
Y2VsbFN0YXRlLCBKU0NlbGw6OmNlbGxTdGF0ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxs
X2hlYWRlciwgMCkgXAotICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlz
YywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfc3RydWN0dXJlSUQsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSkgXAog
ICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpIFwKLSAgICBtYWNybyhKU0NlbGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU0NlbGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxl
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rp
b25fc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSBcCiAgICAgbWFjcm8o
SlNGdW5jdGlvbl9yYXJlRGF0YSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDIw
ODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgSklUQ29kZTo6fkpJVENvZGUoKQogICAgICAgICBD
b21tYVByaW50ZXIgY29tbWE7CiAgICAgICAgIGRhdGFMb2coY29tbWEsIG1fYjNDb2RlKTsKICAg
ICAgICAgZGF0YUxvZyhjb21tYSwgbV9hcml0eUNoZWNrRW50cnlwb2ludCk7CisgICAgICAgIGRh
dGFMb2coIlxuIik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
ODMsNiArMjc4Myw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlUHV0U3RydWN0dXJlKCkK
ICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGlu
Z1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVTdG9yZUZlbmNlKCk7CiAKICAgICAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7
CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCkt
Pm5leHQ7CkBAIC01MDM5LDYgKzUwNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFu
LnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCks
IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAgICAgICAg
ICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKSk7CkBAIC01MDQ2LDcgKzUwNDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAg
IGJhc2UsIHZhcmlhbnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0
dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5m
bygpLnR5cGUoKSk7CkBAIC01MDU0LDcgKzUwNjEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExNzQ2LDcgKzExNzUyLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZh
bHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlND
ZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9v
dXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlz
Yyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xh
c3MoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJl
dmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyB2b2lk
IGNvbXBpbGVTdHViKAogICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxl
ID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUo
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MihHUFJJbmZvOjpyZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVy
ZUlEKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQu
bHNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAg
ICBqaXQub3IzMihHUFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVz
cyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEs
NiArNDUxLDEyIEBAIEZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQogICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7CiB9CiAKK3ZvaWQg
T3V0cHV0OjpzdG9yZVN0b3JlRmVuY2UoKQoreworICAgIEZlbmNlVmFsdWUqIGZlbmNlID0gdGhp
cy0+ZmVuY2UoKTsKKyAgICBmZW5jZS0+d3JpdGUgPSBIZWFwUmFuZ2UoKTsKK30KKwogdm9pZCBP
dXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKIHsK
ICAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2
ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMVHlwZSk7
CiAgICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7CiAgICAgQjM6OkZlbmNlVmFs
dWUqIGZlbmNlKCk7CisgICAgdm9pZCBzdG9yZVN0b3JlRmVuY2UoKTsKIAogICAgIExWYWx1ZSBs
b2FkOFNpZ25FeHQzMihUeXBlZFBvaW50ZXIpOwogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihU
eXBlZFBvaW50ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJ
KHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTEgQEAgZW51bSBjbGFzcyBDZWxsU3Rh
dGUgOiB1aW50OF90IHsKICAgICAvLyBTbG90VmlzaXRvcnMgYXJlIGRvbmUuCiAgICAgQW50aHJh
Y2l0ZU9yQmxhY2sgPSAwLAogICAgIAotICAgIC8vIFRoZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVy
aW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90IGJlZW4gbWFya2VkIHll
dC4KKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdvaW5nIHRvIGJlIGlzIGluIGVkZW4uIER1cmluZyBH
QywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCiAg
ICAgTmV3V2hpdGUgPSAxLAogCi0gICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3
aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiB0aGlzIEdDIHRo
YXQgd2UgYXJlCi0gICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4gSWYgdGhpcyBpcyBhbiBlZGVuIEdD
LCB0aGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGVkZW4uCi0gICAgTmV3R3Jl
eSA9IDIsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nh
bm5lZCAtIGJ1dCBpdCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChpZiB0aGlzIGlzIGVkZW4K
LSAgICAvLyBHQykgb3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGluIHRoaXMgY3VycmVudCBH
QyAoYmVjYXVzZSBhIGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1ZXN0ZWQKLSAgICAvLyBy
ZS1ncmV5aW5nKS4KLSAgICBPbGRHcmV5ID0gMworICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAt
IGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkLgorICAgIEdyZXkgPSAyLAogfTsKIAogc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBibGFja1RocmVzaG9sZCBt
ZWFucyB4IGlzIEFudGhyYWNpdGVPckJsYWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYy
LDMgKzE2NCw0IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCwzNSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3Mg
SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZSB7CitwdWJsaWM6CisgICAgUmVzdW1lVGhlV29ybGRT
Y29wZShIZWFwJiBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQorICAgIHsKKyAgICAgICAg
aWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxv
ZygoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGltZSkubWlsbGlzZWNvbmRz
KCksICIgbXMuLi5dXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGVhcC5yZXN1bWVUaGVXb3Js
ZCgpOworICAgIH0KKyAgICAKKyAgICB+UmVzdW1lVGhlV29ybGRTY29wZSgpCisgICAgeworICAg
ICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBt
X2hlYXAuc3RvcFRoZVdvcmxkKCk7CisKKyAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAK
IHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEu
NVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZN
KiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAg
ICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRz
KHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90
VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211
dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAs
IG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29k
ZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxK
SVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2
bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5
ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5Pigp
KQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVh
ZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9t
YXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lk
IEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVz
dFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNl
cygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQog
ewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwor
ICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXpl
cnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDExNyAr
NDcxLDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJMRShK
SVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0p
OwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6bWFy
a1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91
YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Njb3Bl
KCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUgbWFya1RvRml4cG9p
bnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7CiAgICAgCi0gICAg
SGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFw
Um9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAg
ICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7CisgICAgaWYgKG1f
Y29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgeworICAgICAgICBtX29w
YXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFy
TWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7CisgICAg
fQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tz
KCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0jaWYgRU5BQkxFKFNBTVBM
SU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9m
aWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdlJ3JlIGRvbmUKLSAg
ICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBkYXRhIGJlY2F1c2Ug
b25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGluZ1Byb2ZpbGVyJ3Mgc3Rh
Y2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUKLSAgICAgICAgICAgIC8v
IG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIGl0Lgot
ICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2aXNpdFNhbXBsaW5n
UHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5sb2Nr
KCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CiAKLSAgICAgICAgaWYg
KG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAg
ICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5jbGVh
ck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJraW5nKCk7Ci0KLSAg
ICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0KLSAgICAgICAgbV9o
ZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10gKCkgewotICAgICAg
ICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRv
ckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RW
aXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNpdG9y
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7
Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKAorICAg
ICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxs
ZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBhcmFs
bGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICAgICAgICAg
ICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1f
YXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6Okhl
bHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NUaHJlYWRUeXBlOjpI
ZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQYXJhbGxl
bE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwotICAgICAgICAgICAg
ICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURy
YWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
UGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICAg
ICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJh
aW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xv
dFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90Vmlz
aXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRv
cnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAKLSAg
ICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAg
ewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0g
ICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpt
YXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFi
bGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25h
dGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBkb3VibGUgc3RvcHBlZE92
ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIHJhdGlvU3RlcCA9IDEu
MzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlhbFRpbWU7CisgICAgZm9y
ICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CisgICAgICAgIGlmIChP
cHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIg
Iik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0gdG9wT2ZMb29wVGltZSAr
IGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW87CisgICAgICAgIHN0
b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAgICAgICAgewotICAgICAg
ICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6
Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgVGltaW5nU2NvcGUg
cHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IGNv
bnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2
YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZh
dGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVS
b290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZl
Um9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVS
b290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgdmlzaXQg
cm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZpeHBvaW50IGl0ZXJhdGlv
biBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgorI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgorICAgICAgICAgICAgCisgICAgICAgIGlmICht
X3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQor
ICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcygqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvJiBw
YWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3Iudmlz
aXQoJnBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAm
JiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
cjo6bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFya0xpc3RTZXQpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkg
ZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAg
ICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBk
byBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRo
YXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAg
ICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAg
ICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMo
aGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RW
aXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0SGFu
ZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVy
KCk7Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hp
Y2tlbigpOwotICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAg
ICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRy
YWluKTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5n
U2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAg
IC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2
ZW5lc3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUg
b2JqZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAg
ICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9y
LnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxh
c3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5h
ZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgIG1faGFuZGxl
U2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hhbmRs
ZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0g
bV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9m
aWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisgICAgICAgICAg
ICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRD
aGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgbV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygp
OworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9jb2xsZWN0b3JTbG90Vmlz
aXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgICAg
ICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3Vy
ZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8gcnVu
bmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0
ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZv
ciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhh
cHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2Ug
bWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlz
CisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5k
IG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0CisgICAgICAgIC8vIEdD
LgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0
aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAgICAK
KyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2Vk
IGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQorICAgICAgICAvLyB3
aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCisgICAgICAgIG1fbXV0
YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9y
TWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRs
ZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9jb2xsZWN0b3JTbG90Vmlz
aXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisKKyAgICAgICAgeworICAg
ICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtU
b0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5h
YmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgU2xv
dFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAgICAgICAgICAgICAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1h
c3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ICE9
IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAgICAg
IFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CisgICAgICAg
ICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAg
ICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3RvbmljVGltZTo6bm93KCk7
CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVUb1Jlc3VtZTsKKyAg
ICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQogCiAgICAgewogICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjMsNyAr
NjQyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2b2lk
IEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAg
IG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5n
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2Rl
QmxvY2tzKTsKIH0KIApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5n
KCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OmJlZ2luTWFya2lu
ZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
CiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7Cisg
ICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAKICAgICB7CiAgICAgICAg
IFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2Uu
YmVnaW5NYXJraW5nIik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFy
a2luZygpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0
KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVy
ZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9C
ZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV92
bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKLSAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLSAgICBtX3Nsb3RWaXNp
dG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBl
bmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7CiAK
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAg
IGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAg
bV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25zZXJ2
YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVh
cDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsg
aS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFr
UmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0
Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAg
ZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNl
bmRpZgogfQogCkBAIC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVh
cFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9i
amVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAgZm9yIChhdXRv
JiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBSb290VmlzaXRvci52aXNp
dCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9y
LCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCBtX3Ns
b3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQot
dm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlv
bigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7
Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xv
dFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU2V0LnZpc2l0
U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhhbmRsZXM6XG4iLCBt
X3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0K
LQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJIYW5kbGUg
U3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQotewotI2lm
IEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2Ft
cGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICBBU1NF
UlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAgICBzYW1w
bGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiU2Ft
cGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIG1fc2xv
dFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0
TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQotewotICAgIGlmICh2bSgp
LT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+dmlz
aXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9n
Z2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUgUHJvZmlsZXIgdmlzaXQg
ZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17
Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7
Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsK
LSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90Vmlz
aXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIs
IG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwot
fQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9y
KQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFr
SGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRz
Iik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0
Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNp
dG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxp
dmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAg
ICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90
VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdj
U3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRD
b3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50
KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0Mg
JWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRD
b3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7
CiAgICAgfQpAQCAtODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3Vu
dHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2Nv
cGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3Rh
bEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0
aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0K
KyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAg
ICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9
IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2lu
ZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAot
ICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2Uu
ZW5kTWFya2luZygpOwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVt
YmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAg
ICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFj
ayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0
J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVy
aW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQg
b2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2Ug
dGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0g
ICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4o
Y2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAg
ICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtl
ZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMg
d2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYg
dGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhp
cyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisg
ICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtl
ZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0
ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdz
IE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdl
IHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQg
c2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwg
YmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBu
b3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsK
IH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDk0LDI0ICsxMDQwLDE0
IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQo
KTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwog
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFMb2coIltHQzogIiwgY2Fw
YWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMo
KTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBr
YiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAg
IAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHsK
LSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklU
V29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pKQotICAgICAgICAg
ICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAg
ICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUp
OwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgaWYgKG1fY29sbGVj
dGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBz
ZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CkBAIC0xMTMxLDEyICsx
MDY3LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3ZlcmlmaWVy
LT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsK
ICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAgICBz
dG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsK
KyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAgIAogICAgIGlmIChtX3Zl
cmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJp
Zmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzExMDYsOCBAQCB2b2lkIEhl
YXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAg
ZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNUaW1l
IGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVyIC0g
bV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJlZm9y
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQogICAgIAogICAgIHsKQEAg
LTExOTYsMTAgKzExMjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIHN0b3BU
aGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworCisjaWYgRU5BQkxFKEpJ
VCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAg
ICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkK
KyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQp
CisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9w
Q2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1f
c3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcg
cmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhl
ciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBp
cyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAg
IC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHBy
ZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0
aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0
ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2Nh
dGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0
VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJ
c1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0Njks
MTAgKzE0MjUsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMbwog
CiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NT
Y29wZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKLSAgICBkZWxl
dGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOwor
ICAgIHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOworICAg
ICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVTb3VyY2VQ
cm92aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAgICB9
CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAg
Y29sbGVjdEFzeW5jKCk7CiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0o
KS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKIH0KQEAg
LTE1NTQsMjMgKzE1MTUsOSBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9u
YWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxlY3QoKTsKIH0KIAotdm9pZCBI
ZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsKLSAgICBtX3N0cnVjdHVyZUlEVGFi
bGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpCiB7Ci0gICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6
RWRlbikgewotICAgICAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZmZXIucmVzZXQoKTsKLX0K
LQotdm9pZCBIZWFwOjpzdG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9w
QWxsb2NhdGluZygpOworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKIH0K
IAogdm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xOTU0LDcgKzE5MDEsNyBAQCBi
b29sIEhlYXA6OmNhbkNvbGxlY3QoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFt
X2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChjb2xsZWN0
aW9uU2NvcGUoKSB8fCBtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykK
KyAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0MpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5NzYsMTIgKzE5MjMs
OCBAQCBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3koKQogICAgIHJldHVybiBtYXlCZUdD
VGhyZWFkKCkgfHwgbXV0YXRvclN0YXRlKCkgIT0gTXV0YXRvclN0YXRlOjpSdW5uaW5nOwogfQog
Ci12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUs
IHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90
IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dHJh
IG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBp
ZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRl
ID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBj
b3VudGVyID0gJm1fZXh0cmFNZW1vcnlTaXplOwogICAgIAogICAgIGZvciAoOzspIHsKQEAgLTE5
OTIsMTIgKzE5MzUsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxs
CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIEhlYXA6OnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBI
ZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dGVybmFsIG1lbW9yeSB0aGF0IHdh
cyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNj
b3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6
T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0
ZXJuYWxNZW1vcnlTaXplOwogCiAgICAgZm9yICg7OykgewpAQCAtMjA5MSw0ICsyMDMwLDExIEBA
IHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0KICNlbmRpZiAvLyBV
U0UoQ0YpCiAKK3ZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkKK3sKKyAgICBtX2lz
U2FmZVRvQ29sbGVjdCA9IHRydWU7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3Vz
bHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsy
Miw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAi
R0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKQEAgLTM1
LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1ZGUgIk11dGF0b3JT
dGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgog
I2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJUaW55Qmxvb21GaWx0ZXIu
aCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBAIC03MCw3ICs3MCw5IEBA
IGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNWYWx1ZTsK
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIE1hcmtTdGFja0FycmF5OwogY2xh
c3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFN0b3BJ
Zk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTEyOSw3ICsxMzEsOCBAQCBwdWJsaWM6
CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsg
fQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuIG1fbWFjaGlu
ZVRocmVhZHM7IH0KIAotICAgIGNvbnN0IFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fc2xvdFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRvciYgY29sbGVjdG9yU2xv
dFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsgfQorICAgIE1hcmtT
dGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gKm1fbXV0YXRvck1hcmtTdGFj
azsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBmdWxsQWN0
aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFj
ayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTE2OCw3ICsxNzEsNyBAQCBwdWJsaWM6CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxsKiwgRmluYWxpemVy
KTsKICAgICB2b2lkIGFkZEV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2UqKTsKIAotICAgIHZvaWQg
bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7IH0KKyAg
ICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIGJvb2wgaXNTYWZlVG9Db2xsZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3Q7CkBAIC0yMDMsMTEgKzIwNiwx
MSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0aW9uczogQ2FsbGlu
ZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwogICAgIC8vIG1lbW9yeSBncm93dGgu
CiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3QpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRT
dGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChzaXplX3QpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIC8v
IFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRyYSBtZW1vcnkgdGhhdCBs
aXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
cG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6
ZV90KTsKICAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlTaXplKCkgeyByZXR1cm4gbV9leHRlcm5h
bE1lbW9yeVNpemU7IH0KICNlbmRpZgogCkBAIC0zOTEsNiArMzk0LDkgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhlV29ybGQoKTsKICAgICAK
KyAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIGZyaWVuZCBjbGFzcyBSZXN1bWVU
aGVXb3JsZFNjb3BlOworICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0b3IoKTsKICAgICB2b2lk
IHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQyMiwzMSArNDI4LDE4IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxs
U3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1
c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFy
a2luZygpOwogICAgIAotICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7Cisg
ICAgdm9pZCBtYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZ2F0
aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVySlNTdGFj
a1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVy
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAg
IHZvaWQgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAgICB2b2lkIHZpc2l0U21hbGxT
dHJpbmdzKCk7CiAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJik7CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwog
ICAgIHZvaWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7Ci0gICAgdm9pZCB2
aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEFy
Z3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0RXhjZXB0aW9u
KEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290
VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsK
LSAgICB2b2lkIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRUeXBlUHJv
ZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgIHZvaWQgdHJhY2VD
b2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVz
KEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNp
dG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsK
ICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE4LDcgKzUxMSw4IEBAIHByaXZhdGU6CiAK
ICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAotICAgIFNsb3RWaXNp
dG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4g
bV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1
c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0
bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRo
ZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTU3Miw3ICs1NjYs
OCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsKICAgICBDb25kaXRpb24g
bV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRN
YXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZENv
bGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1f
c2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlUGFy
YWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxs
ZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsg
ZmFsc2UgfTsKQEAgLTYwMCw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0
b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2ln
bmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdv
cmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAg
ICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4gbV9yZXF1ZXN0czsKICAg
ICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheSgpCiB7CiB9CiAK
K3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQor
eworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAgICAKKyAgICAvLyBSZW1v
dmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0LgorICAgIEdDQXJyYXlT
ZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsK
KyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJIZWFkID0gb3RoZXIubV9z
ZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgb3Ro
ZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIubV9zZWdtZW50cy5hcHBl
bmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzICs9IG1f
bnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMgPSAwOworICAgIAorICAg
IC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBwbGFjZXMuCisgICAgbV9z
ZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50cy5wdXNoKG90aGVySGVh
ZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21l
bnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAgcmVmaWxsKCk7
CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAgICAgICBvdGhlci5hcHBl
bmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0
ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAgICAvLyBUcnkgdG8gZG9u
YXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gMjA4NTcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJheSA6IHB1YmxpYyBHQ1Nl
Z21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAotICAgIHZvaWQgZG9uYXRl
U29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2b2lkIHN0ZWFsU29tZUNl
bGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwor
ICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgZG9uYXRlU29t
ZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShN
YXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNiBA
QCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkCiB2b2lkKiBNYXJrZWRB
bGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7CiAg
ICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRl
ZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCiAgICAgRnJl
ZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBU
b0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDE0IEBAIE1hcmtlZEJs
b2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1faGFuZGxlKGhhbmRsZSkK
ICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQ
b2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxv
Y2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5k
bGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBz
d2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVk
TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dl
ZXBNb2RlID09IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25N
b2RlID09IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7
CiAgICAgCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwog
CkBAIC05OSw3ICsxMDEsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0
eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCkgewotICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtz
U3RhbGUpOworICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUgfHwgYmxvY2su
bV9tYXJrcy5pc0VtcHR5KCkpOwogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RD
ZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRB
dG9tIC0gMSkpOwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsg
Y2VsbFNpemUoKTsKQEAgLTExMSw2ICsxMTMsOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkodGhpcywgdHJ1ZSk7Cisg
ICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIGJsb2NrLm1fbG9j
ay51bmxvY2soKTsKICAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5
bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CiAgICAgICAgIGlmIChmYWxzZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0
aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIs
IG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsKQEAgLTEyMywxNyArMTI3LDExIEBA
IEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBGcmVlQ2VsbCog
aGVhZCA9IDA7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBib29sIGlzRW1wdHkgPSB0cnVl
OwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBt
X2F0b21zUGVyQ2VsbCkgewotICAgICAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5Ci0gICAg
ICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGJsb2NrLm1fbWFya3Mu
Z2V0KGkpKQotICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgewotICAgICAgICAgICAg
aXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAg
ICAgCisgICAgVmVjdG9yPHNpemVfdD4gZGVhZENlbGxzOworICAgIGF1dG8gaGFuZGxlRGVhZENl
bGwgPSBbJl0gKHNpemVfdCBpKSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnBy
ZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYmxvY2suYXRvbXMoKVtpXSk7CiAKLSAgICAgICAgaWYg
KGRlc3RydWN0aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9uICYmIGVtcHR5TW9kZSA9PSBOb3RF
bXB0eSkKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3Rv
cnMgJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlND
ZWxsKj4oY2VsbCktPmNhbGxEZXN0cnVjdG9yKCp2bSgpKTsKIAogICAgICAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewpAQCAtMTQ0LDEyICsxNDIsMzMgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGVhZCA9IGZyZWVD
ZWxsOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQorICAgIH07CisgICAgZm9yIChz
aXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxs
KSB7CisgICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKKyAgICAgICAgICAgICYmICgo
bWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAg
ICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAm
JiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7CisgICAgICAgICAgICBpc0VtcHR5ID0gZmFs
c2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNS
dW5uaW5nKQorICAgICAgICAgICAgZGVhZENlbGxzLmFwcGVuZChpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQotCisgICAgCiAgICAgLy8gV2Ug
b25seSB3YW50IHRvIGRpc2NhcmQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMgaWYgd2UncmUgY3Jl
YXRpbmcgYSBGcmVlTGlzdCwKICAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgbG9zZSBpbmZvcm1h
dGlvbiBvbiB3aGF0J3MgY3VycmVudGx5IGFsaXZlLgogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dl
ZXBUb0ZyZWVMaXN0ICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkK
ICAgICAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNp
b247CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBibG9jay5t
X2xvY2sudW5sb2NrKCk7CisgICAgCisgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hh
c0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgOiBkZWFkQ2VsbHMpCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKKyAgICB9CiAK
ICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6bGlzdChoZWFkLCBjb3VudCAqIGNlbGxT
aXplKCkpOwogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMTc3LDEy
ICsxOTYsMTggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAg
IAogICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICAKLSAg
ICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAg
ICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxOZWVkc0Rlc3RydWN0aW9u
Pihzd2VlcE1vZGUpOwotICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxE
b2VzTm90TmVlZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOworICAgIGlmIChzcGFjZSgpLT5pc01h
cmtpbmcoKSkKKyAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOworICAgIAorICAgIGlmICht
X2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBp
ZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJT
ZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmlu
Zz4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVN
b2RlPEJsb2NrSGFzRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CisgICAgfQorICAgIHJldHVybiBz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc05vRGVzdHJ1Y3RvcnM+KHN3ZWVw
TW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+Cit0
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVj
dGlvbk1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVj
dFNjcmliYmxlTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChzY3JpYmJsZUZy
ZWVDZWxscygpKQpAQCAtMTkwLDcgKzIxNSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGU8ZGVz
dHJ1Y3Rpb25Nb2RlLCBEb250U2NyaWJibGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERl
c3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmli
YmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNj
cmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIC8v
IEl0J3Mgbm90IG9idmlvdXMsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBrbm93IGlmIHRo
ZSBibG9jayBpcyBlbXB0eS4gSXQncyB0aGUgb25seQpAQCAtMjA1LDcgKzIzMCw3IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxw
ZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZDxOb3RFbXB0eSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3Jp
YmJsZU1vZGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6
OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxN
YXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCiB7CiAgICAgaWYgKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpCkBAIC0yMTMsNyArMjM4
LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZTxlbXB0eU1vZGUsIGRlc3RydWN0aW9uTW9kZSwg
c2NyaWJibGVNb2RlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkPihzd2VlcE1vZGUpOwogfQog
Ci10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0
cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJs
ZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1v
ZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1w
dHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1v
ZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2Ny
aWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlB
bGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJT
ZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBpZiAoc3dlZXBNb2Rl
ID09IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTIyMSwxMCArMjQ2LDE2IEBAIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RN
YXJrc01vZGU8ZW1wdHlNb2RlLCBTd2VlcE9ubHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVN
b2RlLCBuZXdseUFsbG9jYXRlZE1vZGU+KCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpI
YW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9k
ZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRC
bG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
Y3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXds
eUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBl
clNlbGVjdE1hcmtzTW9kZSgpCiB7Ci0gICAgaWYgKGFyZU1hcmtzU3RhbGUoKSkKKyAgICBIZWFw
VmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCk7CisgICAg
Ym9vbCBtYXJrc0FyZVVzZWZ1bCA9ICFibG9jaygpLmFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNp
b24pOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgbWFya3NB
cmVVc2VmdWwgfD0gYmxvY2soKS5tYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJr
aW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKCFtYXJrc0FyZVVzZWZ1bCkKICAgICAgICAgcmV0
dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9k
ZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzU3RhbGU+KCk7CiAgICAg
cmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9u
TW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTm90U3RhbGU+KCk7
CiB9CkBAIC0yNDEsMjQgKzI3Miw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNG
cmVlTGlzdGUKICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5
QWxsb2NhdGVkRnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVi
bGljOgotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBi
bG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVy
YXRpb25TdGF0dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNv
bnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09
ICZtX2Jsb2NrLT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQo
Y2VsbCk7Ci0gICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9p
ZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJl
ZUxpc3QpCiB7CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEyICsyNzksMTcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCkt
PmlzQWxsb2NhdGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAg
ICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkg
YWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlk
bid0IHVzZSB0aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAog
ICAgICAgICAvLyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBi
ZWZvcmUuCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRh
TG9nKCJGcmVlIGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJh
Y2sgdG8gYSBjb2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXds
eQogICAgIC8vIGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkg
bWFya2VkLCBzbyB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2
ZSB2cyBkZWFkLiAKQEAgLTI3OSwxMiArMjk3LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3RvcEFsbG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAg
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0
aGlzKTsKLSAgICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAg
ICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1
cyB7CisgICAgICAgICAgICBzZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVh
Y2hGcmVlQ2VsbCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNl
bGwpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJG
cmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1f
YXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAg
ICAgIGNlbGwtPnphcCgpOwogICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsK
QEAgLTMwNywxMCArMzMwLDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5j
ZVRvRmkKIAogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygp
CiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQo
IWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0
ZWQoKSk7CiAKICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYg
KGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2Nh
dGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVk
IHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZy
ZWVMaXN0KCk7CiAgICAgfQpAQCAtMzU0LDYgKzM4MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCkt
PmlzQWxsb2NhdGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NE
dXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhv
dXQgZG9pbmcgYW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cg
dGhhdCB0aGUgYmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gs
IG9yIHRoYXQgdGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlv
dXMgR0MuIFNvLCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAg
ICAgIC8vIHdheS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBo
YXZlIG5ld2x5QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzkxLDggQEAgdm9p
ZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVh
dGVkIGEgbmV3bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9
IGVsc2UgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50
ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXds
eUFsbG9jYXRlZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAg
ICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2Nh
dGVkVmVyc2lvbikgewogICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtl
ZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKQEAg
LTQyOSw3ICs0NjAsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVl
CiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRs
ZTo6ZGlkQ29uc3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsK
ICAgICBtX2lzRnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFsbG9jYXRvcigpLT5zZXRJc0FsbG9j
YXRlZCh0aGlzLCB0cnVlKTsKKyAgICBhbGxvY2F0b3IoKS0+YXRvbWljU2V0QW5kQ2hlY2tJc0Fs
bG9jYXRlZCh0aGlzLCB0cnVlKTsKIH0KIAogc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lv
biAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTAsMzAgKzE5MCwzMiBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgSGFuZGxlKEhlYXAmLCB2b2lkKik7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0
ZTxEZXN0cnVjdGlvbk1vZGU+CisgICAgICAgIGVudW0gU3dlZXBEZXN0cnVjdGlvbk1vZGUgeyBC
bG9ja0hhc05vRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1
Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcgfTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRl
PFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVj
dFNjcmliYmxlTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGVudW0gU2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxlLCBTY3JpYmJsZSB9OwogICAgICAg
ICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgor
ICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgogICAg
ICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgPSBTd2Vl
cE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gRW1wdHlNb2RlIHsgSXNFbXB0eSwg
Tm90RW1wdHkgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dl
ZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBI
ZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAg
ICAgICAKICAgICAgICAgZW51bSBOZXdseUFsbG9jYXRlZE1vZGUgeyBIYXNOZXdseUFsbG9jYXRl
ZCwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxh
dGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0
ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2Rl
LCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dl
ZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAg
Ci0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUs
IFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0
eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdE1hcmtz
TW9kZSgpOwogICAgICAgICAKICAgICAgICAgZW51bSBNYXJrc01vZGUgeyBNYXJrc1N0YWxlLCBN
YXJrc05vdFN0YWxlIH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3
ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya3NNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dl
ZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJr
c01vZGU+CiAgICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKICAgICAgICAgICAg
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTIsNyArNDEyLDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvck1hcmtpbmcoKQogCiB2
b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBBU1NFUlQoaXNJdGVy
YXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAgWyZdIChNYXJrZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9j
YXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUs
NyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAogU2xvdFZp
c2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX3N0YWNrKCkKLSAgICAsIG1f
Ynl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDApCisgICAgOiBtX2J5dGVzVmlz
aXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUo
ZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lv
bikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAp
CiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIGNsZWFyTWFya1N0YWNrKCk7
CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0
TWFya2luZygpCkBAIC0xMDksMTYgKzEwNywxNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFy
dE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgUkVMRUFTRV9B
U1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0g
ICAgbV9ieXRlc0NvcGllZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBT
bmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50Q2VsbCk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQogCi12b2lkIFNsb3RWaXNpdG9y
OjpjbGVhck1hcmtTdGFjaygpCit2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQog
ewotICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmNsZWFyKCk7Cisg
ICAgbV9tdXRhdG9yU3RhY2suY2xlYXIoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
KENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKQEAgLTE0OCw3ICsxNDcsNyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRl
KENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxT
dGF0ZTo6R3JleSk7CiAKICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjEwLDcgKzIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90Vmlz
aXRvcjo6c2V0TWFya2UKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBvYmplY3QgaXMgZ3JleSBh
bmQgdGhhdDoKICAgICAvLyBJbiBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6IGl0J3MgdGhlIGZpcnN0
IHRpbWUgaXQgaXMgZ3JleSBpbiB0aGlzIEdDIGN5Y2xlLgogICAgIC8vIEluIGNhc2Ugb2YgZWRl
biBjb2xsZWN0aW9uOiBpdCdzIGEgbmV3IG9iamVjdCB0aGF0IGJlY2FtZSBncmV5IHJhdGhlciB0
aGFuIGFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2Vs
bFN0YXRlOjpOZXdHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5
KTsKICAgICAKICAgICBhcHBlbmRUb01hcmtTdGFjayhjb250YWluZXIsIGNlbGwpOwogfQpAQCAt
MjI4LDE2ICsyMjcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRU
bwogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CiAgICAg
QVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkg
PT0gQ2VsbFN0YXRlOjpOZXdHcmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6
T2xkR3JleSk7CisgICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6R3Jl
eSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAgICAKLSAgICAvLyBGSVhN
RTogVGhlc2UgImp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRzIHRoZXNlIGZpZWxkcyBi
ZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gQnV0Ci0gICAgLy8gdGhhdCB3b24ndCBiZSB0aGUg
Y2FzZSB3aGVuIHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAgbV92aXNpdENvdW50Kys7CiAgICAg
bV9ieXRlc1Zpc2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXplKCk7CiAgICAgCi0gICAgbV9zdGFj
ay5hcHBlbmQoY2VsbCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisK
K3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwq
IGNlbGwpCit7CisgICAgbV9tdXRhdG9yU3RhY2suYXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCkBAIC0yOTQsMTIgKzI5
NiwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgCiAg
ICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAg
ICAKLSAgICBtX29sZENlbGxTdGF0ZSA9IGNlbGwtPmNlbGxTdGF0ZSgpOworICAgIGlmIChmYWxz
ZSkgeworICAgICAgICBkYXRhTG9nKCJWaXNpdGluZyAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAg
ICAgICAgaWYgKG1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgICAgIGRhdGFMb2co
IiAobXV0YXRvcikiKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CiAgICAgCi0gICAg
Ly8gVGhlcmUgaXMgbm8gcmFjZSBoZXJlIC0gdGhlIGNlbGwgc3RhdGUgY2Fubm90IGNoYW5nZSBy
aWdodCBub3cuIEdyZXkgb2JqZWN0cyBjYW4gb25seSBiZQotICAgIC8vIHZpc2l0ZWQgYnkgb25l
IG1hcmtpbmcgdGhyZWFkLiBOZWl0aGVyIHRoZSBiYXJyaWVyIG5vciBtYXJraW5nIHdpbGwgY2hh
bmdlIHRoZSBzdGF0ZSBvZiBhbgotICAgIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgZ3JleS4K
LSAgICBBU1NFUlQobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5IHx8IG1fb2xk
Q2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgLy8gRnVubnkgc3Rvcnk6IGl0
J3MgcG9zc2libGUgZm9yIHRoZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxyZWFkeSwgaWYgd2UgYmFy
cmllciB0aGUgb2JqZWN0IGF0CisgICAgLy8gYWJvdXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0J3Mg
bWFya2VkLiBUaGF0J3MgZmluZS4gSXQncyBhIGduYXJseSBhbmQgc3VwZXItcmFyZSByYWNlLiBJ
dCdzCisgICAgLy8gbm90IGNsZWFyIHRvIG1lIHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCBvciBw
cm9maXRhYmxlIHRvIGJhaWwgaGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBi
bGFjay4KICAgICAKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpBbnRocmFjaXRl
T3JCbGFjayk7CiAgICAgCkBAIC0zMjYsMjMgKzMzMywyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
U2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2hl
YXBTbmFwc2hvdEJ1aWxkZXIpKSB7Ci0gICAgICAgIGlmIChtX29sZENlbGxTdGF0ZSA9PSBDZWxs
U3RhdGU6Ok5ld0dyZXkpCisgICAgICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQog
ICAgICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNvbnN0X2Nhc3Q8
SlNDZWxsKj4oY2VsbCkpOwogICAgIH0KIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25v
d25QYXJhbGxlbCgpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hcmtT
dGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pCiB7CiAgICAgLy8gTk9URTogQmVj
YXVzZSB3ZSByZS10cnkgb2Z0ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUgY29uc2VydmF0aXZlLCBh
bmQKICAgICAvLyBhc3N1bWUgdGhhdCBkb25hdGluZyBpcyBub3QgcHJvZml0YWJsZS4KIAogICAg
IC8vIEF2b2lkIGxvY2tpbmcgd2hlbiBhIHRocmVhZCByZWFjaGVzIGEgZGVhZCBlbmQgaW4gdGhl
IG9iamVjdCBncmFwaC4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQorICAgIGlmIChmcm9t
LnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFk
eSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUK
ICAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1f
aGVhcC5tX3NoYXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAgaWYgKHRvLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUg
Y29uc2VydmF0aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCkBAIC0zNTIsMjYgKzM1OSw0MyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUg
c29vbiwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjayk7CisgICAgZnJvbS5kb25hdGVTb21lQ2VsbHNUbyh0byk7CiAKICAg
ICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFy
YWxsZWwoKQoreworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayk7CisgICAgZG9uYXRlS25vd25QYXJhbGxl
bChtX211dGF0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworfQor
Cit2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAg
QVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNF
bXB0eSgpKSB7Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxh
bmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAg
ICAgIHZpc2l0Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOworICAgIHdoaWxlICgoIW1f
Y29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYm
ICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CisgICAg
ICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3
ZWVuUmViYWxhbmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50
ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2su
cmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAg
IC8vIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNl
IG9mIHRoZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBvZgorICAgICAgICAgICAgLy8gbWFya2luZy4g
TWFya2luZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdp
bGwgdmlzaXQgaXQKKyAgICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdh
eXMgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgbWFya2VkLgorICAgICAgICAgICAgbV9pc1Zpc2l0aW5n
TXV0YXRvclN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3du
ID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0
YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAg
ICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9
CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAgICAgCiAgICAgbWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJv
bVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQorU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5N
b2RlIHNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VS
VChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0MTYsNjAgQEAgdm9pZCBT
bG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIC8vIFdh
aXQgdW50aWwgZWl0aGVyIHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9yIHVudGlsIHRoZXJlIGlz
IHNvbWUgd29yawogICAgICAgICAgICAgICAgIC8vIGZvciB1cyB0byBkby4KICAgICAgICAgICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0
aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3Vs
dDo6VGltZWRPdXQ7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAv
LyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkg
c2xlZXBpbmcgc2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMg
dGhlcmUgd29yayB0byBiZSBkb25lPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChs
b2NrLCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CisK
KyAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywg
bGV0IHRoZSBtYXN0ZXIga25vdy4KICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVh
cC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFs
bCgpOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
LndhaXQoCi0gICAgICAgICAgICAgICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCgKKyAgICAgICAgICAgICAgICAg
ICAgbG9jaywgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHko
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFt
X2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAg
ICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBJcyB0aGUgY3VycmVudCBwaGFzZSBkb25lPyBJZiBzbywgcmV0dXJuIGZyb20gdGhpcyBmdW5j
dGlvbi4KICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxk
RXhpdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5t
X3NoYXJlZE1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
KTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAg
ICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5t
X251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JT
dGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vy
cyk7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2Vycysr
OwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRp
bWVvdXQpOwogICAgIH0KIH0KIApAQCAtNDUzLDcgKzQ4OSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKiByb290KSBjb25zdAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2Rl
KTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hl
YXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs1MDIsNiBA
QCBUcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1p
eGVkVHJpU3RhdGU7CiB9CiAKLWludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsK
LSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9v
dHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwot
fQotCiB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewog
ICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTI1LDE0IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpk
b25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0g
ICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6
bWVyZ2VPcGFxdWVSb290cygpCiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHko
KSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVt
cHR5LgogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1f
b3BhcXVlUm9vdHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9v
dHMpCkBAIC01MjYsMTAgKzU1Myw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25k
aXRpb25hbEYKICAgICAgICAgbV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3Zl
TmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9y
OjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtT
dGFjaygpKQotICAgICAgICBkYXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNv
bGxlY3RvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBN
dXRhdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJP
cGFxdWVSb290U2V0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihI
ZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0
YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJr
U3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYg
Y29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1h
cmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7
IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBt
dXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAK
ICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFw
KCkgY29uc3Q7CkBAIC04NCwyNCArODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5z
T3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50
KCk7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYm
IG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmco
KTsKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZv
aWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25z
dCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9p
ZCBkcmFpbigpOwotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1v
bm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZv
aWQgZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6
aW5maW5pdHkoKSk7CiAgICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWlu
LCBNYXN0ZXJEcmFpbiB9OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9k
ZSk7CisgICAgZW51bSBjbGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07
CisgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwg
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAg
ICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRp
dGlvbmFsRmluYWxpemVycygpOwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAg
ICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1Zl
cnNpb247IH0KIAorICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0x
NDEsMjEgKzE0NSwyMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5l
clR5cGU+CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxs
Kik7CiAgICAgCisgICAgdm9pZCBhcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxs
Kik7CisgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAg
ICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2
b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVS
b290c0lmUHJvZml0YWJsZSgpOwogCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9u
YXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRv
KTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9j
b2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBP
cGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1
cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXpl
X3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90
IG1fdmlzaXRDb3VudDsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2
NSw3ICsxNzEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFw
U25hcHNob3RCdWlsZGVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7
IG51bGxwdHIgfTsKLSAgICBDZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lz
VmlzaXRpbmdNdXRhdG9yU3RhY2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9E
SVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwx
NSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7
Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNp
emUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZp
c2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRv
clN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEs
NyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAgICAgICAgIGpp
dC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1Y3R1cmVJRElzVmFsaWQpOwogICAgICAgICBjb3JyZWN0
U3RydWN0dXJlLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBjb3JyZWN0SW5kZXhpbmdUeXBl
ID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRl
eGluZ1R5cGUoKSkpOworICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUgPSBqaXQuYnJh
bmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpKTsKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihB
SEluZGV4aW5nVHlwZUlzVmFsaWQpOwogICAgICAgICBjb3JyZWN0SW5kZXhpbmdUeXBlLmxpbmso
JmppdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZp
c2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtOTk2LDcgKzk5Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVcKICAgICAgICAgc3RvcmUzMihpbmRleGluZ1R5cGUsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAgICB9CiAKLSAgICBsb2Fk
OChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBpbmRleGluZ1R5
cGUpOworICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNj
T2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBS
ZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4
NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI2Nyw4ICsyMjY3LDggQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9y
YWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZs
eSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBy
ZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQog
CkBAIC0yMjc3LDggKzIyNzcsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxs
b2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIG5ld1NpemUpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5n
aW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0
LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2
bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24uCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7
CiAgICAgICAgICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJl
Z1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNT
Y29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2sp
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25D
aGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihn
ZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNo
ZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFRE
WiBjaGVja3Mgc3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwg
dmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVu
dEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFB1
dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlv
bls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTE1NywxMSArMTE1
NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3RyCiAgICAgaW50
IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAotICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyMDg1
NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnlJRAogICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCiAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKICAgICAgICAg
ICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0KKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQ
cm9wZXJ0eUFjY2VzcygqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CiAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlkU2VsZlBhdGNoLCBzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4
LDYgKzE3OCwxNSBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBT
VEFUSUNfQVNTRVJUKEV2YWxDb2RlID09IDEpOwogICAgIFNUQVRJQ19BU1NFUlQoRnVuY3Rpb25D
b2RlID09IDIpOwogICAgIFNUQVRJQ19BU1NFUlQoTW9kdWxlQ29kZSA9PSAzKTsKKyAgICAKKyAg
ICBTVEFUSUNfQVNTRVJUKElzQXJyYXkgPT0gMHgwMSk7CisgICAgU1RBVElDX0FTU0VSVChJbmRl
eGluZ1NoYXBlTWFzayA9PSAweDBFKTsKKyAgICBTVEFUSUNfQVNTRVJUKE5vSW5kZXhpbmdTaGFw
ZSA9PSAweDAwKTsKKyAgICBTVEFUSUNfQVNTRVJUKEludDMyU2hhcGUgPT0gMHgwNCk7CisgICAg
U1RBVElDX0FTU0VSVChEb3VibGVTaGFwZSA9PSAweDA2KTsKKyAgICBTVEFUSUNfQVNTRVJUKENv
bnRpZ3VvdXNTaGFwZSA9PSAweDA4KTsKKyAgICBTVEFUSUNfQVNTRVJUKEFycmF5U3RvcmFnZVNo
YXBlID09IDB4MEEpOworICAgIFNUQVRJQ19BU1NFUlQoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBl
ID09IDB4MEMpOwogCiAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KChy
ZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxKU0NlbGw+Kj4oMHg0MDAwKS0+c2xvdCgpKSkg
LSAweDQwMDApKTsKICAgICBzdGF0aWNfYXNzZXJ0KFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPT0g
MHg2LCAiTExJbnQgYXNzdW1lcyBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrIGlzID09IDB4NiIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1
LDYgKzE1MDUsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5VmFsT3V0T2ZCb3Vu
ZHM6CiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDApCiAgICAgc3RvcmViIDEsIEFycmF5
UHJvZmlsZTo6bV9vdXRPZkJvdW5kc1t0MF0KKyAgICBqbXAgLm9wR2V0QnlWYWxTbG93CiAKIC5v
cEdldEJ5VmFsTm90SW5kZXhlZFN0b3JhZ2U6CiAgICAgIyBGaXJzdCBsZXRzIGNoZWNrIGlmIHdl
IGV2ZW4gaGF2ZSBhIHR5cGVkIGFycmF5LiBUaGlzIGxldHMgdXMgZG8gc29tZSBib2lsZXJwbGF0
ZSB1cCBmcm9udC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMzMzLDE0ICszMzMsMTQgQEAgZWxzZQogZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmlu
ZyBhYm91dCBidXR0ZXJmbGllcy4KLWNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDEK
LWNvbnN0IEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDMwCi1jb25zdCBOb0luZGV4aW5nU2hh
cGUgICAgICAgICAgPSAwCi1jb25zdCBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAyMAotY29u
c3QgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMjIKLWNvbnN0IENvbnRpZ3VvdXNTaGFwZSAg
ICAgICAgICA9IDI2Ci1jb25zdCBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAyOAotY29uc3Qg
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMzAKK2NvbnN0IElzQXJyYXkgICAgICAgICAgICAg
ICAgICA9IDB4MDEKK2NvbnN0IEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEUKK2NvbnN0
IE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4MDAKK2NvbnN0IEludDMyU2hhcGUgICAgICAg
ICAgICAgICA9IDB4MDQKK2NvbnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDB4MDYKK2Nv
bnN0IENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDB4MDgKK2NvbnN0IEFycmF5U3RvcmFnZVNo
YXBlICAgICAgICA9IDB4MEEKK2NvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEMK
IAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA2CkBAIC04ODcsNyArODg3
LDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogICAgIGNvbnN0
IGluZGV4aW5nVHlwZSA9IGNlbGxBbmRJbmRleGluZ1R5cGUgCiAgICAgbG9hZGkgSlNDZWxsOjpt
X3N0cnVjdHVyZUlEW2NlbGxdLCBzY3JhdGNoCiAgICAgc3RvcmVpIHNjcmF0Y2gsIEFycmF5UHJv
ZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZUlEW3Byb2ZpbGVdCi0gICAgbG9hZGIgSlNDZWxsOjpt
X2luZGV4aW5nVHlwZVtjZWxsXSwgaW5kZXhpbmdUeXBlCisgICAgbG9hZGIgSlNDZWxsOjptX2lu
ZGV4aW5nVHlwZUFuZE1pc2NbY2VsbF0sIGluZGV4aW5nVHlwZQogZW5kCiAKIG1hY3JvIHNraXBJ
ZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAy
MDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNSArOTQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKICAgICBEZWZlckdDIG1fZGVmZXJH
QzsKLSNlbHNlCi0gICAgc3RydWN0IE5vRGVmZXIgewotICAgICAgICBOb0RlZmVyKEhlYXAmIGhl
YXApIDogbV9oZWFwKGhlYXApIHsgfQotICAgICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgfTsKLSAg
ICBOb0RlZmVyIG1fZGVmZXJHQzsKLSNlbmRpZgogfTsKIAogY2xhc3MgQ29uY3VycmVudEpJVExv
Y2tlciA6IHB1YmxpYyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMyBA
QCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlCiAgICAgVHlwZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAodGhpc09iamVj
dC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewotICAgICAgICBzbG90LnNldFZhbHVl
KHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOwor
ICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRl
eCk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgcmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGJvb2wg
cmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGlu
ZGV4LCBzbG90KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgpAQCAtMTI5LDcgKzEzMSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0
QnlJbmRleCgKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihjZWxsKTsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotCisgICAgCiAgICAgaWYgKHRoaXNPYmplY3QtPmNh
bkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKICAgICAgICAgdGhpc09iamVjdC0+c2V0SW5k
ZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lv
biAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAj
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDIx
ICs1MywyNSBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAweDAxOwogCiAvLyBUaGUgc2hh
cGUgb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KLXN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMHgwRTsKLXN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMDsKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2Vm
dWwgZm9yIGFycmF5cy4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAg
ICAgICAgICAgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUg
ICAgICAgICAgICAgID0gMHgwNjsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91
c1NoYXBlICAgICAgICAgID0gMHgwODsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlT
dG9yYWdlU2hhcGUgICAgICAgID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xv
d1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMHgwQzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW5kZXhpbmdTaGFwZU1hc2sgICAgICAgICAgICAgICA9IDB4MEU7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICAgICAgICAgPSAweDAwOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgICAgICAgID0gMHgw
MjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW50MzJTaGFwZSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIERvdWJsZVNoYXBlICAgICAgICAgICAgICAgICAgICAgPSAweDA2Oworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgICAgICAgID0gMHgw
ODsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgICAg
ICAgICA9IDB4MEE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3Jh
Z2VTaGFwZSAgICAgICAgPSAweDBDOwogCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4
aW5nU2hhcGVTaGlmdCAgICAgICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJl
ck9mSW5kZXhpbmdTaGFwZXMgICA9IDc7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4
aW5nU2hhcGVTaGlmdCAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzICAgICAgICAgID0gNzsKIAogLy8gQWRkaXRpb25hbCBm
bGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3Vh
bGx5CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSAweDEwOwor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgICAgICAg
ID0gMHgxMDsKKworLy8gVGhlIEluZGV4aW5nVHlwZSBmaWVsZCBvZiBKU0NlbGxzIGlzIHN0b2xl
biBmb3IgbG9ja3MuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tJ
c0hlbGQgICAgICAgICAgPSAweDIwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGlu
Z1R5cGVMb2NrSGFzUGFya2VkICAgICAgID0gMHg0MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxl
IGFycmF5IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBAIHN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVz
IGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJy
YXlUeXBlc0FuZEhpc3RvcnkgID0gQWxsQXJyYXlUeXBlcyB8IE1heUhhdmVJbmRleGVkQWNjZXNz
b3JzOwogCit0eXBlZGVmIExvY2tBbGdvcml0aG08SW5kZXhpbmdUeXBlLCBJbmRleGluZ1R5cGVM
b2NrSXNIZWxkLCBJbmRleGluZ1R5cGVMb2NrSGFzUGFya2VkPiBJbmRleGluZ1R5cGVMb2NrQWxn
b3JpdGhtOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5
MCw5IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0lu
ZGV4QmlhczsKICAgICAKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
dm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAKKyAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTEwNjMsMTMgKzEwNjUsMTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJy
YXlTdG9yYQogICAgIC8vIE5lZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBhcm91bmQgdGhlIHVuc2hp
ZnRDb3VudFNsb3dDYXNlKCksIHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBidXR0ZXJmbHkgaW4KICAg
ICAvLyBhIHdlaXJkIHN0YXRlOiBzb21lIHBhcnRzIG9mIGl0IHdpbGwgYmUgbGVmdCB1bmluaXRp
YWxpemVkLCB3aGljaCB3ZSB3aWxsIGZpbGwgaW4gaGVyZS4KICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CisgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CiAgICAg
CiAgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewog
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51
bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3Vu
dDsKICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50
KTsKLSAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdC
dXR0ZXJmbHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYm
IHZlY3Rvckxlbmd0aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3Jh
Z2UtPmJ1dHRlcmZseSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291
bnRTbG93Q2FzZSh2bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkwLDYgKzEw
OTQsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2kgKyBz
dGFydEluZGV4XS5jbGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NTcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw4ICsxMDAsMzIgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwogICAg
IGJvb2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBpc0FQSVZh
bHVlV3JhcHBlcigpIGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBidWlsdC1p
biBsb2NrLiBDdXJyZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYgeW91IG5l
ZWQgaXQuIEl0J3MKKyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRoYXQgdGhp
cyBsb2NrIGlzIGN1cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydzCisgICAg
Ly8gb3JkZXJpbmcgd2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3RydWN0dXJl
IGxvY2sgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2tJbnRlcm5hbExvY2so
KTsKKyAgICB2b2lkIHVubG9ja0ludGVybmFsTG9jaygpOworICAgIAorICAgIGNsYXNzIEludGVy
bmFsTG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEludGVybmFsTG9ja2VyKEpTQ2VsbCog
Y2VsbCkKKyAgICAgICAgICAgIDogbV9jZWxsKGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fY2VsbC0+bG9ja0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB+SW50ZXJuYWxMb2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPnVubG9j
a0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAg
ICAgIEpTQ2VsbCogbV9jZWxsOworICAgIH07CiAKICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0Owor
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3Q7CiAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0OwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlE
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlKCkgY29uc3Q7CkBAIC0xNjcsNiArMTkxLDE2IEBAIHB1YmxpYzoKICAgICBDZWxsU3RhdGUg
Y2VsbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAgICB2b2lk
IHNldENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2VsbCo+
KHRoaXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21pY0NvbXBh
cmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0
YXRlIG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4
Y2hhbmdlV2Vha1JlbGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAg
IH0KKworICAgIENlbGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmco
Q2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRlLCBvbGRT
dGF0ZSwgbmV3U3RhdGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJl
SURPZmZzZXQoKQogICAgIHsKQEAgLTE4Myw5ICsyMTcsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV90eXBlKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgLy8gRE8gTk9UIHN0b3JlIHRv
IHRoaXMgZmllbGQuIEFsd2F5cyB1c2UgYSBDQVMgbG9vcCwgc2luY2Ugc29tZSBiaXRzIGFyZSBm
bGlwcGVkIHVzaW5nIENBUworICAgIC8vIGZyb20gb3RoZXIgdGhyZWFkcyBkdWUgdG8gdGhlIGlu
dGVybmFsIGxvY2suIE9uZSBleGNlcHRpb246IHlvdSBkb24ndCBuZWVkIHRoZSBDQVMgaWYgdGhl
CisgICAgLy8gb2JqZWN0IGhhcyBub3QgZXNjYXBlZCB5ZXQuCisgICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgIH0KIAogICAg
IHN0YXRpYyBwdHJkaWZmX3QgY2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIyOCw3ICsyNjUsNyBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBT
dHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOwotICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlw
ZTsKKyAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNjOyAvLyBETyBOT1Qgc3Rv
cmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIENBUy4KICAgICBKU1R5cGUgbV90eXBlOwogICAgIFR5
cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgbV9mbGFnczsKICAgICBDZWxsU3RhdGUgbV9jZWxsU3Rh
dGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oCShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIEpT
Q2VsbDo6SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVAogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwo
Vk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJl
LT5pZCgpKQotICAgICwgbV9pbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkK
KyAgICAsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
KQogICAgICwgbV9mbGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkp
CiAgICAgLCBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQpAQCAtNzQsNyArNzQsNyBA
QCBpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgaWYgKHN0cnVj
dHVyZSkgewogI2VuZGlmCiAgICAgICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7
Ci0gICAgICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAg
ICAgICAgbV9pbmRleGluZ1R5cGVBbmRNaXNjID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCk7CiAgICAgICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50
eXBlKCk7CiAgICAgICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlw
ZUZsYWdzKCk7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkBAIC05MSw5ICs5MSwxNCBAQCBp
bmxpbmUgSlNUeXBlIEpTQ2VsbDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHlwZTsKIH0K
IAoraW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25z
dAoreworICAgIHJldHVybiBtX2luZGV4aW5nVHlwZUFuZE1pc2M7Cit9CisKIGlubGluZSBJbmRl
eGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2lu
ZGV4aW5nVHlwZTsKKyAgICByZXR1cm4gaW5kZXhpbmdUeXBlQW5kTWlzYygpICYgQWxsQXJyYXlU
eXBlczsKIH0KIAogaW5saW5lIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdApA
QCAtMTk1LDE3ICsyMDAsMjcgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQSVZhbHVlV3JhcHBl
cigpIAogICAgIHJldHVybiBtX3R5cGUgPT0gQVBJVmFsdWVXcmFwcGVyVHlwZTsKIH0KIAotaW5s
aW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09
IHRoaXMtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1
Y3R1cmUoKQogICAgICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5z
dHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKLSAg
ICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICBt
X2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogICAgIG1f
dHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7Ci0gICAgbV9pbmRleGluZ1R5cGUg
PSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBuZXdJbmRleGlu
Z1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICBp
ZiAobV9pbmRleGluZ1R5cGVBbmRNaXNjICE9IG5ld0luZGV4aW5nVHlwZSkgeworICAgICAgICBB
U1NFUlQoIShuZXdJbmRleGluZ1R5cGUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpKTsKKyAg
ICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG9sZFZhbHVlID0gbV9p
bmRleGluZ1R5cGVBbmRNaXNjOworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1ZhbHVlID0g
KG9sZFZhbHVlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSB8IHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOworICAgICAgICAgICAgaWYgKFdURjo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1faW5kZXhpbmdUeXBlQW5kTWlzYywgb2xkVmFsdWUs
IG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgY29u
c3QgTWV0aG9kVGFibGUqIEpTQ2VsbDo6bWV0aG9kVGFibGUoKSBjb25zdApAQCAtMjg0LDExICsy
OTksMjYgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpjYWxsRGVzdHJ1Y3RvcihWTSYgdgogICAgIGlm
IChpc1phcHBlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHN0cnVjdHVyZUlEKCkp
OwotICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpCi0gICAg
ICAgIHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMp
OwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9y
dGFsKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZt
KTsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpOworICAgICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kg
PSBjbGFzc0luZm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kodGhpcyk7
CisgICAgfSBlbHNlCiAgICAgICAgIGpzQ2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KHRoaXMp
LT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKICAgICB6YXAoKTsKIH0K
IAoraW5saW5lIHZvaWQgSlNDZWxsOjpsb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8
SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+
KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06
OmxvY2soKmxvY2spOworfQorCitpbmxpbmUgdm9pZCBKU0NlbGw6OnVubG9ja0ludGVybmFsTG9j
aygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRv
bWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGlu
Z1R5cGVMb2NrQWxnb3JpdGhtOjp1bmxvY2soKmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJl
dmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE3ICsxMTIsMjggQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRp
ZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0
b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgCi0gICAgLy8gTWFyayB0
aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUo
KSkgeworCisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpOworICAgIHN3aXRjaCAob2xkVHlwZSkgewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0g
ICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
Ci0gICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKLSAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Nw
YXJzZU1hcCk7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogewor
ICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVyZSB0byBwcm90ZWN0IENvbnRpZ3VvdXMtPkFycmF5
U3RvcmFnZSB0cmFuc2l0aW9ucywgYnV0IHdlIGNvdWxkIG1ha2UgdGhhdAorICAgICAgICAvLyBy
YWNlIHdvcmsgaWYgd2UgbmVlZGVkIHRvLgorICAgICAgICBKU0NlbGw6OkludGVybmFsTG9ja2Vy
IGxvY2tlcih0aGlzKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1R5cGUgPSB0aGlzLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAg
ICAgIHN3aXRjaCAobmV3VHlwZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvLyBBTExfQVJSQVlfU1RPUkFHRV9J
TkRFWElOR19UWVBFUworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTE0NiwxMCArMTU3LDM0IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNP
YmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlKHZpc2l0b3Iudm0oKSkpOwotCisgICAgLy8gV2Ugd2FudCB0byBkZWZlbmQgYWdhaW5z
dCBtdWx0aXBsZSBwb3NzaWJsZSByYWNlcyB3aXRoIHRoZSBtdXRhdG9yOgorICAgIC8vIC0gTXV0
YXRvciBjb3VsZCBpbnN0YWxsIGEgYmlnZ2VyIGJ1dHRlcmZseSBhbmQgdGhlbiBpbnN0YWxsIGEg
c3RydWN0dXJlIHRoYXQgY2xhaW1zIG1vcmUKKyAgICAvLyAgIHByb3BlcnRpZXMuIFRoaXMgdHJp
dmlhbGx5IHdvcmtzLgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBtdXRhdGUgdGhlIGRpY3Rpb25h
cnkgc3RydWN0dXJlLiBIZW5jZSwgd2UgaG9sZCB0aGUgc3RydWN0dXJlIGxvY2sgZm9yCisgICAg
Ly8gICBkaWN0aW9uYXJ5IHN0cnVjdHVyZXMuCisgICAgLy8gLSBUaGUgYnV0dGVyZmx5IGNvdWxk
IHNocmluaywgYnV0IHRoaXMgY291bGQgb25seSBoYXBwZW4gaWYgdGhlIG9iamVjdCB3YXMgYSBk
aWN0aW9uYXJ5LgorICAgIC8vICAgVXN1YWxseSwgdGhpcyBtZWFucyB0aGF0IHdlIHdvdWxkIGdl
dCB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGFjcXVpcmUgYSBsb2NrLiBUaGF0CisgICAg
Ly8gICB0cml2aWFsbHkgd29ya3MuIEJ1dCB3ZSBjb3VsZCBsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVm
b3JlIHRoZSBvYmplY3QgYmVjYW1lIGEgZGljdGlvbmFyeQorICAgIC8vICAgYW5kIHRoZW4gbG9h
ZCB0aGUgYnV0dGVyZmx5IHRoYXQgd2FzIHNocnVuay4gV2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMg
Y2FzZSBieSBjaGVja2luZworICAgIC8vICAgdGhlIHN0cnVjdHVyZSBhIHNlY29uZCB0aW1lIGJl
Zm9yZSBzY2FubmluZyB0aGUgYnV0dGVyZmx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGJ1dHRlcmZs
eQorICAgIC8vICAgaXMgYXQgd29yc3QgdGhlIGJ1dHRlcmZseSB0aGF0IHRoZSBtdXRhdG9yIGhh
ZCBpbnN0YWxsZWQganVzdCBwcmlvciB0byBmbGlwcGluZyB0aGUKKyAgICAvLyAgIHN0dXJjdHVy
ZS4gU28gaWYgdGhlIHN0cnVjdHVyZSB3ZSBzZWUgaXMgYSBub24tZGljdGlvbmFyeSB0aGVuIHRo
ZSBidXR0ZXJmbHkgY2Fubm90IHlldAorICAgIC8vICAgaGF2ZSBiZWVuIHNocnVuay4KKyAgICBW
TSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpIHsKKyAgICAgICAgc3RydWN0
dXJlLT5sb2NrKCkubG9jaygpOworICAgIH0gZWxzZQorICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYg
KHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkgPT0gc3RydWN0dXJlLT5pZCgpKQorICAgICAgICAg
ICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1
cmUpOworICAgIH0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5s
b2NrKCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3Iu
bV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1
bHRNYXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC0yMDQsMTUgKzIzOSwyNSBAQCB2b2lkIEpTRmlu
YWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKLSAgICBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0g
ICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3Ry
dWN0dXJlKTsKKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFy
eSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisg
ICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIFdURjo6
bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPmJ1dHRlcmZseSgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pZCgpID09IHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpCisgICAg
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0
cnVjdHVyZSk7CisgICAgfQogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5p
bmxpbmVTaXplKCk7CiAgICAgaWYgKHN0b3JhZ2VTaXplKQogICAgICAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsK
LQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxv
Y2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9s
YXRpb247CiAjZW5kaWYKQEAgLTY2Niw3ICs3MTEsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0
OjplbnRlckRpY3Rpb25hcnlJCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9p
bmRleEJpYXMgPSAwOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rv
ckxlbmd0aCgwKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cC5zZXQodm0sIHRoaXMsIG1hcCk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdC
dXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNzMxLDcgKzc3Nyw5IEBAIEJ1dHRlcmZs
eSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhl
ZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CiB9
CiAKQEAgLTc0Miw3ICs3OTAsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0
ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgo
KTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZs
eS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTc1Myw3ICs4MDMsOSBAQCBDb250aWd1b3Vz
RG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwotICAgIHNldFN0cnVjdHVyZUFu
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5
LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKQEAgLTc2NCw3ICs4MTYsOSBAQCBDb250aWd1b3Vz
SlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1
b3VzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCkBAIC03OTcsNyAr
ODUxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0
aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKSk7
CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VU
cmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04ODAsNyArOTM2LDkgQEAgQXJy
YXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5t
X3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4g
c3RvcmFnZTsKIH0KIApAQCAtOTM1LDcgKzk5Myw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6
OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
dHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0K
IApAQCAtOTgxLDcgKzEwNDEsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91
YmxlVG9BCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24p
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9y
YWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUo
dm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTEwMDYs
NyArMTA2OCwyMiBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAg
ICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSk7CisKKyAgICAvLyBUaGlzIGhhcyBhIGNyYXp5IHJhY2Ugd2l0aCB0aGUgZ2FyYmFn
ZSBjb2xsZWN0b3IuIFdoZW4gY2hhbmdpbmcgdGhlIGJ1dHRlcmZseSBhbmQgc3RydWN0dXJlLAor
ICAgIC8vIHRoZSBtdXRhdG9yIGFsd2F5cyBzZXRzIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gVGhlIGNv
bGxlY3RvciB3aWxsIGFsd2F5cyByZWFkIHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBmaXJzdC4gV2Ug
cHJvYmFibHkgaGF2ZSB0byBmb2xsb3cgdGhhdCBjb252ZW50aW9uIGhlcmUgYXMgd2VsbC4gVGhp
cyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IKKyAgICAvLyB3aWxsIHNvbWV0aW1lcyBzZWUgdGhl
IG5ldyBidXR0ZXJmbHkgKHRoZSBvbmUgd2l0aCBBcnJheVN0b3JhZ2UpIHdpdGggdGhlIG9ubHkg
c3RydWN0dXJlICh0aGUKKyAgICAvLyBvbmUgdGhhdCBzYXlzIHRoYXQgdGhlIGJ1dHRlcmZseSBp
cyBDb250aWd1b3VzKS4gV2hlbiBzY2FubmluZyBDb250aWd1b3VzLCB0aGUgY29sbGVjdG9yIHdp
bGwKKyAgICAvLyBtYXJrIHdvcmQgYXQgYWRkcmVzc2VzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0
byB0aGUgYnV0dGVyZmx5IHBvaW50ZXIsIHVwIHRvIHRoZSBwdWJsaWNMZW5ndGgKKyAgICAvLyBp
biB0aGUgYnV0dGVyZmx5LiBCdXQgYW4gQXJyYXlTdG9yYWdlIGhhcyBzb21lIG5vbi1wb2ludGVy
IGhlYWRlciBkYXRhIGF0IGxvdyBwb3NpdGl2ZQorICAgIC8vIG9mZnNldHMgZnJvbSB0aGUgYnV0
dGVyZmx5IC0gc28gd2hlbiB0aGlzIHJhY2UgaGFwcGVucywgdGhlIGNvbGxlY3RvciB3aWxsIHN1
cmVseSBjcmFzaAorICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBmYWlsIHRvIGRlY29kZSB0d28gY29u
c2VjdXRpdmUgaW50MzJzIGFzIGlmIGl0IHdhcyBhIEpTVmFsdWUuCisgICAgLy8KKyAgICAvLyBG
b3J0dW5hdGVseSwgd2UgaGF2ZSB0aGUgSlNDZWxsIGxvY2sgZm9yIHRoaXMgcHVycG9zZSEKKyAg
ICAKKyAgICBJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0xNDY4LDcgKzE1NDUsNyBA
QCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlCiAKICAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgb2Zm
c2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQp
IHsgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKIApAQCAtMjAxOSw3ICsyMDk2LDcgQEAgYm9vbCBKU09i
amVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5n
ZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwotCisgICAgCiAgICAgLy8gMS4gTGV0IGN1
cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50
ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKICAgICBT
cGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBA
IC0yNzI1LDcgKzI4MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rv
ckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJm
bHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0yNzQyLDcgKzI4MjAs
OCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5l
d0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJ
bmRleEJpYXM7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNzYyLDYg
KzI4NDEsNyBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAg
CiAgICAgdW5zaWduZWQgYXZhaWxhYmxlT2xkTGVuZ3RoID0KICAgICAgICAgQnV0dGVyZmx5Ojph
dmFpbGFibGVDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rv
ckxlbmd0aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBudWxscHRyOwogICAgIGlm
IChhdmFpbGFibGVPbGRMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhl
IGNhc2Ugd2hlcmUgc29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNh
dXNlZCBpbnRlcm5hbAogICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpv
YnMgcmlnaHQsIHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNz
CkBAIC0yNzc2LDE3ICsyODU2LDI0IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3co
Vk0mIHZtLCAKICAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpOwogICAgICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgICAg
ICBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgfQogCi0gICAgYnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLQogICAgIGlmIChoYXNEb3VibGUoaW5kZXhp
bmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsg
aSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1
b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1Bh
eWxvYWQ8ZG91YmxlPigpW2ldID0gUE5hTjsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAg
ICBidXR0ZXJmbHktPmluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KClbaV0u
Y2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAobmV3QnV0dGVyZmx5KSB7CisgICAgICAgIGJ1dHRl
cmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0
dGVyZmx5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjgwMiwxMiArMjg4OSwxMyBAQCB2b2lkIEpTT2Jq
ZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+
cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVG
b3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkp
OwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0
dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAot
QnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qg
b2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1v
cmVPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKQEAgLTMwOTIsMTUgKzMxODAs
MzQgQEAgdm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdgogICAgICAgICB2
bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0Ojpz
aGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhWTSYgdm0sIHNpemVfdCBvdXRPZkxpbmVDYXBh
Y2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0
OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNh
cGFjaXR5QWZ0ZXIpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSB0aGlzLT5idXR0ZXJmbHlQcmVDYXBhY2l0
eSgpOwotICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5
LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gYnV0dGVyZmx5
LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSk7CisgICAgLy8gVGhp
cyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1
cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCisgICAgLy8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdl
IGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBo
b2xkaW5nCisgICAgLy8gdGhlIHN0cnVjdHVyZSdzIGxvY2sgcmlnaHQgbm93LCBhbmQgdGhhdCBo
ZWxwcyBhIGJpdC4KKyAgICAKKyAgICBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSA9IHRoaXMtPmJ1
dHRlcmZseSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhh
c0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkg
eworICAgICAgICBwcmVDYXBhY2l0eSA9IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+
cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAw
OworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorCisgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQo
dm0sIHRoaXMsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGlu
Z0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0gICAgbWVtbW92ZShuZXdC
YXNlLCBjdXJyZW50QmFzZSwgdGhpcy0+YnV0dGVyZmx5VG90YWxTaXplKCkpOwotICAgIHNldEJ1
dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgQnV0dGVyZmx5Ojpmcm9tQmFzZShu
ZXdCYXNlLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikpOworICAgIC8vIE5v
IG5lZWQgdG8gY29weSB0aGUgcHJlY2FwYWNpdHkuCisgICAgdm9pZCogY3VycmVudEJhc2UgPSBv
bGRCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCog
bmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsK
KworICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUo
MCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiB9CiAKIHVpbnQzMl90IEpTT2JqZWN0
OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24g
MjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNzQ3LDExICs3NDcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgc3RhdGlj
UHJvcGVydGllc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljUHJvcGVydGll
c1JlaWZpZWQoKTsgfQogICAgIHZvaWQgcmVpZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKEV4ZWNTdGF0
ZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3Rv
cmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoVk0mLCBCdXR0ZXJmbHkqKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uo
Vk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICAKKyAgICB2b2lk
IHNldEJ1dHRlcmZseShWTSYsIEJ1dHRlcmZseSopOyAvLyBBbHdheXMgY2hhbmdlIHRoZSBidXR0
ZXJmbHkgYmVmb3JlIGNoYW5naW5nIHRoZSBzdHJ1Y3R1cmUhCiAgICAgdm9pZCBzZXRTdHJ1Y3R1
cmUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShW
TSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKQEAgLTc1OSw3ICs3NTgsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBzdHJ1Y3R1cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZSh2bSwgdGhpcyk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcoVk0mLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVD
YXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7CkBAIC05OTAsOSArOTg5LDkgQEAgcHJpdmF0ZToK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAg
ICBib29sIGdldE5vbkluZGV4UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYs
IFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRP
d25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7
Ci0gICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpT
VmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUmKTsKKyAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQ
cm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFN0cnVjdHVyZSop
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3Qo
Vk0mLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBmaW5kUHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1l
KSBjb25zdDsKQEAgLTEyMDUsMTQgKzEyMDQsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNX
aXRoU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VS
VChzdHJ1Y3R1cmUpOwotICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7
Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVj
dHVyZSh2bSwgc3RydWN0dXJlKTsKLX0KLQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwpAQCAtMTIyMCw3ICsxMjExLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZShWTSYgdgogICAgIEpTQ2VsbDo6c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6
c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0
ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogfQpAQCAtMTI3MywxNiArMTI2NCwxNiBA
QCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNCiAKIC8vIEl0IGlzIHNh
ZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgUHJvcGVydHlOYW1lIHRoYXQgaXMgYWN0dWFs
bHkgYW4gaW5kZXgsCiAvLyBidXQgaWYgc28gd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIChkb2Vz
bid0IHNlYXJjaCBpbmRleCBzdG9yYWdlKS4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAg
ICAgIGlmICghVHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdz
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gZ2V0T3duU3Rh
dGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLQorICAgIAog
ICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMgb24gdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJu
aW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpOwogCkBAIC0xMzA3LDkgKzEyOTgsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldE93bk5vbkluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3Qs
IEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVy
U2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAg
ICBpZiAoc3RydWN0dXJlLmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21H
ZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1
LDcgKzEzMTYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVy
ZSYgc3RydWN0dXJlID0gKm9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAob2JqZWN0LT5nZXRPd25O
b25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQpAQCAtMTM1MywxMCArMTM0NCwxMCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5CiAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5nZXROb25JbmRleFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUoKSAhPSBQcm94eU9iamVjdFR5
cGUpOwotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdl
dChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlm
IChvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgaWYg
KCFwcm90b3R5cGUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBvYmpl
Y3QgPSBhc09iamVjdChwcm90b3R5cGUpOwpAQCAtMTQxNywxNiArMTQwOCwyMSBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIGlmICgobW9kZSA9PSBQ
dXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAodGhpcy0+
c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAg
bmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1
cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1
Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2Fw
YWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIG9mZnNldCA9
IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBbJl0gKGNvbnN0IEdDU2Fm
ZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkT3V0T2ZM
aW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVN
b3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgYnV0dGVyZmx5
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOworICAgICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Cisg
ICAgICAgICAgICB9KTsKIAotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAg
ICBBU1NFUlQodGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwpAQCAtMTQ0NSwxMyArMTQ0MSwxNSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEluCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVy
Zmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRo
aXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxp
bmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICB9CiAKICAgICAgICAg
dmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zm
c2V0LCB2YWx1ZSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CkBAIC0xNDk4LDEzICsxNDk2LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW4KICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdD
YXBhY2l0eSk7Ci0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQotICAgICAgICBz
ZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5
LCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIGlmIChvbGRDYXBhY2l0eSAhPSBuZXdDYXBh
Y2l0eSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVy
Zmx5KTsKICAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRT
dHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIG5ld1N0
cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE1NTQsMTcgKzE1
NTIsMjMgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVy
KCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NFUlQoIXZhbHVlLmlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKSkKLSAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0s
IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVk
TmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVy
ZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICBib29sIHNob3VsZE9wdGlt
aXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKLSAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAg
WyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxs
b2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMo
KTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKIH0KIAogQUxXQVlTX0lOTElORSBKU09iamVjdCog
UmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNywxMyArMTA3LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJv
cGVydHkKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0
UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQ
cm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1
cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlm
IChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUg
PT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAg
cHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElL
RUxZKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBk
ZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90
b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEzNSwxOCAr
MTM1LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICBK
U09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVu
Y3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAg
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0
dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkp
OwogICAgICAgICBpZiAoTElLRUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlT
bG90KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYgKG9iamVj
dC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93
blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVy
dHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYg
KExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9
PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBw
cm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtF
TFkoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRl
ZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3Rv
dHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODQsNiArMTg0LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihi
b29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAg
IHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwK
KyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAor
ICAgIHYoYm9vbCwgY29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikg
XAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRy
KSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51
bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5
VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNiArNDksNyBAQCBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhh
dmUgYSBsb2NrIGluIGl0LgogY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1Ymxp
YyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODU3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDEyICs0NSw2IEBACiAKICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURf
U1RBVElTVElDUyAwCiAKLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NP
TlNURU5DWV9DSEVDSyAwCi0jZWxzZQotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lf
Q0hFQ0sgMAotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCkBAIC0xNjMsOSArMTU3LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1
Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwoKSkgewogICAgICAgICAgICAgKytu
dW1iZXJXaXRoUHJvcGVydHlNYXBzOwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXpl
ICs9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAg
ICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSB0YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTMwNiw3ICszMDAsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0
cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVy
ZS0+bV9sb2NrLmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5w
cm9wZXJ0eVRhYmxlKCkuZ2V0KCk7CisgICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0
eVRhYmxlT3JOdWxsKCk7CiAgICAgICAgIGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVh
dmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdz
IHRvIGl0IGF0b21pY2FsbHkKICAgICAgICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJv
cGVydHkgdGFibGUuCkBAIC0zMjEsMzAgKzMxNSwyOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0
cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgQVNTRVJUKCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0
dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRh
YmxlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsK
LSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7Ci0KKyAgICAKICAgICBWZWN0b3I8U3RydWN0
dXJlKiwgOD4gc3RydWN0dXJlczsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZTsKICAgICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKKyAgICB1bnNp
Z25lZCBjYXBhY2l0eSA9IG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lu
bGluZUNhcGFjaXR5KTsKICAgICBpZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+
Y29weSh2bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2Fw
YWNpdHkpKTsKKyAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgY2FwYWNpdHkpOwogICAg
ICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIHRhYmxlID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAg
ICAgLy8gTXVzdCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxs
IGJlIG1vZGlmeWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBk
b24ndCB3YW50IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEg
aGFsZi1iYWtlZAogICAgIC8vIHN0YXRlLgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgY3JlYXRl
UHJvcGVydHlNYXAobG9ja2VyLCB2bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKLSAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5VGFibGUo
KS5zZXQodm0sIHRoaXMsIHRhYmxlKTsKKyAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKKyAgICAg
ICAgdGhpcy0+c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCiAgICAgSW5mZXJyZWRUeXBl
VGFibGUqIHR5cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CiAKQEAgLTM1NSwx
MCArMzQ4LDEzIEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAg
ICAgICAgUHJvcGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlv
dXMoKSk7CiAgICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzLmdldCgpKSkKICAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVk
VHlwZSA9IHRydWU7Ci0gICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNl
dCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAg
dGFibGUtPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0
TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KTsKKyAgICAKKyAgICAvL2RhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWF0ZXJpYWxpemlu
ZyB0YWJsZSB3aXRoIHNpemU6ICIsIHRhYmxlLT5zaXplKCksICJcbiIpOworICAgIHJldHVybiB0
YWJsZTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQpA
QCAtNDczLDcgKzQ2OSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRy
YW4KICAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsK
ICAgICB0cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwog
ICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9u
LT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1f
b2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxs
KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwog
CkBAIC01MjEsMzYgKzUxNywzMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlUcmFuCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBlKQogeworICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBj
cmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQo
dm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0s
IGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAg
CisgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29m
ZnNldDsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKLQorICAgIAogICAgIHRyYW5zaXRpb24tPmNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHN0cnVjdHVyZS0+
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAgICAgCisgICAgICAgIHRy
YW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0
OwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdHVy
ZSA9IHRyYW5zaXRpb247CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpKTsKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5
KiBlbnRyeSA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9wZXJ0
eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnktPmF0dHJpYnV0ZXMg
PSBhdHRyaWJ1dGVzOwogCkBAIC01NjEsMTcgKzU1MSwxNSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBr
aW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQp
CiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwor
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCi0gICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOworICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7Ci0g
ICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0SGFzQmVlbkRpY3Rpb25h
cnkodHJ1ZSk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC02MDMsMzEgKzU5MSwyOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtKQogewotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBpZiAoaXNQaW5uZWRQ
cm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPmNvcHkodm0s
IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7Ci0gICAgCi0gICAgLy8gSG9sZCB0aGUgbG9j
ayB3aGlsZSBzdGVhbGluZyB0aGUgdGFibGUgLSBzbyB0aGF0IGdldENvbmN1cnJlbnRseSgpIG9u
IGFub3RoZXIgdGhyZWFkCi0gICAgLy8gd2lsbCBlaXRoZXIgaGF2ZSB0byBieXBhc3MgdGhpcyBz
dHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRvIHVzZSB0aGUgcHJvcGVydHkgdGFibGUKLSAgICAvLyBi
ZWZvcmUgaXQgaXMgc3RvbGVuLgotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZW5Qcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJs
ZSgpLmdldCgpOwotICAgIHByb3BlcnR5VGFibGUoKS5jbGVhcigpOwotICAgIHJldHVybiB0YWtl
blByb3BlcnR5VGFibGU7CisgICAgLy8gVGhpcyBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0
eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0
ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYg
KGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29w
eSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9
IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3Bl
cnR5VGFibGUpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0
cmFuc2l0aW9uS2luZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVz
KHRyYW5zaXRpb25LaW5kKTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5k
ZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFu
c2l0aW9uS2luZCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBpZiAoY2hhbmdlc0luZGV4aW5nVHlw
ZSh0cmFuc2l0aW9uS2luZCkpIHsKICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBzdHJ1Y3R1cmUtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKSB7CiAgICAgICAgICAgICBp
ZiAoZ2xvYmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKSkgewot
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5h
bEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4
aW5nVHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2Jq
ZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7CiAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RydWN0
dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNjM4LDcgKzYyNCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXQKICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICBpZiAoIXN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVy
ZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSkgewogICAgICAgICBBU1NF
UlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpID09IGF0dHJpYnV0
ZXMpOwotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5n
VHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwog
ICAgIH0KICAgICAKQEAgLTY0Niw3ICs2MzIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRl
KHZtLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3Vz
KGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUoaW5k
ZXhpbmdUeXBlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeShpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAKICAgICBpZiAo
cHJldmVudHNFeHRlbnNpb25zKHRyYW5zaXRpb25LaW5kKSkKICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0RGlkUHJldmVudEV4dGVuc2lvbnModHJ1ZSk7CkBAIC02NTcsMzIgKzY0MywyOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgICAgIC8vIHRhYmxlLCBz
aW5jZSBvdXIgbG9naWMgZm9yIHdhbGtpbmcgdGhlIHByb3BlcnR5IHRyYW5zaXRpb24gY2hhaW4g
dG8gcmVtYXRlcmlhbGl6ZSB0aGUKICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0
byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KICAgICAgICAgCi0gICAg
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyh2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKCk7CiAg
ICAgICAgIAotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpKSB7Ci0gICAg
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5n
ZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGll
cyh0cmFuc2l0aW9uS2luZCkpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMg
fD0gRG9udERlbGV0ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nl
c3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEoZW50cnkuYXR0cmlidXRlcyAmIEFj
Y2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBSZWFkT25s
eTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxl
KTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgeworICAgICAgICAgICAgaWYg
KHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkKKyAgICAgICAg
ICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7CisgICAgICAgICAgICBpZiAo
c2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEo
ZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hdHRy
aWJ1dGVzIHw9IFJlYWRPbmx5OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50
YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgICAgICB0cmFuc2l0aW9u
LT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJl
LT5tX29mZnNldDsKICAgICAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRy
YW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1Jl
YWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYm
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKQotICAgICAgICAmJiAhdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0SGFzUmVh
ZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byh0cnVlKTsKICAgICAK
ICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+
cGluKCk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgdHJhbnNpdGlvbi0+ZW5zdXJlUHJv
cGVydHlUYWJsZSh2bSkpOwogICAgIGVsc2UgewogICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKQEAgLTY5OCwxMyArNjgxLDEyIEBAIGJvb2wg
U3RydWN0dXJlOjppc1NlYWxlZChWTSYgdm0pCiAgICAgaWYgKGlzU3RydWN0dXJlRXh0ZW5zaWJs
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsK
LSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVu
c3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3Bl
cnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
CisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZv
ciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICgoaXRlci0+YXR0cmlidXRlcyAmIERvbnREZWxl
dGUpICE9IERvbnREZWxldGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAt
NzE3LDEzICs2OTksMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2bSkKICAgICBp
ZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgIFBy
b3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwor
ICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
dGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKCEoaXRl
ci0+YXR0cmlidXRlcyAmIERvbnREZWxldGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSkK
QEAgLTczNiwyMSArNzE3LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlv
bmFyeVMKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlzRGlj
dGlvbmFyeSgpKTsKKyAgICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2ssIHZtLmhlYXApOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0g
dGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkgewotICAgICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKKyAgICAgICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIEFTU0VSVCh0
YWJsZSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eVRhYmxlKCkt
PnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwog
CiAgICAgICAgIC8vIEhvbGRzIG91ciB2YWx1ZXMgY29tcGFjdGVkIGJ5IGluc2VydGlvbiBvcmRl
ci4KICAgICAgICAgVmVjdG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9wZXJ0eUNvdW50KTsKIAogICAg
ICAgICAvLyBDb3BpZXMgb3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVpciBoYXNoZWQgbG9jYXRpb25z
LCBjb21wYWN0aW5nIHByb3BlcnR5IHRhYmxlIG9mZnNldHMgYXMgd2UgZ28uCiAgICAgICAgIHVu
c2lnbmVkIGkgPSAwOwotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9w
ZXJ0eVRhYmxlKCktPmVuZCgpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSB0YWJsZS0+ZW5kKCk7CiAgICAgICAgIG1fb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICAg
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIsICsraSkgewogICAgICAgICAgICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRl
ci0+b2Zmc2V0KTsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0
Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIH0KQEAgLTc1
OSw3ICs3NDMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyBpKyspCiAgICAg
ICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwg
bV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7CiAKLSAgICAgICAgcHJvcGVydHlUYWJsZSgp
LT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CisgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZz
ZXRzKCk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICB9CiAKQEAgLTc2
OCw1NSArNzUyLDM0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMK
IAogICAgIHNpemVfdCBhZnRlck91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKTsKIAotICAgIGlmIChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBhZnRlck91dE9m
TGluZUNhcGFjaXR5KSB7CisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgYmVmb3JlT3V0
T2ZMaW5lQ2FwYWNpdHkgIT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICBBU1NF
UlQoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPiBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAg
ICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5p
bmcvY29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgICAgICAvLyB3
ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRo
ZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KLSAgICAgICAgaWYgKG9i
amVjdC0+YnV0dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMtPmhh
c0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3QtPnNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIGlmICghYWZ0ZXJPdXRPZkxpbmVD
YXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAgICAgICAgICAg
IG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAgICAgLy8gSWYgdGhlIG9i
amVjdCB3YXMgZG93bi1zaXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIEJ1
dHRlcmZseSBpcyBubyBsb25nZXIgd2l0aGluIHRoZSAKICAgICAgICAgLy8gZmlyc3QgQ29waWVk
QmxvY2s6OmJsb2NrU2l6ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIgaWYgd2Ug
dHJ5IHRvIG1hc2sgdGhlIGJhc2UgYmFjayB0byAKICAgICAgICAgLy8gdGhlIENvcGllZEJsb2Nr
IGhlYWRlci4gVG8gcHJldmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtZW1tb3ZlIHRoZSBCdXR0
ZXJmbHkgZG93bi4KLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSkKLSAgICAg
ICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcodm0sIGJlZm9yZU91
dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhsb2NrZXIs
IHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9Ci0KLSAgICByZXR1cm4g
dGhpczsKLX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAgCi0g
ICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VS
VChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZt
LCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1l
KTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCit2b2lkIFN0
cnVjdHVyZTo6cGluKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNTRVJU
KHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUpOwor
ICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBjbGVhclByZXZpb3VzSUQoKTsK
ICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBp
bkZvckNhY2hpbmcoKQordm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoVk0mIHZtLCBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAgICBz
ZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwg
dGFibGUpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxscHRyOwogfQogCkBAIC04OTEsMTcg
Kzg1NCwxMyBAQCB2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAogICAgIH0KIAog
ICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KLSAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0KKyAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlID0gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKKyAgICAKICAgICAv
LyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4g
cHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKLSAgICAvLyBhbHJlYWR5
LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCi0gICAgQVNTRVJUKHByb3Bl
cnR5VGFibGUpOwotCi0gICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50
LgorICAgIC8vIGFscmVhZHksIHNvIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCiAgICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1l
LnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwotCisgICAgCiAgICAgaWYgKHNob3VsZE9wdGlt
aXplKQogICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFibGUtPndpbGxTdG9yZVZh
bHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOwogICAgIGVsc2UgewpAQCAtOTQzLDE4
ICs5MDIsMTIgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcgogCiAj
ZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYg
dm0pCi17Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7
Ci19Ci0KIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKFZNJiB2bSkKIHsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotICAgIHJl
dHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0
KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgaWYgKFByb3BlcnR5VGFibGUqIHRh
YmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJs
ZTo6Y2xvbmUodm0sICp0YWJsZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7
CisgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJs
ZSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQpAQCAtOTg5LDcwICs5NDIs
MjQgQEAgVmVjdG9yPFByb3BlcnR5TWFwRW50cnk+IFN0cnVjdHVyZTo6Z2V0UAogCiBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKLSAgICAKLSAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9m
ZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KQotICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24o
ZmFsc2UpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7
Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRP
ZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9w
ZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKLSAgICAKLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgcmV0dXJuIG5ld09mZnNldDsKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2Vy
JiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5VGFibGU6
OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKLSAg
ICBpZiAoIXBvc2l0aW9uLmZpcnN0KQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQot
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7Ci0KLSAg
ICBwcm9wZXJ0eVRhYmxlKCktPnJlbW92ZShwb3NpdGlvbik7Ci0gICAgcHJvcGVydHlUYWJsZSgp
LT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgcmV0dXJuIG9mZnNldDsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFw
KGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYgdm0sIHVuc2lnbmVkIGNhcGFj
aXR5KQotewotICAgIEFTU0VSVCghcHJvcGVydHlUYWJsZSgpKTsKLQotICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCBQcm9wZXJ0eVRhYmxl
OjpjcmVhdGUodm0sIGNhcGFjaXR5KSk7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUs
IFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9
CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0s
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
KyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5
KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBib29s
IGtub3duVW5pcXVlID0gcHJvcGVydHlOYW1lcy5jYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVy
ZSgpOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgp
LT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0
eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51
bWVyYXRpb24oKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwogICAgICAgICBB
U1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbigpIHx8ICFp
dGVyLT5rZXktPmlzU3ltYm9sKCkpOwogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYg
RG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CkBAIC0xMTE0
LDYgKzEwMjEsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAg
SlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgCiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRo
aXNPYmplY3QtPmlzT2JqZWN0KCkpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uY2xlYXIoKTsKQEAgLTEyNzYsOTIgKzExODYsNiBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTCiAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwog
fQogCi0jaWYgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KLXZvaWQgUHJvcGVydHlU
YWJsZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID49IFBy
b3BlcnR5VGFibGU6Ok1pbmltdW1UYWJsZVNpemUpOwotICAgIEFTU0VSVChtX2luZGV4TWFzayk7
Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID09IG1faW5kZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJU
KCEobV9pbmRleFNpemUgJiBtX2luZGV4TWFzaykpOwotCi0gICAgQVNTRVJUKG1fa2V5Q291bnQg
PD0gbV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQobV9rZXlDb3VudCArIG1fZGVsZXRlZENv
dW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fZGVsZXRlZENvdW50IDw9IG1f
aW5kZXhTaXplIC8gNCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleENvdW50ID0gMDsKLSAgICB1bnNp
Z25lZCBkZWxldGVkSW5kZXhDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSAh
PSBtX2luZGV4U2l6ZTsgKythKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX2lu
ZGV4W2FdOwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVu
dHJ5SW5kZXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXgg
PT0gZGVsZXRlZEVudHJ5SW5kZXgoKSkgewotICAgICAgICAgICAgKytkZWxldGVkSW5kZXhDb3Vu
dDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRy
eUluZGV4IDwgZGVsZXRlZEVudHJ5SW5kZXgoKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4
IC0gMSA8PSB1c2VkQ291bnQoKSk7Ci0gICAgICAgICsraW5kZXhDb3VudDsKLQotICAgICAgICBm
b3IgKHVuc2lnbmVkIGIgPSBhICsgMTsgYiAhPSBtX2luZGV4U2l6ZTsgKytiKQotICAgICAgICAg
ICAgQVNTRVJUKG1faW5kZXhbYl0gIT0gZW50cnlJbmRleCk7Ci0gICAgfQotICAgIEFTU0VSVChp
bmRleENvdW50ID09IG1fa2V5Q291bnQpOwotICAgIEFTU0VSVChkZWxldGVkSW5kZXhDb3VudCA9
PSBtX2RlbGV0ZWRDb3VudCk7Ci0KLSAgICBBU1NFUlQoIXRhYmxlKClbZGVsZXRlZEVudHJ5SW5k
ZXgoKSAtIDFdLmtleSk7Ci0KLSAgICB1bnNpZ25lZCBub25FbXB0eUVudHJ5Q291bnQgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCB1c2VkQ291bnQoKTsgKytjKSB7Ci0gICAgICAg
IFN0cmluZ0ltcGwqIHJlcCA9IHRhYmxlKClbY10ua2V5OwotICAgICAgICBpZiAocmVwID09IFBS
T1BFUlRZX01BUF9ERUxFVEVEX0VOVFJZX0tFWSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICArK25vbkVtcHR5RW50cnlDb3VudDsKLSAgICAgICAgdW5zaWduZWQgaSA9IElkZW50aWZp
ZXJSZXBIYXNoOjpoYXNoKHJlcCk7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAgICAgICB1
bnNpZ25lZCBlbnRyeUluZGV4OwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50
cnlJbmRleCA9IG1faW5kZXhbaSAmIG1faW5kZXhNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChl
bnRyeUluZGV4ICE9IFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAocmVwID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEg
fCBkb3VibGVIYXNoKElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCkpOwotICAgICAgICAgICAg
aSArPSBrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4ID09IGMgKyAxKTsK
LSAgICB9Ci0KLSAgICBBU1NFUlQobm9uRW1wdHlFbnRyeUNvdW50ID09IG1fa2V5Q291bnQpOwot
fQotCi12b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRp
b24oKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRh
YmxlKCktPmVuZCgpOwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIg
PSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICAg
ICAgQVNTRVJUKCFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcHJvcGVydHlUYWJsZSgpLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlu
bGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwotfQotCi0jZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZ
X0NIRUNLCi0KIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVy
dGllcygpIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7
IGNpID0gY2ktPnBhcmVudENsYXNzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxNyArMTgzLDIw
IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzU2VhbGVkKFZNJik7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb3plbihWTSYpOwogICAgIGJvb2wgaXNTdHJ1
Y3R1cmVFeHRlbnNpYmxlKCkgY29uc3QgeyByZXR1cm4gIWRpZFByZXZlbnRFeHRlbnNpb25zKCk7
IH0KLSAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIHNpemVfdCBz
dWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiwgSlNPYmpl
Y3QqKTsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAvLyBUaGVzZSBzaG91bGQg
YmUgdXNlZCB3aXRoIGNhdXRpb24uICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9m
ZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKLSAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICAvLyBUaGVzZSBzaG91bGQgYmUg
dXNlZCB3aXRoIGNhdXRpb24uIFZlcnNpb25zIHRoYXQgdGFrZSBhIGZ1bmMgd2lsbCBjYWxsIGl0
IGFmdGVyIG1ha2luZyB0aGUKKyAgICAvLyBjaGFuZ2UgYnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcg
dGhlIGxvY2suIFRoZSBjYWxsYmFjayBpcyBub3QgY2FsbGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5n
ZQorICAgIC8vIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwgcmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90CisgICAgLy8gZm91bmQuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0
eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1l
LCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihW
TSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJv
dG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0
dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CkBAIC0yMjksOCAr
MjMyLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQo
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUlu
Zm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKSAmIEFsbEFycmF5
VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsgfQorICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkgKzQzNiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsK
ICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0
KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZz
ZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1f
YmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCgpOworICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxv
Yjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAgIH0KICAgICAKICAg
ICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYg
KzU4Miw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRl
cihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyBy
ZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0
ZToKQEAgLTYzMyw0NCArNjM4LDQ1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlL
aW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRy
KTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRk
KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CiAg
ICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJl
bW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1v
dmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAg
ICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRh
YmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5
VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlN
YXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9j
aywgb3Igbm90LiBETyBOT1QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2su
CisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkoVk0mIHZt
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFT
U0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICBpZiAoIXByb3BlcnR5VGFi
bGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJs
ZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICgh
cHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgUHJvcGVydHlU
YWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5v
dC4gRE8gTk9UIGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIFBy
b3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENv
bnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKLSAg
ICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkpIHsKLSAgICAgICAgICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0p
OwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2Fm
ZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtYXRl
cmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICB2b2lkIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0mIHZtLCBEZWZlckdDJikKKyAgICAKKyAg
ICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAg
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
LSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOworICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdp
bGwgZ3JhYiB0aGUgbG9jay4gRE8gTk9UIGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUn
cyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5VGFibGUqIG1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IHRydWUpOworICAgIAor
ICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKTsK
KyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhW
TSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlk
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBj
b25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hl
ZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgCi0gICAgdm9pZCBwaW4oKTsKLSAgICB2
b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHBpbihWTSYs
IFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZvckNhY2hpbmcoVk0mLCBQcm9wZXJ0eVRh
YmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRhKEpTQ2VsbCogY2VsbCkgY29uc3QKICAg
ICB7CkBAIC03MTAsNyArNzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGhhc1JhcmVE
YXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPiht
X3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAgICAgICAKKwogICAgIGJvb2wg
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03NDAsNyArNzQ2LDcgQEAgcHJpdmF0ZToK
IAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAg
IC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdD
LCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgLy8gU2hvdWxkIGJl
IGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1h
eSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICAvLyBEdXJpbmcgYSBIZWFwIFNu
YXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVz
ZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
REJsb2IuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsKICAgICB9CiAKLSAg
ICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBTdHJ1Y3R1cmVJREJs
b2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewogICAgICAgICB1
LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1LmZpZWxkcy5pbmRl
eGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICB1
LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVU
eXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAgICAgdS5maWVsZHMu
ZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVy
KSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAgIAogICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7
IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gdS5maWVs
ZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7IH0K
KyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lk
IHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZs
YWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlubGluZVR5cGVG
bGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0cnVjdHVyZUlEKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZp
ZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVj
dHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAg
IFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6
SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAgIENlbGxTdGF0ZSBk
ZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NTcyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
OTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAg
ICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5
VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0
eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVy
dHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghcHJvcGVydHlUYWJsZSkKICAgICAgICAg
cmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwzMSArMjE4LDYgQEAgaW5saW5lIGJvb2wg
U3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAgIHJldHVybiBpc1ZhbGlkKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogfQogCi1pbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCi17Ci0gICAgY2hl
Y2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkg
Pj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RP
ZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBj
dXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHBy
b3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBpZiAocHJvcGVydHlU
YWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgp
KTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2Fw
YWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4m
IFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlUYWJs
ZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHko
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChMSUtFTFkoIWhhc1JhcmVEYXRhKCkp
KQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnBy
b3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0
ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1fcHJv
cGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxl
ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKSB7CiAg
ICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwpAQCAtMjkyLDYgKzI2Niwx
MSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNlCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7
CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBpbmxpbmUgc2l6ZV90IG5leHRP
dXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSkKIHsKICAgICBp
ZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSArMjc4LDYgQEAgaW5saW5lIHNpemVfdCBu
ZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBv
dXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSBzaXplX3QgU3RydWN0dXJlOjpzdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKQotewotICAgIHJldHVybiBuZXh0T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwotfQotCiBpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xv
dCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC0zMTEsNCArMjg1LDg1IEBAIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJlRGF0YSgpLT5zZXRP
YmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1i
b2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgUHJvcGVydHlUYWJs
ZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKworICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgCisgICAgc2V0UHJvcGVy
dHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0
KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCisg
ICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxz
ZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKworICAgIFByb3BlcnR5
T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwor
ICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5n
ZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIsIG5l
d09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisg
ICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgCisgICAgLy8gV2UgT05MWSBy
ZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdoaWNoIHdpbGwgaGF2ZSBhIHBp
bm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUgb25seSB3YXkgZm9yIHRoZW0gbm90IHRv
IGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0eS4KKyAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKworICAgIGlmICghdGFibGUpCisgICAgICAg
IHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRv
ciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3NpdGlvbi5maXJzdCkK
KyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAgIHRhYmxlLT5yZW1vdmUocG9z
aXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7CisKKyAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgb2Zmc2V0KTsKKyAgICByZXR1cm4g
b2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CisgICAgCisgICAg
cmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBmdW5jKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOworICAgIEFTU0VS
VChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAorICAgIHJldHVybiByZW1vdmUocHJvcGVy
dHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRh
YmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCit7CisgICAgbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworfQorICAgIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDIwODU3MikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKIAogLyogQmVnaW4gUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMx
NzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OworCQkwRjBGQ0RERTFERDE2N0Y5MDBD
Q0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0u
aCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3Vu
dGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJ
MEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovOyB9OwogCQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1Jh
bmRvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
NTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLzsgfTsKQEAgLTM3NCw2ICsz
NzUsNyBAQAogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8q
IExvY2tBbGdvcml0aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0Fs
Z29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUx
N0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJF
IC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTUzLDYgKzk1NSw3IEBACiAJCQkJQThBNDcyQzExNTFBODI1
QTAwNDEyM0ZGIC8qIExpc3RIYXNoU2V0LmggKi8sCiAJCQkJMEZFMTY0NjgxQjZGRkM5NjAwNDAw
RTdDIC8qIExvY2suY3BwICovLAogCQkJCTBGRTE2NDY5MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2Nr
LmggKi8sCisJCQkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAq
LywKIAkJCQlBOEE0NzJDMzE1MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCiAJCQkJNTEz
RTE3MEExQ0Q3RDVCRjAwRTM2NTBCIC8qIExvZ2dpbmdBY2N1bXVsYXRvci5oICovLAogCQkJCUE4
QTQ3MkM2MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkLmNwcCAqLywKQEAgLTEzMjMsNiAr
MTMyNiw3IEBACiAJCQkJQThBNDczOUIxNTFBODI1QjAwNDEyM0ZGIC8qIENyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tTnVtYmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTU1NTZGNjE4QTBDQzE4MDA2
RjQ4RkIgLyogQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0M0ExNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM5RDE1MUE4MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3MzlGMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRhTG9nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNBMTE1MUE4MjVCMDA0MTIzRkYgLyogRGF0ZU1hdGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODU3MikKKysrIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3
IEBAIHNldChXVEZfSEVBREVSUwogICAgIEl0ZXJhdG9yUmFuZ2UuaAogICAgIExpc3RIYXNoU2V0
LmgKICAgICBMb2NrLmgKKyAgICBMb2NrQWxnb3JpdGhtLmgKICAgICBMb2NrZXIuaAogICAgIE1E
NS5oCiAgICAgTWFpblRocmVhZC5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlzaW9uIDIwODU3MikK
KysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NywxMCAr
MTc3LDExIEBAIExpc3REdW1wSW5Db250ZXh0PFQsIFU+IGxpc3REdW1wSW5Db250ZXgKIH0gLy8g
bmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Omxpc3REdW1wOwotdXNpbmcgV1RGOjpzb3J0ZWRM
aXN0RHVtcDsKK3VzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiB1c2luZyBXVEY6Om1hcER1
bXA7Cit1c2luZyBXVEY6OnBvaW50ZXJMaXN0RHVtcDsKK3VzaW5nIFdURjo6c29ydGVkTGlzdER1
bXA7CiB1c2luZyBXVEY6OnNvcnRlZE1hcER1bXA7Ci11c2luZyBXVEY6Omxpc3REdW1wSW5Db250
ZXh0OwogCiAjZW5kaWYgLy8gTGlzdER1bXBfaAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkocmV2aXNpb24gMjA4
NTcyKQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEy
MCArMjYsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NrLmgiCiAKLSNp
bmNsdWRlICJEYXRhTG9nLmgiCi0jaW5jbHVkZSAiUGFya2luZ0xvdC5oIgotI2luY2x1ZGUgIlN0
cmluZ1ByaW50U3RyZWFtLmgiCi0jaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgotI2lu
Y2x1ZGUgPHRocmVhZD4KLQogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKLQotTkVWRVJfSU5MSU5FIHZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkK
K3ZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKLSAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAw
OwotCi0gICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFz
ZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KLSAgICBjb25zdCB1bnNpZ25lZCBzcGlu
TGltaXQgPSA0MDsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnQ4X3QgY3VycmVu
dEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tpbmcgd2l0aCAi
LCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7Ci0KLSAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2Vs
dmVzIHRvIGJhcmdlIGluLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxk
Qml0KQotICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5
dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4n
dCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCi0gICAgICAg
IGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNw
aW5MaW1pdCkgewotICAgICAgICAgICAgc3BpbkNvdW50Kys7Ci0gICAgICAgICAgICBzdGQ6OnRo
aXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2Vk
IGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKLSAgICAgICAgLy8g
aWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQu
Ci0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCi0gICAgICAg
ICAgICAmJiAhbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3Vy
cmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2Vk
LiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCi0gICAgICAgIFBhcmtp
bmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9Ci0gICAgICAgICAgICBQYXJraW5nTG90Ojpj
b21wYXJlQW5kUGFyaygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOwotICAgICAg
ICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewotICAgICAgICAgICAgc3dpdGNoIChzdGF0
aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKLSAgICAgICAgICAgIGNhc2UgRGly
ZWN0SGFuZG9mZjoKLSAgICAgICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFz
ZWQuIEl0IHdhcyBoYW5kZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAot
ICAgICAgICAgICAgICAgIC8vIHVubG9jaygpLiBUaGlzIG1lYW5zIHdlJ3JlIGRvbmUhCi0gICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNIZWxkKCkpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGNhc2UgQmFyZ2luZ09wcG9ydHVuaXR5OgotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVu
bG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2Ug
aGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBvcHBvcnR1bml0eSB0byBn
cmFiIHRoZSBsb2NrLiBCdXQKLSAgICAgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIG1heSBi
YXJnZSwgc28gdGhlIGJlc3QgdGhhdCB3ZSBjYW4gZG8gaXMgbG9vcCBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0
aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCi0gICAgICAgIC8vIGFy
b3VuZCBhbmQgdHJ5IGFnYWluLgotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9j
a1Nsb3cobV9ieXRlKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvdygpCiB7Ci0gICAg
dW5sb2NrU2xvd0ltcGwoVW5mYWlyKTsKKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
U2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpVbmZhaXIpOwogfQogCiB2b2lkIExv
Y2tCYXNlOjp1bmxvY2tGYWlybHlTbG93KCkKIHsKLSAgICB1bmxvY2tTbG93SW1wbChGYWlyKTsK
LX0KLQotTkVWRVJfSU5MSU5FIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3dJbXBsKEZhaXJuZXNz
IGZhaXJuZXNzKQotewotICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsg
Q0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCi0g
ICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmln
aHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKLSAgICAvLyBiZSBoZWxkIGFu
ZCBwYXJrZWQgaWYgc29tZW9uZSBhdHRlbXB0cyB0byBsb2NrIGp1c3QgYXMgd2UgYXJlIHVubG9j
a2luZy4KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlID0gbV9i
eXRlLmxvYWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkQnl0ZVZhbHVlID09IGlzSGVs
ZEJpdCB8fCBvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQpIHsKLSAgICAgICAg
ICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDApKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFjdGx5IG9uZSB0aHJlYWQuIFdl
IG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQgdGhyZWFkCi0gICAgICAgIC8vIGRpcmVjdGx5LCBv
ciB3ZSB3aWxsIHVubG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0
byBhbGxvdyBmb3IgYmFyZ2luZy4KLSAgICAgICAgLy8gV2hlbiB3ZSB1bmxvY2ssIHdlIG1heSBs
ZWF2ZSB0aGUgcGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGVyZSBh
cmUgc3RpbGwKLSAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBwYXJrZWQuCi0gICAgICAgIEFTU0VS
VChvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtPbmUoCi0gICAgICAgICAgICAmbV9ieXRlLAotICAgICAgICAgICAg
WyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVy
IHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKLSAgICAgICAgICAgICAgICAvLyBz
byB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmlnaHQgbm93LgotICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2J5dGUubG9hZCgpID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFy
a1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQs
IHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdhcwotICAgICAgICAgICAgICAg
ICAgICAvLyB3YWl0aW5nLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9m
ZjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1heUhh
dmVNb3JlVGhyZWFkcykKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKGhhc1Bhcmtl
ZEJpdCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUu
c3RvcmUoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIERlZmF1bHRMb2NrQWxn
b3JpdGhtOjp1bmxvY2tTbG93KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OkZhaXIpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDIwODU3MikKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNyBAQAogI2lm
bmRlZiBXVEZfTG9ja19oCiAjZGVmaW5lIFdURl9Mb2NrX2gKIAotI2luY2x1ZGUgPHd0Zi9BdG9t
aWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tBbGdv
cml0aG0uaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CiAKQEAgLTM3LDYgKzM2LDggQEAgc3RydWN0IExvY2tJbnNwZWN0b3I7CiAKIG5hbWVz
cGFjZSBXVEYgewogCit0eXBlZGVmIExvY2tBbGdvcml0aG08dWludDhfdCwgMSwgMj4gRGVmYXVs
dExvY2tBbGdvcml0aG07CisKIC8vIFRoaXMgaXMgYSBmdWxseSBhZGFwdGl2ZSBtdXRleCB0aGF0
IG9ubHkgcmVxdWlyZXMgMSBieXRlIG9mIHN0b3JhZ2UuIEl0IGhhcyBmYXN0IHBhdGhzIHRoYXQg
YXJlCiAvLyBjb21wZXRldGl2ZSB0byBhIHNwaW5sb2NrICh1bmNvbnRlbmRlZCBsb2NraW5nIGlz
IGlubGluZWQgYW5kIGlzIGp1c3QgYSBDQVMsIG1pY3JvY29udGVudGlvbiBpcwogLy8gaGFuZGxl
ZCBieSBzcGlubmluZyBhbmQgeWllbGRpbmcpLCBhbmQgYSBzbG93IHBhdGggdGhhdCBpcyBjb21w
ZXRldGl2ZSB0byBzdGQ6Om11dGV4IChpZiBhIGxvY2sKQEAgLTUzLDIzICs1NCwxMyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgdm9pZCBsb2NrKCkKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0
LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgYWNx
dWlyZWQhCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBsb2NrU2xv
dygpOworICAgICAgICBpZiAoVU5MSUtFTFkoIURlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrRmFz
dEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIGxvY2tTbG93KCk7CiAgICAgfQog
CiAgICAgYm9vbCB0cnlMb2NrKCkKICAgICB7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgICAg
ICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3Vy
cmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIERlZmF1bHRMb2Nr
QWxnb3JpdGhtOjp0cnlMb2NrKG1fYnl0ZSk7CiAgICAgfQogCiAgICAgLy8gTmVlZCB0aGlzIHZl
cnNpb24gZm9yIHN0ZDo6dW5pcXVlX2xvY2suCkBAIC04OCwxMiArNzksOCBAQCBzdHJ1Y3QgTG9j
a0Jhc2UgewogICAgIC8vIGd1YXJhbnRlZXMgdGhhdCBsb25nIGNyaXRpY2FsIHNlY3Rpb25zIGFs
d2F5cyBnZXQgYSBmYWlyIGxvY2suCiAgICAgdm9pZCB1bmxvY2soKQogICAgIHsKLSAgICAgICAg
aWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6
bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgewotICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCBh
bmQgbm9ib2R5IHdhcyB3YWl0aW5nIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgdW5sb2NrU2xvdygpOworICAgICAgICBpZiAoVU5MSUtFTFkoIURlZmF1bHRMb2Nr
QWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAg
dW5sb2NrU2xvdygpOwogICAgIH0KIAogICAgIC8vIFRoaXMgaXMgbGlrZSB1bmxvY2soKSBidXQg
aXQgZ3VhcmFudGVlcyB0aGF0IHdlIHVubG9jayB0aGUgbG9jayBmYWlybHkuIEZvciBzaG9ydCBj
cml0aWNhbApAQCAtMTAzLDE3ICs5MCwxMyBAQCBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIC8vIHdh
bnQuCiAgICAgdm9pZCB1bmxvY2tGYWlybHkoKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSht
X2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpKSkgewotICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdh
cyB3YWl0aW5nIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5s
b2NrRmFpcmx5U2xvdygpOworICAgICAgICBpZiAoVU5MSUtFTFkoIURlZmF1bHRMb2NrQWxnb3Jp
dGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgdW5sb2Nr
RmFpcmx5U2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2J5dGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlz
SGVsZEJpdDsKKyAgICAgICAgcmV0dXJuIERlZmF1bHRMb2NrQWxnb3JpdGhtOjppc0xvY2tlZCht
X2J5dGUpOwogICAgIH0KIAogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdApAQCAtMTI2LDIxICsx
MDksMTAgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVs
ZEJpdCA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKLQor
ICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7CiAgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHVubG9ja0ZhaXJseVNsb3coKTsKLSAgICAKLSAgICBlbnVtIEZhaXJuZXNzIHsKLSAgICAg
ICAgRmFpciwKLSAgICAgICAgVW5mYWlyCi0gICAgfTsKLSAgICB2b2lkIHVubG9ja1Nsb3dJbXBs
KEZhaXJuZXNzKTsKLSAgICAKLSAgICBlbnVtIFRva2VuIHsKLSAgICAgICAgQmFyZ2luZ09wcG9y
dHVuaXR5LAotICAgICAgICBEaXJlY3RIYW5kb2ZmCi0gICAgfTsKIAogICAgIC8vIE1ldGhvZCB1
c2VkIGZvciB0ZXN0aW5nIG9ubHkuCiAgICAgYm9vbCBpc0Z1bGx5UmVzZXQoKSBjb25zdApJbmRl
eDogU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG0uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9M
b2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9M
b2NrQWxnb3JpdGhtX2gKKyNkZWZpbmUgV1RGX0xvY2tBbGdvcml0aG1faAorCisjaW5jbHVkZSA8
dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbXBpbGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFRoaXMgaXMgdGhlIGFsZ29yaXRobSB1c2VkIGJ5IFdURjo6TG9jay4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9ja1R5cGUgaGFzUGFya2VkQml0
PgorY2xhc3MgTG9ja0FsZ29yaXRobSB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBMb2NrVHlwZSBtYXNrID0gaXNIZWxkQml0IHwgaGFz
UGFya2VkQml0OworCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3RBc3N1bWluZ1pl
cm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgbG9ja0Zhc3QoQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBpZiAob2xkVmFsdWUgJiBpc0hlbGRC
aXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBh
cmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9y
eV9vcmRlcl9hY3F1aXJlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbG9jayhBdG9t
aWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFsb2NrRmFz
dChsb2NrKSkpCisgICAgICAgICAgICBsb2NrU2xvdyhsb2NrKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIGJvb2wgdHJ5TG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAg
ICAgZm9yICg7OykgeworICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9j
ay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICAgICAgaWYgKGN1cnJl
bnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVl
LCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxk
Qml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIGJvb2wgdW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAg
ICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgICAgIGlmICgob2xkVmFsdWUgJiBtYXNrKSAhPSBpc0hlbGRCaXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsob2xkVmFsdWUsIG9sZFZhbHVlICYgfmlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHVubG9jayhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2sp
KSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgVW5mYWlyKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgdW5sb2NrRmFpcmx5KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQorICAgICAgICAgICAg
dW5sb2NrU2xvdyhsb2NrLCBGYWlyKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNM
b2NrZWQoY29uc3QgQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAg
fQorICAgIAorICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCBsb2NrU2xvdyhBdG9taWM8TG9j
a1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKwor
ICAgICAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNl
ZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBz
cGluTGltaXQgPSA0MDsKKyAgICAKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdWlu
dDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisKKyAgICAgICAgICAgIC8vIFdl
IGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRC
eXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAgICAgJiYgbG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMg
bm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0
cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYg
aGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgICAg
ICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgp
OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2VkIGJpdCBm
aXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAgICAgICAgIC8vIGlm
IHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0Lgor
ICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAg
ICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUs
IGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hl
bGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCisg
ICAgICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQorICAgICAgICAg
ICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2NrLCBjdXJyZW50Qnl0ZVZhbHVl
IHwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKyAgICAgICAgICAgIGlmIChwYXJrUmVzdWx0
Lndhc1VucGFya2VkKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tl
bj4ocGFya1Jlc3VsdC50b2tlbikpIHsKKyAgICAgICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRv
ZmY6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZlciByZWxlYXNlZC4g
SXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRoYXQgZGlkCisgICAg
ICAgICAgICAgICAgICAgIC8vIHVubG9jaygpLiBUaGlzIG1lYW5zIHdlJ3JlIGRvbmUhCisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTG9ja2VkKGxvY2spKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNhc2UgQmFyZ2luZ09wcG9ydHVu
aXR5OgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4gVGhl
IHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVsZWFzZWQgdGhlIGxvY2ssCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBt
YXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIgdGhlIGxvY2suIEJ1dAorICAgICAgICAgICAg
ICAgICAgICAvLyBvdGhlciB0aHJlYWRzIG1heSBiYXJnZSwgc28gdGhlIGJlc3QgdGhhdCB3ZSBj
YW4gZG8gaXMgbG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFs
dWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAgICAgICAgLy8gYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgZW51bSBGYWlybmVzcyB7
CisgICAgICAgIEZhaXIsCisgICAgICAgIFVuZmFpcgorICAgIH07CisgICAgTkVWRVJfSU5MSU5F
IHN0YXRpYyB2b2lkIHVubG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaywgRmFpcm5lc3Mg
ZmFpcm5lc3MpCisgICAgeworICAgICAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRo
ZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVy
ZSBpcworICAgICAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDog
ZXZlbiBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAorICAgICAg
ICAvLyBiZSBoZWxkIGFuZCBwYXJrZWQgaWYgc29tZW9uZSBhdHRlbXB0cyB0byBsb2NrIGp1c3Qg
YXMgd2UgYXJlIHVubG9ja2luZy4KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdWlu
dDhfdCBvbGRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKAorICAgICAgICAgICAgICAgIChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQK
KyAgICAgICAgICAgICAgICB8fCAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAKKyAgICAgICAgICAgIGlmICgob2xkQnl0ZVZhbHVl
ICYgbWFzaykgPT0gaXNIZWxkQml0KSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFNvbWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkg
aGFuZCB0aGUgbG9jayB0byB0aGF0IHRocmVhZAorICAgICAgICAgICAgLy8gZGlyZWN0bHksIG9y
IHdlIHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRv
IGFsbG93IGZvciBiYXJnaW5nLgorICAgICAgICAgICAgLy8gV2hlbiB3ZSB1bmxvY2ssIHdlIG1h
eSBsZWF2ZSB0aGUgcGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGVy
ZSBhcmUgc3RpbGwKKyAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgorICAgICAg
ICAgICAgQVNTRVJUKChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0KSk7CisgICAgICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCisgICAgICAgICAg
ICAgICAgJmxvY2ssCisgICAgICAgICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1
bHQgcmVzdWx0KSAtPiBpbnRwdHJfdCB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0
aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBo
YXNQYXJrZWRCaXQsCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBz
ZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgo
bG9jay5sb2FkKCkgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhy
ZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQs
IHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdhcworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gd2FpdGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJl
Y3RIYW5kb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBM
b2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
TG9ja1R5cGUgbmV3VmFsdWUgPSBvbGRWYWx1ZSAmIH5tYXNrOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3VmFsdWUgfD0gaGFzUGFya2VkQml0OworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGVudW0gVG9rZW4geworICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCisg
ICAgICAgIERpcmVjdEhhbmRvZmYKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6TG9ja0FsZ29yaXRobTsKKworI2VuZGlmIC8vIFdURl9Mb2NrQWxnb3JpdGht
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3Bw
CShyZXZpc2lvbiAyMDg1NzIpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAiQ29u
ZGl0aW9uLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisj
aW5jbHVkZSA8Y2Zsb2F0PgorI2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xlZXAo
Y29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRp
bChmYWtlTG9jaywgdGltZSk7CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cGUmIHRpbWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisgICAg
aWYgKCEodGltZSA+IHRpbWUud2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdGlt
ZSA8PSB0aW1lLm5vd1dpdGhTYW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
IApJbmRleDogU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJldmlz
aW9uIDIwODU3MikKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOwog
CitXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZSYpOworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGU7Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6OnNs
ZWVwOwogCiAjZW5kaWYgLy8gV1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294512</attachid>
            <date>2016-11-11 11:27:21 -0800</date>
            <delta_ts>2016-11-11 13:07:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>235851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1MyBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuCisKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBpc09sZEV4dGVybmFsT2JqZWN0Ol0pOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQWNj
ZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vz
czo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6
CisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVtZW1i
ZXJDb2RlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphcnJheWlm
eSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6bWFy
a0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6Om1hcmtDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6OnJlbWVt
YmVyQ29kZUJsb2Nrcyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICog
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTEpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6On5KSVRDb2RlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6aXNBcnJheVR5cGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAg
ICAgKiBoZWFwL0NlbGxTdGF0ZS5oOgorICAgICAgICAqIGhlYXAvR0NTZWdtZW50ZWRBcnJheS5o
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRo
ZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpS
ZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29wZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucyk6CisgICAgICAgIChKU0M6
OkhlYXA6Om1hcmtUb0ZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVyU3RhY2tS
b290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmJlZ2luTWFya2luZyk6CisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNp
dENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnVw
ZGF0ZU9iamVjdENvdW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmVuZE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb2xsZWN0SW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlV29ybGQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpyZXN1bWVUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIp
OgorICAgICAgICAoSlNDOjpIZWFwOjpjYW5Db2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0
ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bm90aWZ5SXNTYWZlVG9D
b2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVh
cDo6dmlzaXRFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFN0
cm9uZ0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEhhbmRsZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFNoYWRvd0NoaWNrZW4pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BBbGxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yU2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpIZWFwOjptdXRhdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6c2xvdFZpc2l0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJ
c1NhZmVUb0NvbGxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8pOgorICAgICAgICAqIGhl
YXAvTWFya1N0YWNrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAqIGhl
YXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6TWFya2VkQmxv
Y2spOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpTZXRO
ZXdseUFsbG9jYXRlZEZ1bmN0b3I6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERl
bGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGlu
Zyk6CisgICAgICAgICogaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmg6IEFkZGVkLgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6U2xv
dFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmNsZWFyTWFya1N0YWNrcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRK
U0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRU
b01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JN
YXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRy
YWluRnJvbVNoYXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4pOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cyk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNsZWFyTWFy
a1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RD
b3VudCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6Y29sbGVjdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpieXRlc1Zpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzQ29waWVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJ
bmZvKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2Nr
Lmg6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXI6Ok5vRGVmZXI6Ok5v
RGVmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpKU0Nl
bGw6OkludGVybmFsTG9ja2VyOjpJbnRlcm5hbExvY2tlcik6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6SW50ZXJuYWxMb2NrZXI6On5JbnRlcm5hbExvY2tlcik6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OmF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyk6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpKU0NlbGwpOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjppbmRleGluZ1R5cGVBbmRNaXNjKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQ2VsbDo6Y2FsbERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmxvY2tJbnRl
cm5hbExvY2spOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnVubG9ja0ludGVybmFsTG9jayk6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5k
ZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmluZFN0
cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFu
Z2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphdHRyaWJ1
dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0RpY3Rpb25h
cnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6aXNGcm96ZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1h
dGVyaWFsaXplUHJvcGVydHlNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJREJsb2Iu
aDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpTdHJ1Y3R1cmVJREJsb2IpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OnNldEluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6Omlu
ZGV4aW5nVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6c2V0
SW5kZXhpbmdUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpp
bmRleGluZ1R5cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnNldFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvcGVydHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KTogRGVsZXRlZC4KKwogMjAxNi0xMS0x
MSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyMDg1ODQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUx
LDcgKzE1MSw3IEBAIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9iamNPYmplY3QoaWQgb2JqZWMKIC0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0CiB7CiAgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOwotICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworICAgIHJldHVybiB2bS0+aGVhcC5jb2xsZWN0b3JTbG90
VmlzaXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOwogfQogCiAtICh2b2lkKWFkZEV4
dGVybmFsUmVtZW1iZXJlZE9iamVjdDooaWQpb2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTYxMyw2ICs2MTMsNyBAQAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8q
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJMEZBREREMUQxREQwMUVERTAwODI3NUU4IC8q
IFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQURERDFDMUREMDFFREMwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNj
b3BlLmggKi87IH07CiAJCTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREU2NzIxRDRE
MjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJCTBGQUY3RUZEMTY1QkE5MUIwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzAwNCw2ICszMDA1LDcgQEAK
IAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3QThF
RDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURERDFDMUREMDFFREMwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3VtZVRoZVdvcmxkU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhlYXBVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERp
c2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3Nl
bWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2ODYsNiArNTY4OCw3IEBA
CiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAogCQkJ
CUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMEY3
Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKKwkJ
CQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovLAog
CQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJ
MTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQw
ODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLApAQCAtNzkxOCw2
ICs3OTIxLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIgLyogREZHQmFzaWNCbG9j
a0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOTYxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZBREREMUQxREQwMUVERTAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDM0QyQjBBMUQzNDMxNjIwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tN
YXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDgwLDcgKzEwMDg0LDYgQEAKIAkJCQkw
RkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENCMzQxMDA0QzJFQjggLyogRGVidWdnZXJQYXJzZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTNGRjdGOUQxREMwMERCMTAwQTI2Q0NDIC8qIFdh
c21Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcx
IC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQy
MTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2
aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7
CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB2YWx1ZTsKLSAgICAgICAgaml0LmxvYWQ4
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdmFsdWUpOwogICAgICAgICBq
aXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hh
cGVNYXNrKSwgdmFsdWUpOwogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIEFM
V0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUKIGJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0KKyAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJl
Z3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAtMTczLDcgKzE3Myw3IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUEKICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZS5wYXlsb2Fk
R1BSKCk7CiAgICAgfQotCisgICAgCiAgICAgaml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSks
IHZhbHVlKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZUFycmF5TGVuZ3RoKFYKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVn
cygpOwogICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKTsK
IAotICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8
IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CiAgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRo
ID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+aW5kZXhpbmdUeXBl
KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjA3LDcgKzYwNyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwODU5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlm
aWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgogICAgICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIHNp
bmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCiAgICAgICAgICAgICBqaXQt
Pm1faml0LmxvYWQ4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
YmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIG1fc3RydWN0dXJlR1BSKTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX3N0cnVj
dHVyZUdQUik7CiAgICAgICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAuZmlsbCgKICAgICAg
ICAgICAgICAgICBqaXQsIGppdC0+anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShtX3N0cnVj
dHVyZUdQUiwgbV9hcnJheU1vZGUpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODks
NiArODg5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgcmVhZChKU09i
amVjdF9idXR0ZXJmbHkpOyAvLyBUaGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2UuCiAgICAgICAg
IHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5m
b1R5cGUpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNo
MSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gxKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJs
eUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9k
ZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsOSArNTA1LDkgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVl
LmlzQ2VsbCgpKSkgewogICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CiAKLSAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpIHsKKyAgICAgICAgaWYgKHByb3Bl
cnR5LmlzVUludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZ2V0QnlWYWwoZXhlYywgYmFzZSwg
cHJvcGVydHkuYXNVSW50MzIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEb3Vi
bGUoKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CiAgICAgICAg
ICAgICBkb3VibGUgcHJvcGVydHlBc0RvdWJsZSA9IHByb3BlcnR5LmFzRG91YmxlKCk7CiAgICAg
ICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5QXNVSW50MzIgPT0g
cHJvcGVydHlBc0RvdWJsZSAmJiBpc0luZGV4KHByb3BlcnR5QXNVSW50MzIpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAs
MTYgKzYxMCwzNCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21w
aWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBs
YW46OnJlbWVtYmVyQ29kZUJsb2NrcygpCit2b2lkIFBsYW46Om1hcmtDb2RlQmxvY2tzKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKIHsKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90
cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4g
ZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3Vt
ZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcg
R0MuCisKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihj
b2RlQmxvY2spOworICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJs
b2NrKQorICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihwcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CisKK3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKICAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1
ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCiAgICAgLy8gYW4gZXhwbGljaXQg
YmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CiAg
ICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCiAKLSAg
ICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIEhl
YXA6OmhlYXAoY29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKLSAgICAgICAgSGVhcDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jayktPndy
aXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBz
dHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgQ29tcGls
YXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsKKyAg
ICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCByZW1lbWJlckNv
ZGVCbG9ja3MoVk0mKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZv
aWQgY2FuY2VsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw3ICs4
MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBC
YWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCAwLAog
ICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5h
cnJheU1vZGUoKSkpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFy
cmF5aWZ5KE5vZGUqIG5vZGUKICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvRlRMKCkp
CiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKLQorICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAgICAgTmF0dXJhbExvb3BzJiBu
YXR1cmFsTG9vcHMgPSAqbV9ncmFwaC5tX25hdHVyYWxMb29wczsKICAgICAgICAgSGFzaE1hcDxj
b25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVkPiBuYXR1cmFsTG9vcFRvTG9vcEhpbnQgPSBidWls
ZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChuYXR1cmFsTG9vcHMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIK
QEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisj
aWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGlj
IEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9s
ZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExv
Y2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50
IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNv
bXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2
bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAg
IGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBt
X3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9
CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlz
dDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBs
YW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0
IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQg
bWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAg
ICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZv
ckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZt
LCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2
bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJM
RShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3Zv
aWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1i
ZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFu
LmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFj
ZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25v
d24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAg
IC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAg
ICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2
NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0
dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21w
bGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90Vmlz
aXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5j
cHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBA
QCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0
ZSgmcm9vdCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGlj
aXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5Lgot
ICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXpl
b2YoaW50MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5
cGUub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJF
TEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90
eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhp
bmdUeXBlLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNp
emVvZihpbnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5n
VHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgp
ICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxs
U3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgm
SlNDZWxsX2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlND
ZWxsX2hlYWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2Vs
bF91c2VmdWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFy
ZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdl
UGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNo
YW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNo
YW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3Is
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxs
X2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2Vs
bF9oZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1p
c2MsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlND
ZWxsX3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNy
byhKU0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJs
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0
aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3Jv
KEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAg
ICAgICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOworICAgICAgICBk
YXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzgwLDYgKzI3ODAsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUo
KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGls
aW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9k
ZSk7CisgICAgICAgIAorICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1fb3V0LmZlbmNlKCk7
CisgICAgICAgIC8vIFdlIGNvdWxkIGRlY29yYXRlIHRoaXMgd2l0aCB0aGUgdW5pb24gb2YgYnV0
dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIHdvbid0CisgICAgICAgIC8vIGhlbHAgdGhh
dCBtdWNoLiBQcmVjaXNlIHJlYWQgYWNjb3VudGluZyBpcyBtb3N0bHkgZm9yIHN0b3JlIGVsaW1p
bmF0aW9uIGFuZCBpZiB0aGlzCisgICAgICAgIC8vIHJlYWRzIHN0cnVjdHVyZSB0aGVuIGl0J2xs
IGJsb2NrIHRoYXQgc3RvcmUgZWxpbWluYXRpb24uIFdlIHJlYWxseSB3YW50IHRvIGJlIGFibGUK
KyAgICAgICAgLy8gdG8gcHV0IGEgcmVsZWFzZSBmbGFnIG9uIHRoZSBzdG9yZSBiZWxvdy4KKyAg
ICAgICAgZmVuY2UtPndyaXRlID0gSGVhcFJhbmdlKCk7CiAKICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CkBAIC01
MDM0LDYgKzUwNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25z
LmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CkBAIC01MDQxLDcgKzUwNDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlh
bnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBk
YXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5m
bygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7
CkBAIC01MDQ5LDcgKzUwNjEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
c3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExNzM5LDcgKzExNzUwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5n
VHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5n
VHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDhaZXJv
RXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIwODU5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAg
ICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgR1BSSW5mbzo6cmVn
VDEpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0MzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQub3IzMihH
UFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2Zp
bGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTEgQEAgZW51
bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKICAgICAvLyBTbG90VmlzaXRvcnMgYXJlIGRv
bmUuCiAgICAgQW50aHJhY2l0ZU9yQmxhY2sgPSAwLAogICAgIAotICAgIC8vIFRoZSBvYmplY3Qg
aXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90
IGJlZW4gbWFya2VkIHlldC4KKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdvaW5nIHRvIGJlIGlzIGlu
IGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVu
IG1hcmtlZCB5ZXQuCiAgICAgTmV3V2hpdGUgPSAxLAogCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSBpbiB0aGlzIEdDIHRoYXQgd2UgYXJlCi0gICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4gSWYgdGhp
cyBpcyBhbiBlZGVuIEdDLCB0aGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGVk
ZW4uCi0gICAgTmV3R3JleSA9IDIsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUu
IGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGJ1dCBpdCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChp
ZiB0aGlzIGlzIGVkZW4KLSAgICAvLyBHQykgb3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGlu
IHRoaXMgY3VycmVudCBHQyAoYmVjYXVzZSBhIGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1
ZXN0ZWQKLSAgICAvLyByZS1ncmV5aW5nKS4KLSAgICBPbGRHcmV5ID0gMworICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkLgorICAgIEdyZXkgPSAyLAog
fTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBi
bGFja1RocmVzaG9sZCBtZWFucyB4IGlzIEFudGhyYWNpdGVPckJsYWNrLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTYyLDMgKzE2NCw0IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIw
ODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw2ICs3OCwzNSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgSGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZSB7CitwdWJsaWM6CisgICAg
UmVzdW1lVGhlV29ybGRTY29wZShIZWFwJiBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQor
ICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAg
ICAgICAgICAgZGF0YUxvZygoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGlt
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMuLi5dXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGVh
cC5yZXN1bWVUaGVXb3JsZCgpOworICAgIH0KKyAgICAKKyAgICB+UmVzdW1lVGhlV29ybGRTY29w
ZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxkKCk7CisKKyAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisK
IG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICog
TUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwg
bV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6
bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3Rk
OjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04p
CiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwg
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIg
KzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZv
aWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmco
KQpAQCAtNDM5LDExNyArNDcxLDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMo
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRl
QWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAK
LXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtS
b290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2Nv
cGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50
Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNp
dG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdl
bmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNl
Iik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkg
eworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2st
PmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVt
ZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0j
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGls
IHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIn
cyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGlu
Z1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUK
LSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5j
ZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lk
ZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNz
VW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVs
bCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5N
YXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhp
c10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFi
bGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RG
TW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0
b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNl
dEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmICht
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3
VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
bG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChH
Q1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQo
R0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNp
dG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygp
OwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpz
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0
b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAg
ICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBk
b3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91Ymxl
IHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlh
bFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMi
LCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0g
dG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAv
LyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZp
eHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgorICAgICAgICAgICAg
CisgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xs
ZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAo
bV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFya0xpc3RT
ZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8g
Y29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0
IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQg
dG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAg
ICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBi
YXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1i
ZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFBy
b3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1
ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RW
aXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0g
ICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRT
YW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAg
IHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHVi
Um91dGluZXMoKTsKLSAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENv
bnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVy
Z2VuY2UiKTsKLQotICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJl
Y2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0
aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJv
b3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwor
ICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAg
ICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCisgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0
byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAg
IHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAg
ICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpOworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNl
cnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUK
KyAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3Vy
ZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28g
dGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28s
IHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sg
LSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28g
d2FudCB0byBkbyB0aGlzCisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0
aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0
CisgICAgICAgIC8vIEdDLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1f
dm0pOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFj
a3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFk
KQorICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIu
CisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
IAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOwor
ICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQo
U2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYg
KGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewor
ICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5k
RHJhaW4oKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZy
b21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRp
bWVUb1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQog
CiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRl
eCk7CkBAIC01NjMsNyArNjQyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IHJvb3RzKQogewotICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9t
YWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJv
dXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0KIApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVh
cDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxD
b2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAK
ICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywg
Im1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lk
IEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Ns
b3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlz
aXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9z
bG90VmlzaXRvci5hcHBlbmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFw
cGVuZChyb290cyk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBk
YXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKKyAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICNlbmRpZgogfQogCkBAIC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFw
OjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2
aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBS
b290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0
czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQt
PnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1h
cmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1
ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxh
c3RFeGNlcHRpb24oKSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25n
IEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJv
ZmlsZXIoKQotewotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
ewotICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkp
OwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQot
ewotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJv
ZmlsZXJMb2coKS0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUg
UHJvZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hh
ZG93Q2hpY2tlbigpCi17Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
bV9zbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCkKLXsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMobV9zbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1
YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25h
dGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzIik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHModmlzaXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7
Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAg
IGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAg
ICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RD
b3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xv
dFZpc2l0b3IudmlzaXRDb3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0
aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9i
amVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkg
LSBnY1N0YXJ0VGltZSk7CiAgICAgfQpAQCAtODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAw
OwogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0
ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkVGhpc0N5Y2xlID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNp
dGVkKCkgKworICAgICAgICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFs
Qnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQg
SGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAg
IG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBI
ZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsK
ICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpB
bnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBn
cmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdy
ZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4g
b2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMg
d2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0
d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAg
Ly8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJs
YWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21l
IHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcg
cGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0
IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVj
dG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2Jq
ZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29t
ZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVu
Zm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2st
PmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0x
MDk0LDI0ICsxMDQwLDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAg
ICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25p
Y1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFM
b2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9
IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0
eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFC
TEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwot
ICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1f
dm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgp
LT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24g
c2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7
CkBAIC0xMTMxLDEyICsxMDY3LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAg
ICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpC
ZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7
Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3Rz
KGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAg
IAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVP
YmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzEx
MDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1l
TVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAg
ICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRh
dGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIs
IChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQog
ICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzExMjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29y
bGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygp
OwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOwor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1f
b2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogewor
ICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24g
Y3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0
aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBu
by1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAg
ICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3lj
bGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3Bh
Y2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKQEAgLTE0NjksMTAgKzE0MjUsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9w
cGluZyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NT
Y29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENv
ZGUoKTsKLSAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VB
bGxvY2F0aW9ucygpOworICAgIHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2Nv
cGUoKnRoaXMpOworICAgICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAg
ICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2Nh
dGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3Vz
bHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7CiAgICAgaWYgKEhhc093blByb3BlcnR5Q2Fj
aGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+
Y2xlYXIoKTsKIH0KQEAgLTE1NTQsMjMgKzE1MTUsOSBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENv
bGxlY3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxlY3Qo
KTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsKLSAgICBt
X3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFwOjpmbHVz
aFdyaXRlQmFycmllckJ1ZmZlcigpCiB7Ci0gICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbikgewotICAgICAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVz
aCgqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZm
ZXIucmVzZXQoKTsKLX0KLQotdm9pZCBIZWFwOjpzdG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9v
YmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZs
dXNoKCp0aGlzKTsKIH0KIAogdm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xOTU0
LDcgKzE5MDEsNyBAQCBib29sIEhlYXA6OmNhbkNvbGxlY3QoKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSB8fCBtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3Rh
dGU6OkhlbHBpbmdHQykKKyAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpI
ZWxwaW5nR0MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE5NzYsMTIgKzE5MjMsOCBAQCBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3koKQogICAg
IHJldHVybiBtYXlCZUdDVGhyZWFkKCkgfHwgbXV0YXRvclN0YXRlKCkgIT0gTXV0YXRvclN0YXRl
OjpSdW5uaW5nOwogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxs
U3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUt
Y291bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xs
ZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpF
ZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0cmFNZW1vcnlTaXplOwogICAgIAogICAgIGZv
ciAoOzspIHsKQEAgLTE5OTIsMTIgKzE5MzUsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChDZWxsCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIEhl
YXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNp
emUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dGVybmFs
IG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBp
ZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRl
ID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBj
b3VudGVyID0gJm1fZXh0ZXJuYWxNZW1vcnlTaXplOwogCiAgICAgZm9yICg7OykgewpAQCAtMjA5
MSw0ICsyMDMwLDExIEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8K
IH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCkKK3sKKyAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CisgICAgaWYgKE9wdGlvbnM6OmNv
bGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvblNjb3Bl
LmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJIYW5k
bGVTZXQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJU
aW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBA
IC03MCw3ICs3MCw5IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOwog
Y2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIE1hcmtT
dGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTEyOSw3ICsx
MzEsOCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4g
bV9vYmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsg
cmV0dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIGNvbnN0IFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRv
ciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gKm1f
bXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNh
bGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdD
QWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTE2OCw3ICsxNzEs
NyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlND
ZWxsKiwgRmluYWxpemVyKTsKICAgICB2b2lkIGFkZEV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2Uq
KTsKIAotICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVj
dCA9IHRydWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIGJvb2wg
aXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3Q7CkBA
IC0yMDMsMTEgKzIwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1
bmN0aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwogICAgIC8v
IG1lbW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXpl
X3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRy
YSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3Rh
dGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlTaXplKCkgeyBy
ZXR1cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNlbmRpZgogCkBAIC0zOTEsNiArMzk0LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhl
V29ybGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIGZyaWVu
ZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0
b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQyMiwzMSArNDI4
LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7
CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4p
OwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9p
ZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAotICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBn
Y1N0YXJ0VGltZSk7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUp
OwogICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZv
aWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRo
ZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGJlZ2lu
TWFya2luZygpOwotICAgIHZvaWQgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAgICB2
b2lkIHZpc2l0U21hbGxTdHJpbmdzKCk7CiAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFr
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVz
KCk7Ci0gICAgdm9pZCB2aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lk
IHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdI
YW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwotICAgIHZv
aWQgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE4LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3Miw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTYwMCw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgy
LDE0IEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1f
aGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAg
ICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVt
cGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVN
b2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2Rl
IG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtz
TW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUg
PT0gU3dlZXBPbmx5KSk7CiAgICAgCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogCkBAIC05OSw3ICsxMDEsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQog
ICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCkgewotICAgICAgICBBU1NFUlQobWFy
a3NNb2RlID09IE1hcmtzU3RhbGUpOworICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtz
U3RhbGUgfHwgYmxvY2subV9tYXJrcy5pc0VtcHR5KCkpOwogICAgICAgICAKICAgICAgICAgY2hh
ciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5h
dG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3Rh
cnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKQEAgLTExMSw2ICsxMTMsOCBAQCBGcmVlTGlzdCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0
ZWQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHko
dGhpcywgdHJ1ZSk7CisgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAg
ICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKICAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJl
ZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CiAgICAg
ICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkgc3dlcHQgYmxvY2sg
IiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFu
ZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsKQEAgLTEy
MywxNyArMTI3LDExIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUK
ICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBib29s
IGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewotICAgICAgICBpZiAoZW1wdHlNb2RlID09
IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYm
IGJsb2NrLm1fbWFya3MuZ2V0KGkpKQotICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkg
ewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgVmVjdG9yPHNpemVfdD4gZGVhZENlbGxzOworICAgIGF1
dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBpKSB7CiAgICAgICAgIEhlYXBDZWxsKiBj
ZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYmxvY2suYXRvbXMoKVtpXSk7
CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9uICYmIGVt
cHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCktPmNhbGxEZXN0cnVjdG9yKCp2bSgpKTsKIAogICAg
ICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewpAQCAtMTQ0LDEyICsxNDIs
MzMgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAg
ICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQorICAg
IH07CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9
IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKKyAg
ICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJr
cy5nZXQoaSkpCisgICAgICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNO
ZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7CisgICAgICAgICAg
ICBpc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3Jz
QW5kQ29sbGVjdG9ySXNSdW5uaW5nKQorICAgICAgICAgICAgZGVhZENlbGxzLmFwcGVuZChpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQotCisg
ICAgCiAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRpc2NhcmQgdGhlIG5ld2x5QWxsb2NhdGVkIGJp
dHMgaWYgd2UncmUgY3JlYXRpbmcgYSBGcmVlTGlzdCwKICAgICAvLyBvdGhlcndpc2Ugd2Ugd291
bGQgbG9zZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgY3VycmVudGx5IGFsaXZlLgogICAgIGlmIChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0ICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNO
ZXdseUFsbG9jYXRlZCkKICAgICAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRT
cGFjZTo6bnVsbFZlcnNpb247CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQor
ICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CisgICAgCisgICAgaWYgKGRlc3RydWN0aW9u
TW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgOiBkZWFkQ2VsbHMpCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2Vs
bChpKTsKKyAgICB9CiAKICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6bGlzdChoZWFk
LCBjb3VudCAqIGNlbGxTaXplKCkpOwogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVM
aXN0KQpAQCAtMTc3LDEyICsxOTYsMTggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXAoU3dlZQogICAgIAogICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKHRo
aXMpKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVz
dHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxO
ZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1vZGUpOwotICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dFNjcmliYmxlTW9kZTxEb2VzTm90TmVlZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOworICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwor
ICAgIAorICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlv
bikgeworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENv
bGxlY3RvcklzUnVubmluZz4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVy
U2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CisgICAg
fQorICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc05vRGVz
dHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAg
IGlmIChzY3JpYmJsZUZyZWVDZWxscygpKQpAQCAtMTkwLDcgKzIxNSw3IEBAIEZyZWVMaXN0IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxl
Y3RFbXB0eU1vZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBEb250U2NyaWJibGU+KHN3ZWVwTW9kZSk7CiB9
CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgc3dlZXBN
b2RlKQogewogICAgIC8vIEl0J3Mgbm90IG9idmlvdXMsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHdh
eSB0byBrbm93IGlmIHRoZSBibG9jayBpcyBlbXB0eS4gSXQncyB0aGUgb25seQpAQCAtMjA1LDcg
KzIzMCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICBy
ZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZDxOb3RFbXB0eSwgZGVzdHJ1
Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1v
ZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVk
KFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYgKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkp
CkBAIC0yMTMsNyArMjM4LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBI
ZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZTxlbXB0eU1vZGUsIGRl
c3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkPihz
d2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUg
ZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpO
ZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxv
Y2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
Y3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9j
YXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAg
ICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTIyMSwxMCArMjQ2LDE2IEBA
IEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dl
ZXBIZWxwZXJTZWxlY3RNYXJrc01vZGU8ZW1wdHlNb2RlLCBTd2VlcE9ubHksIGRlc3RydWN0aW9u
TW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGU+KCk7CiB9CiAKLXRlbXBsYXRl
PE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxs
b2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpCiB7Ci0gICAgaWYgKGFyZU1hcmtzU3Rh
bGUoKSkKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHNwYWNlKCktPm1hcmtpbmdW
ZXJzaW9uKCk7CisgICAgYm9vbCBtYXJrc0FyZVVzZWZ1bCA9ICFibG9jaygpLmFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkK
KyAgICAgICAgbWFya3NBcmVVc2VmdWwgfD0gYmxvY2soKS5tYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhtYXJraW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKCFtYXJrc0FyZVVzZWZ1
bCkKICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUs
IGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtz
U3RhbGU+KCk7CiAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1v
ZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtzTm90U3RhbGU+KCk7CiB9CkBAIC0yNDEsMjQgKzI3Miw2IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7CiB9CiAK
LWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9p
ZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVh
cENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJs
b2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9jay0+c2V0
TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2Js
b2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25z
dCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEyICsyNzks
MTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIEFTU0VS
VCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlz
dGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUg
YWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBz
aW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRvbmUgc3Rv
cEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxvY2F0aW9u
V2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsKKyAgICAK
ICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0
aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJl
IG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3YXkgdG8g
dGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3OSwxMiArMjk3LDE3IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2NhdGVkLmNs
ZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNw
YWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1
bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAgICBmb3JF
YWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBzZXROZXdseUFsbG9jYXRlZChjZWxsKTsK
KyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9
KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAgICAgIFsm
XSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwogICAg
ICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICAgICAgY2xlYXJOZXdseUFs
bG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzMwLDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVz
dW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4i
KTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNT
RVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkp
IHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qg
bm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFs
cmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAg
ICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpAQCAtMzU0LDYgKzM4MSw4IEBAIHZvaWQg
TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAoaGFuZGxl
KCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwgIW1hcmtz
Q29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IENsZWFy
aW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAgICAvLyBX
ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNv
Z25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vy
dml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRoZSBvbGQg
ZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1
Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBAIC0zNjIs
NiArMzkxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAg
ICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFya3MuY2xl
YXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBk
YXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBI
ZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRl
ZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
ID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwg
c2V0IG9mIGJpdHMKQEAgLTQyOSw3ICs0NjAsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmRpZENvbnN1bWVGcmVlCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFy
a2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNTRVJUKGlz
RnJlZUxpc3RlZCgpKTsKICAgICBtX2lzRnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFsbG9jYXRv
cigpLT5zZXRJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKKyAgICBhbGxvY2F0b3IoKS0+YXRvbWlj
U2V0QW5kQ2hlY2tJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKIH0KIAogc2l6ZV90IE1hcmtlZEJs
b2NrOjptYXJrQ291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMzAgKzE5MCwzMiBAQCBwdWJsaWM6
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFuZGxlKEhlYXAmLCB2b2lkKik7CiAgICAgICAgIAot
ICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGU+CisgICAgICAgIGVudW0gU3dlZXBEZXN0
cnVjdGlvbk1vZGUgeyBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcgfTsKKyAgICAgICAgCisg
ICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlPgogICAgICAgICBGcmVlTGlzdCBz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGVudW0gU2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxlLCBTY3Jp
YmJsZSB9OwogICAgICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSwg
U2NyaWJibGVNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShT
d2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gRW1wdHlN
b2RlIHsgSXNFbXB0eSwgTm90RW1wdHkgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVt
cHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAg
RnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgPSBT
d2VlcE9ubHkpOwogICAgICAgICAKICAgICAgICAgZW51bSBOZXdseUFsbG9jYXRlZE1vZGUgeyBI
YXNOZXdseUFsbG9jYXRlZCwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCB9OwogICAgICAgICAK
LSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9k
ZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAg
ICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBP
bmx5KTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBE
ZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAg
ICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhl
bHBlclNlbGVjdE1hcmtzTW9kZSgpOwogICAgICAgICAKICAgICAgICAgZW51bSBNYXJrc01vZGUg
eyBNYXJrc1N0YWxlLCBNYXJrc05vdFN0YWxlIH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0
ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5l
d2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxv
Y2F0ZWRNb2RlLCBNYXJrc01vZGU+CiAgICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAo
KTsKICAgICAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZv
ck1hcmtpbmcoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAg
ICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAg
WyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAg
ICAgICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODU5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAj
ZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX3N0
YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDApCisg
ICAgOiBtX2J5dGVzVmlzaXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lz
SW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNl
Ojppbml0aWFsVmVyc2lvbikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNp
dG9yKEhlYXAmIGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIGNs
ZWFyTWFya1N0YWNrKCk7CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCkBAIC0xMDksMTYgKzEwNywxNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVz
VmlzaXRlZCA9IDA7Ci0gICAgbV9ieXRlc0NvcGllZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0g
MDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwotICAgIEFTU0VSVCghbV9j
dXJyZW50Q2VsbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCit2b2lkIFNsb3RWaXNpdG9yOjpjbGVh
ck1hcmtTdGFja3MoKQogewotICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBtX2NvbGxlY3RvclN0
YWNrLmNsZWFyKCk7CisgICAgbV9tdXRhdG9yU3RhY2suY2xlYXIoKTsKIH0KIAogdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKQEAg
LTE0OCw3ICsxNDcsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFy
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpzQ2Vs
bC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgICAgIGpzQ2VsbC0+c2V0
Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAKICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2so
anNDZWxsKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwLDcgKzIwOSw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2UKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBv
YmplY3QgaXMgZ3JleSBhbmQgdGhhdDoKICAgICAvLyBJbiBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6
IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQgaXMgZ3JleSBpbiB0aGlzIEdDIGN5Y2xlLgogICAgIC8v
IEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0aW9uOiBpdCdzIGEgbmV3IG9iamVjdCB0aGF0IGJlY2Ft
ZSBncmV5IHJhdGhlciB0aGFuIGFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICBjZWxsLT5z
ZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBhcHBlbmRUb01hcmtTdGFjayhjb250YWluZXIs
IGNlbGwpOwogfQpAQCAtMjI4LDE2ICsyMjcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRUbwogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLSAgICBBU1NFUlQoY2Vs
bC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6T2xkR3JleSk7CisgICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09
IENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAg
ICAKLSAgICAvLyBGSVhNRTogVGhlc2UgImp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRz
IHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gQnV0Ci0gICAgLy8gdGhh
dCB3b24ndCBiZSB0aGUgY2FzZSB3aGVuIHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAgbV92aXNp
dENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXplKCk7CiAg
ICAgCi0gICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBl
bmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFj
ayhjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9tdXRhdG9yU3RhY2suYXBwZW5kKGNlbGwp
OwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2Up
CkBAIC0yOTQsMTIgKzI5NiwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZp
c2l0Q2hpCiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0
aGlzLCBjZWxsKTsKICAgICAKLSAgICBtX29sZENlbGxTdGF0ZSA9IGNlbGwtPmNlbGxTdGF0ZSgp
OworICAgIGlmIChmYWxzZSkgeworICAgICAgICBkYXRhTG9nKCJWaXNpdGluZyAiLCBSYXdQb2lu
dGVyKGNlbGwpKTsKKyAgICAgICAgaWYgKG1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAobXV0YXRvcikiKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICB9CiAgICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFjZSBoZXJlIC0gdGhlIGNlbGwgc3RhdGUg
Y2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2JqZWN0cyBjYW4gb25seSBiZQotICAgIC8v
IHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBOZWl0aGVyIHRoZSBiYXJyaWVyIG5vciBt
YXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbgotICAgIC8vIG9iamVjdCB0aGF0IGlz
IGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpP
bGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgLy8g
RnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9yIHRoZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxy
ZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0IGF0CisgICAgLy8gYWJvdXQgdGhlIHNhbWUg
dGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3MgZmluZS4gSXQncyBhIGduYXJseSBhbmQgc3Vw
ZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90IGNsZWFyIHRvIG1lIHRoYXQgaXQgd291bGQg
YmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJhaWwgaGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFs
cmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAgCkBAIC0zMjYsMjMgKzMzMywyMyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgfQogICAgIAogICAgIGlm
IChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKSB7Ci0gICAgICAgIGlmIChtX29sZENl
bGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkpCisgICAgICAgIGlmICghbV9pc1Zpc2l0aW5n
TXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRO
b2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogICAgIH0KIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pCiB7CiAg
ICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkgb2Z0ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUg
Y29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1bWUgdGhhdCBkb25hdGluZyBpcyBub3QgcHJv
Zml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tpbmcgd2hlbiBhIHRocmVhZCByZWFjaGVzIGEg
ZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAy
KQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0
aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFi
bGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAgaWYgKHRv
LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBv
biB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCkBAIC0z
NTIsMjYgKzM1OSw0MyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVh
ZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVD
ZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7CisgICAgZnJvbS5kb25hdGVTb21lQ2Vs
bHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5
QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6
OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xs
ZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayk7CisgICAgZG9u
YXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JN
YXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRp
bWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKLSAgICB3aGls
ZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93
bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOwor
ICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFj
ay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgICAgIGlmICghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2su
cmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3Zl
TGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1f
Y29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9tdXRh
dG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwo
KTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcg
b2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBvZgorICAgICAgICAg
ICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2Uu
IFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAgICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkg
dGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgbWFya2VkLgorICAgICAgICAg
ICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTsp
CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0
KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAg
ICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQor
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFy
ZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0
MTYsNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAg
ICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVyIHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9y
IHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAgICAgICAgICAgICAgIC8vIGZvciB1cyB0byBk
by4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0aGVtIHRv
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0g
U2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1p
bmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KICAgICAgICAgICAgICAgICBpZiAo
IW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisg
ICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAgICAgICAgICAgICAgIGxvY2ssCisgICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCgKKyAg
ICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgW3Ro
aXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVudCBwaGFzZSBkb25lPyBJZiBzbywgcmV0dXJu
IGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAg
ICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5n
UGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2suc3RlYWxTb21l
Q2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJr
U3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAg
ICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAg
Km1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFy
YWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKCk7Cisg
ICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0KIApAQCAtNDUzLDcgKzQ4OSw2IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAogewogICAgIEFTU0VSVCghbV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwog
ICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKIH0KIApAQCAt
NDY3LDEzICs1MDIsNiBAQCBUcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLWludCBTbG90VmlzaXRvcjo6b3BhcXVl
Um9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNT
RVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVl
Um9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKQEAgLTQ5Nywx
NSArNTI1LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAg
ICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9p
ZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1
ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSBy
b290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0byogcm9v
dCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU1Myw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9oZWFwLm1fdW5jb25kaXRpb25hbEZp
bmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0
b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEpTQ2Vs
bCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAg
ICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJr
U3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKG11dGF0b3JNYXJrU3Rh
Y2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2su
aCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAg
ICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3Rh
Y2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQotICAgIGNvbnN0IE1hcmtT
dGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9Ci0KKyAgICBN
YXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4g
bV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1h
cmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9y
U3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsK
ICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwyNCArODcsMjMgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogICAgIFRy
aVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKLSAgICBpbnQg
b3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNr
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBk
aWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtT
dGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNW
aXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0
ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZp
c2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9u
YXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmlu
aXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1v
ZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVk
KFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERv
bmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNo
YXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVj
ZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJs
ZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhDb250YWlu
ZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9pZCBhcHBlbmRUb011dGF0b3JNYXJrU3Rh
Y2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwo
SGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwogCiAgICAgdm9pZCB2aXNpdENoaWxk
cmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgp
OworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFy
a1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fc3RhY2s7CisgICAgTWFy
a1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0
b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25p
bmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4K
ICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3Bp
ZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9k
ZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFNuYXBzaG90
QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCog
bV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBDZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7
CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRp
b25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9v
bGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQor
ICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KIAogI2lm
IEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVt
b3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0
dXJlCiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1Y3R1cmVJRElzVmFsaWQpOwog
ICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBjb3Jy
ZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3Ry
dWN0dXJlUHRyLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGlu
Z1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0
dXJlUHRyLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpKTsKICAgICAgICAgaml0LmFi
b3J0V2l0aFJlYXNvbihBSEluZGV4aW5nVHlwZUlzVmFsaWQpOwogICAgICAgICBjb3JyZWN0SW5k
ZXhpbmdUeXBlLmxpbmsoJmppdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
SW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTk2LDcgKzk5Niw3IEBAIGlubGluZSB2
b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICAgICAgc3RvcmUzMihpbmRleGlu
Z1R5cGUsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKICAg
ICB9CiAKLSAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0
KCkpLCBpbmRleGluZ1R5cGUpOworICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOwogfQogCiBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwoUmVn
aXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwMSw4ICsyMjAxLDggQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdy
b3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAg
IG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQp
OworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVT
dG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIG9iamVjdC0+c2V0
QnV0dGVyZmx5KHZtLCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
PihyZXN1bHQpOwogfQogCkBAIC0yMjExLDggKzIyMTEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwotICAgIG9iamVjdC0+c2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSog
cmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3Qt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBvYmplY3Qt
PnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4ocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDA4LDcgKzEwMDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rp
CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRo
U3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sg
Y292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIo
b3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAg
ICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwg
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7Cisg
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25z
dGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlw
ZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29w
ZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJ
bml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2
ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2Ug
bmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAg
ICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+
KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJy
ZW50SW5zdHJ1Y3Rpb25bNV0pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBl
bWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAg
ICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJW
YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2Fs
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJ
bmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAg
ICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1
cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdy
aXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpA
QCAtMTE1NywxMSArMTE1NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRz
KEluc3RyCiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAot
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwotICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVn
VDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5k
ZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFy
cmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNyArMjE4LDcgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNl
dCgpCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KCkKICAgICAgICAgICAgICYmICFsb2FkVGFyZ2V0RnJvbVByb3h5KSB7Ci0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcygqY29kZUJsb2NrLT52bSgpLCBzdHViSW5mbywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CiAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUlk
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBwcm9wZXJ0eU5hbWUpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAyMDg1
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxNSBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KFZNJiB2bSkKICAgICBTVEFUSUNfQVNTRVJUKEV2YWxDb2RlID09IDEpOwogICAgIFNUQVRJQ19B
U1NFUlQoRnVuY3Rpb25Db2RlID09IDIpOwogICAgIFNUQVRJQ19BU1NFUlQoTW9kdWxlQ29kZSA9
PSAzKTsKKyAgICAKKyAgICBTVEFUSUNfQVNTRVJUKElzQXJyYXkgPT0gMHgwMSk7CisgICAgU1RB
VElDX0FTU0VSVChJbmRleGluZ1NoYXBlTWFzayA9PSAweDBFKTsKKyAgICBTVEFUSUNfQVNTRVJU
KE5vSW5kZXhpbmdTaGFwZSA9PSAweDAwKTsKKyAgICBTVEFUSUNfQVNTRVJUKEludDMyU2hhcGUg
PT0gMHgwNCk7CisgICAgU1RBVElDX0FTU0VSVChEb3VibGVTaGFwZSA9PSAweDA2KTsKKyAgICBT
VEFUSUNfQVNTRVJUKENvbnRpZ3VvdXNTaGFwZSA9PSAweDA4KTsKKyAgICBTVEFUSUNfQVNTRVJU
KEFycmF5U3RvcmFnZVNoYXBlID09IDB4MEEpOworICAgIFNUQVRJQ19BU1NFUlQoU2xvd1B1dEFy
cmF5U3RvcmFnZVNoYXBlID09IDB4MEMpOwogCiAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2Fz
dDxwdHJkaWZmX3Q+KChyZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllcjxKU0NlbGw+Kj4oMHg0
MDAwKS0+c2xvdCgpKSkgLSAweDQwMDApKTsKICAgICBzdGF0aWNfYXNzZXJ0KFB1dEJ5SWRQcmlt
YXJ5VHlwZU1hc2sgPT0gMHg2LCAiTExJbnQgYXNzdW1lcyBQdXRCeUlkUHJpbWFyeVR5cGVNYXNr
IGlzID09IDB4NiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTA1LDYgKzE1MDUsNyBAQCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdl
dEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDApCiAgICAg
c3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9vdXRPZkJvdW5kc1t0MF0KKyAgICBqbXAgLm9wR2V0
QnlWYWxTbG93CiAKIC5vcEdldEJ5VmFsTm90SW5kZXhlZFN0b3JhZ2U6CiAgICAgIyBGaXJzdCBs
ZXRzIGNoZWNrIGlmIHdlIGV2ZW4gaGF2ZSBhIHR5cGVkIGFycmF5LiBUaGlzIGxldHMgdXMgZG8g
c29tZSBib2lsZXJwbGF0ZSB1cCBmcm9udC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwODU5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMzMzLDE0ICszMzMsMTQgQEAgZWxzZQogZW5kCiAKICMgQ29uc3Rh
bnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGllcy4KLWNvbnN0IElzQXJyYXkgICAgICAg
ICAgICAgICAgICA9IDEKLWNvbnN0IEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDMwCi1jb25z
dCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAwCi1jb25zdCBJbnQzMlNoYXBlICAgICAgICAg
ICAgICAgPSAyMAotY29uc3QgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMjIKLWNvbnN0IENv
bnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDI2Ci1jb25zdCBBcnJheVN0b3JhZ2VTaGFwZSAgICAg
ICAgPSAyOAotY29uc3QgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMzAKK2NvbnN0IElzQXJy
YXkgICAgICAgICAgICAgICAgICA9IDB4MDEKK2NvbnN0IEluZGV4aW5nU2hhcGVNYXNrICAgICAg
ICA9IDB4MEUKK2NvbnN0IE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4MDAKK2NvbnN0IElu
dDMyU2hhcGUgICAgICAgICAgICAgICA9IDB4MDQKK2NvbnN0IERvdWJsZVNoYXBlICAgICAgICAg
ICAgICA9IDB4MDYKK2NvbnN0IENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDB4MDgKK2NvbnN0
IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEEKK2NvbnN0IFNsb3dQdXRBcnJheVN0b3Jh
Z2VTaGFwZSA9IDB4MEMKIAogIyBUeXBlIGNvbnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA2
CkBAIC04ODcsNyArODg3LDcgQEAgbWFjcm8gYXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5
cGUsIAogICAgIGNvbnN0IGluZGV4aW5nVHlwZSA9IGNlbGxBbmRJbmRleGluZ1R5cGUgCiAgICAg
bG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW2NlbGxdLCBzY3JhdGNoCiAgICAgc3RvcmVpIHNj
cmF0Y2gsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZUlEW3Byb2ZpbGVdCi0gICAg
bG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlwZVtjZWxsXSwgaW5kZXhpbmdUeXBlCisgICAgbG9h
ZGIgSlNDZWxsOjptX2luZGV4aW5nVHlwZUFuZE1pc2NbY2VsbF0sIGluZGV4aW5nVHlwZQogZW5k
CiAKIG1hY3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9j
ay5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25jdXJyZW50SklUTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNSArOTQsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKICAgICBE
ZWZlckdDIG1fZGVmZXJHQzsKLSNlbHNlCi0gICAgc3RydWN0IE5vRGVmZXIgewotICAgICAgICBO
b0RlZmVyKEhlYXAmIGhlYXApIDogbV9oZWFwKGhlYXApIHsgfQotICAgICAgICBIZWFwJiBtX2hl
YXA7Ci0gICAgfTsKLSAgICBOb0RlZmVyIG1fZGVmZXJHQzsKLSNlbmRpZgogfTsKIAogY2xhc3Mg
Q29uY3VycmVudEpJVExvY2tlciA6IHB1YmxpYyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDExICs2NiwxMyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3Bl
CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKICAgICAKICAg
ICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewotICAgICAg
ICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVp
Y2tseShpbmRleCkpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmplY3QtPmdldElu
ZGV4UXVpY2tseShpbmRleCk7CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9u
ZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHJldHVy
biBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNs
b3QpOworICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChv
YmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtMTI5LDcgKzEzMSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3Vt
ZW50czxUeXBlPjo6cHV0QnlJbmRleCgKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PFR5cGUqPihjZWxsKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotCisgICAgCiAgICAgaWYg
KHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKICAgICAgICAgdGhp
c09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5n
VHlwZS5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
QWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTUyLDIxICs1MywyNSBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwog
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAweDAx
OwogCiAvLyBUaGUgc2hhcGUgb2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KLXN0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMHgwRTsKLXN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMDsK
LXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAgID0gMHgw
MjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5cy4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW50MzJTaGFwZSAgICAgICAgICAgICAgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMHgwNjsKLXN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgQ29udGlndW91c1NoYXBlICAgICAgICAgID0gMHgwODsKLXN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMHgwQzsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgICAgICAgICA9IDB4MEU7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICAgICAgICAg
PSAweDAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAg
ICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5cy4KK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7Citz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERvdWJsZVNoYXBlICAgICAgICAgICAgICAgICAgICAg
PSAweDA2Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAg
ICAgICAgICAgID0gMHgwODsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdl
U2hhcGUgICAgICAgICAgICAgICA9IDB4MEE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNs
b3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBDOwogCi1zdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlmdCAgICAgICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICA9IDc7CitzdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlmdCAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzICAgICAgICAgID0gNzsKIAog
Ly8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUu
IFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVt
IGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vz
c29ycyAgPSAweDEwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFj
Y2Vzc29ycyAgICAgICAgID0gMHgxMDsKKworLy8gVGhlIEluZGV4aW5nVHlwZSBmaWVsZCBvZiBK
U0NlbGxzIGlzIHN0b2xlbiBmb3IgbG9ja3MuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElu
ZGV4aW5nVHlwZUxvY2tJc0hlbGQgICAgICAgICAgPSAweDIwOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBJbmRleGluZ1R5cGVMb2NrSGFzUGFya2VkICAgICAgID0gMHg0MDsKIAogLy8gTGlz
dCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBO
b25BcnJheSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBA
IHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxs
IHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0aGUgaGlzdG9yeS4KIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkgID0gQWxsQXJyYXlUeXBlcyB8IE1heUhh
dmVJbmRleGVkQWNjZXNzb3JzOwogCit0eXBlZGVmIExvY2tBbGdvcml0aG08SW5kZXhpbmdUeXBl
LCBJbmRleGluZ1R5cGVMb2NrSXNIZWxkLCBJbmRleGluZ1R5cGVMb2NrSGFzUGFya2VkPiBJbmRl
eGluZ1R5cGVMb2NrQWxnb3JpdGhtOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzkwLDcgKzM5MCw5IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2Uo
Vk0mIHYKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgo
bmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2lu
ZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICAKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNjMsMTMgKzEwNjUsMTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAgIC8vIE5lZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBh
cm91bmQgdGhlIHVuc2hpZnRDb3VudFNsb3dDYXNlKCksIHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBi
dXR0ZXJmbHkgaW4KICAgICAvLyBhIHdlaXJkIHN0YXRlOiBzb21lIHBhcnRzIG9mIGl0IHdpbGwg
YmUgbGVmdCB1bmluaXRpYWxpemVkLCB3aGljaCB3ZSB3aWxsIGZpbGwgaW4gaGVyZS4KICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2Nr
ZXIodGhpcyk7CiAgICAgCiAgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4Qmlh
cyA+PSBjb3VudCkgewogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3Jh
Z2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2lu
ZGV4QmlhcyAtPSBjb3VudDsKICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rv
ckxlbmd0aCArIGNvdW50KTsKLSAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlm
ICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAg
c3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNl
IGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZSh2bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkp
CkBAIC0xMDkwLDYgKzEwOTQsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJh
eVN0b3JhCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAg
ICAgdmVjdG9yW2kgKyBzdGFydEluZGV4XS5jbGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNp
b24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsMzIgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94
eSgpIGNvbnN0OwogICAgIGJvb2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAg
ICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigpIGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2Vs
bCBoYXMgYSBidWlsdC1pbiBsb2NrLiBDdXJyZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZv
ciB1c2UgaWYgeW91IG5lZWQgaXQuIEl0J3MKKyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2Nr
LiBOb3RlIHRoYXQgdGhpcyBsb2NrIGlzIGN1cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRo
YXQgbG9jaydzCisgICAgLy8gb3JkZXJpbmcgd2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhh
dCB0aGUgU3RydWN0dXJlIGxvY2sgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxv
Y2tJbnRlcm5hbExvY2soKTsKKyAgICB2b2lkIHVubG9ja0ludGVybmFsTG9jaygpOworICAgIAor
ICAgIGNsYXNzIEludGVybmFsTG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEludGVybmFs
TG9ja2VyKEpTQ2VsbCogY2VsbCkKKyAgICAgICAgICAgIDogbV9jZWxsKGNlbGwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fY2VsbC0+bG9ja0ludGVybmFsTG9jaygpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB+SW50ZXJuYWxMb2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2NlbGwtPnVubG9ja0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAg
IHByaXZhdGU6CisgICAgICAgIEpTQ2VsbCogbV9jZWxsOworICAgIH07CiAKICAgICBKU1R5cGUg
dHlwZSgpIGNvbnN0OworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjKCkgY29u
c3Q7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0OwogICAgIFN0cnVjdHVy
ZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Q7CkBAIC0xNjcsNiArMTkxLDE2IEBAIHB1YmxpYzoK
ICAgICBDZWxsU3RhdGUgY2VsbFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0K
ICAgICAKICAgICB2b2lkIHNldENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25z
dF9jYXN0PEpTQ2VsbCo+KHRoaXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBi
b29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBv
bGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwg
bmV3U3RhdGUpOworICAgIH0KKworICAgIENlbGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VD
ZWxsU3RhdGVTdHJvbmcoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1f
Y2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQogICAgIHsKQEAgLTE4Myw5ICsyMTcsMTIgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV90eXBlKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgLy8g
RE8gTk9UIHN0b3JlIHRvIHRoaXMgZmllbGQuIEFsd2F5cyB1c2UgYSBDQVMgbG9vcCwgc2luY2Ug
c29tZSBiaXRzIGFyZSBmbGlwcGVkIHVzaW5nIENBUworICAgIC8vIGZyb20gb3RoZXIgdGhyZWFk
cyBkdWUgdG8gdGhlIGludGVybmFsIGxvY2suIE9uZSBleGNlcHRpb246IHlvdSBkb24ndCBuZWVk
IHRoZSBDQVMgaWYgdGhlCisgICAgLy8gb2JqZWN0IGhhcyBub3QgZXNjYXBlZCB5ZXQuCisgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZSk7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZUFuZE1pc2Mp
OwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIy
OCw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAKICAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOwotICAgIEluZGV4aW5nVHlw
ZSBtX2luZGV4aW5nVHlwZTsKKyAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNj
OyAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIENBUy4KICAgICBKU1R5cGUg
bV90eXBlOwogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgbV9mbGFnczsKICAgICBDZWxs
U3RhdGUgbV9jZWxsU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKENyZWF0aW5nRWFybHlDZWxsVAogCiBpbmxpbmUg
SlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IG1fc3RydWN0
dXJlSUQoc3RydWN0dXJlLT5pZCgpKQotICAgICwgbV9pbmRleGluZ1R5cGUoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkKKyAgICAsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9mbGFncyhzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCkpCiAgICAgLCBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQpA
QCAtNzQsNyArNzQsNyBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2
CiAgICAgaWYgKHN0cnVjdHVyZSkgewogI2VuZGlmCiAgICAgICAgIG1fc3RydWN0dXJlSUQgPSBz
dHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICAgICAgbV9pbmRleGluZ1R5cGVBbmRNaXNjID0gc3RydWN0dXJlLT5p
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CiAgICAgICAgIG1fdHlwZSA9IHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCk7CiAgICAgICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkBAIC05
MSw5ICs5MSwxNCBAQCBpbmxpbmUgSlNUeXBlIEpTQ2VsbDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fdHlwZTsKIH0KIAoraW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2MoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZGV4aW5nVHlwZUFuZE1pc2M7Cit9
CisKIGlubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2luZGV4aW5nVHlwZTsKKyAgICByZXR1cm4gaW5kZXhpbmdUeXBlQW5kTWlz
YygpICYgQWxsQXJyYXlUeXBlczsKIH0KIAogaW5saW5lIFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1
Y3R1cmUoKSBjb25zdApAQCAtMTk1LDE3ICsyMDAsMjcgQEAgaW5saW5lIGJvb2wgSlNDZWxsOjpp
c0FQSVZhbHVlV3JhcHBlcigpIAogICAgIHJldHVybiBtX3R5cGUgPT0gQVBJVmFsdWVXcmFwcGVy
VHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU0NlbGw6OnNldFN0cnVjdHVy
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpID09IHRoaXMtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSk7CiAgICAgQVNT
RVJUKCF0aGlzLT5zdHJ1Y3R1cmUoKQogICAgICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBIZWFw
OjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0g
c3RydWN0dXJlKTsKLSAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwor
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVy
ZS0+aWQoKTsKICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVG
bGFncygpOwogICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7Ci0gICAg
bV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIEluZGV4aW5n
VHlwZSBuZXdJbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoKTsKKyAgICBpZiAobV9pbmRleGluZ1R5cGVBbmRNaXNjICE9IG5ld0luZGV4aW5nVHlw
ZSkgeworICAgICAgICBBU1NFUlQoIShuZXdJbmRleGluZ1R5cGUgJiB+QWxsQXJyYXlUeXBlc0Fu
ZEhpc3RvcnkpKTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgSW5kZXhpbmdUeXBl
IG9sZFZhbHVlID0gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworICAgICAgICAgICAgSW5kZXhpbmdU
eXBlIG5ld1ZhbHVlID0gKG9sZFZhbHVlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSB8IHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOworICAgICAgICAgICAgaWYg
KFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1faW5kZXhpbmdUeXBlQW5k
TWlzYywgb2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUpOwog
fQogCiBpbmxpbmUgY29uc3QgTWV0aG9kVGFibGUqIEpTQ2VsbDo6bWV0aG9kVGFibGUoKSBjb25z
dApAQCAtMjg0LDExICsyOTksMjYgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cihWTSYgdgogICAgIGlmIChpc1phcHBlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJU
KHN0cnVjdHVyZUlEKCkpOwotICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlz
SW1tb3J0YWwpCi0gICAgICAgIHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5kZXN0cm95KHRoaXMpOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBT
dHJ1Y3R1cmVJc0ltbW9ydGFsKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAgICAgICBNZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0
aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7CisgICAgICAg
IGRlc3Ryb3kodGhpcyk7CisgICAgfSBlbHNlCiAgICAgICAgIGpzQ2FzdDxKU0Rlc3RydWN0aWJs
ZU9iamVjdCo+KHRoaXMpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsK
ICAgICB6YXAoKTsKIH0KIAoraW5saW5lIHZvaWQgSlNDZWxsOjpsb2NrSW50ZXJuYWxMb2NrKCkK
K3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8
SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlw
ZUxvY2tBbGdvcml0aG06OmxvY2soKmxvY2spOworfQorCitpbmxpbmUgdm9pZCBKU0NlbGw6OnVu
bG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBi
aXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNj
KTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjp1bmxvY2soKmxvY2spOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE3ICsxMTIsMjggQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgIAogICAgIC8vIE1h
cmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVy
Zmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAg
Ci0gICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgc3dpdGNoICh0aGlz
LT5pbmRleGluZ1R5cGUoKSkgeworCisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHN3aXRjaCAob2xkVHlwZSkgewogICAgIGNhc2UgQUxM
X0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52
ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRF
WElOR19UWVBFUzogeworICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVyZSB0byBwcm90ZWN0IENv
bnRpZ3VvdXMtPkFycmF5U3RvcmFnZSB0cmFuc2l0aW9ucywgYnV0IHdlIGNvdWxkIG1ha2UgdGhh
dAorICAgICAgICAvLyByYWNlIHdvcmsgaWYgd2UgbmVlZGVkIHRvLgorICAgICAgICBKU0NlbGw6
OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1R5
cGUgPSB0aGlzLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0
dGVyZmx5KCk7CisgICAgICAgIHN3aXRjaCAobmV3VHlwZSkgeworICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1Ymxp
Y0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvLyBBTExf
QVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlmIChidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NiwxMCArMTU3LDM0IEBAIHZvaWQg
SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0NlbGw6OnZp
c2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0ZXJmbHkp
Ci0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
dGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwotCisgICAgLy8gV2Ugd2FudCB0
byBkZWZlbmQgYWdhaW5zdCBtdWx0aXBsZSBwb3NzaWJsZSByYWNlcyB3aXRoIHRoZSBtdXRhdG9y
OgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBpbnN0YWxsIGEgYmlnZ2VyIGJ1dHRlcmZseSBhbmQg
dGhlbiBpbnN0YWxsIGEgc3RydWN0dXJlIHRoYXQgY2xhaW1zIG1vcmUKKyAgICAvLyAgIHByb3Bl
cnRpZXMuIFRoaXMgdHJpdmlhbGx5IHdvcmtzLgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBtdXRh
dGUgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBIZW5jZSwgd2UgaG9sZCB0aGUgc3RydWN0dXJl
IGxvY2sgZm9yCisgICAgLy8gICBkaWN0aW9uYXJ5IHN0cnVjdHVyZXMuCisgICAgLy8gLSBUaGUg
YnV0dGVyZmx5IGNvdWxkIHNocmluaywgYnV0IHRoaXMgY291bGQgb25seSBoYXBwZW4gaWYgdGhl
IG9iamVjdCB3YXMgYSBkaWN0aW9uYXJ5LgorICAgIC8vICAgVXN1YWxseSwgdGhpcyBtZWFucyB0
aGF0IHdlIHdvdWxkIGdldCB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGFjcXVpcmUgYSBs
b2NrLiBUaGF0CisgICAgLy8gICB0cml2aWFsbHkgd29ya3MuIEJ1dCB3ZSBjb3VsZCBsb2FkIHRo
ZSBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBvYmplY3QgYmVjYW1lIGEgZGljdGlvbmFyeQorICAgIC8v
ICAgYW5kIHRoZW4gbG9hZCB0aGUgYnV0dGVyZmx5IHRoYXQgd2FzIHNocnVuay4gV2UgcHJvdGVj
dCBhZ2FpbnN0IHRoaXMgY2FzZSBieSBjaGVja2luZworICAgIC8vICAgdGhlIHN0cnVjdHVyZSBh
IHNlY29uZCB0aW1lIGJlZm9yZSBzY2FubmluZyB0aGUgYnV0dGVyZmx5LiBUaGlzIG1lYW5zIHRo
YXQgdGhlIGJ1dHRlcmZseQorICAgIC8vICAgaXMgYXQgd29yc3QgdGhlIGJ1dHRlcmZseSB0aGF0
IHRoZSBtdXRhdG9yIGhhZCBpbnN0YWxsZWQganVzdCBwcmlvciB0byBmbGlwcGluZyB0aGUKKyAg
ICAvLyAgIHN0dXJjdHVyZS4gU28gaWYgdGhlIHN0cnVjdHVyZSB3ZSBzZWUgaXMgYSBub24tZGlj
dGlvbmFyeSB0aGVuIHRoZSBidXR0ZXJmbHkgY2Fubm90IHlldAorICAgIC8vICAgaGF2ZSBiZWVu
IHNocnVuay4KKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFy
eSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpIHsK
KyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIH0gZWxzZQorICAgICAgICBX
VEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2Uo
KTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkgPT0gc3RydWN0dXJlLT5p
ZCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAg
ICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC0yMDQsMTUgKzIzOSwy
NSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgCiAgICAg
SlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKLSAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwotICAgIGlm
IChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3Is
IGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJv
b2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdh
c0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICBlbHNl
CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5pZCgpID09IHRoaXNPYmplY3QtPnN0cnVj
dHVyZUlEKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9y
LCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXpl
ID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCk7CiAgICAgaWYgKHN0b3JhZ2VTaXplKQogICAgICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCks
IHN0b3JhZ2VTaXplKTsKLQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1
cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlz
aXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9y
RGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTY2Niw3ICs3MTEsOCBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIG1hcCk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIAog
ICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNzMxLDcgKzc3
Nyw5IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVh
dGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
KHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Cisg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRl
cmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBu
ZXdCdXR0ZXJmbHk7CiB9CiAKQEAgLTc0Miw3ICs3OTAsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMg
SlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5
LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3Vz
SW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAg
ICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0
dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTc1Myw3ICs4MDMs
OSBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAg
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwotICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CiB9CiAKQEAgLTc2NCw3ICs4MTYs
OSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAg
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1Zh
bHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6
QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0s
IG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpOwog
fQogCkBAIC03OTcsNyArODUxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJy
YXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdl
QnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1
dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0
ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVj
dHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04ODAs
NyArOTM2LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAg
ICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUo
KSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZs
eSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwg
c3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJl
KTsKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtOTM1LDcgKzk5Myw5IEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9CiAgICAgCiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVy
Zmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4g
bmV3U3RvcmFnZTsKIH0KIApAQCAtOTgxLDcgKzEwNDEsOSBAQCBBcnJheVN0b3JhZ2UqIEpTT2Jq
ZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3Ry
dWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7
CiB9CiAKQEAgLTEwMDYsNyArMTA2OCwyMiBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5z
aXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKKyAgICAvLyBUaGlzIGhhcyBhIGNyYXp5IHJhY2Ug
d2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFdoZW4gY2hhbmdpbmcgdGhlIGJ1dHRlcmZseSBh
bmQgc3RydWN0dXJlLAorICAgIC8vIHRoZSBtdXRhdG9yIGFsd2F5cyBzZXRzIHRoZSBzdHJ1Y3R1
cmUgbGFzdC4gVGhlIGNvbGxlY3RvciB3aWxsIGFsd2F5cyByZWFkIHRoZSBzdHJ1Y3R1cmUKKyAg
ICAvLyBmaXJzdC4gV2UgcHJvYmFibHkgaGF2ZSB0byBmb2xsb3cgdGhhdCBjb252ZW50aW9uIGhl
cmUgYXMgd2VsbC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IKKyAgICAvLyB3aWxsIHNv
bWV0aW1lcyBzZWUgdGhlIG5ldyBidXR0ZXJmbHkgKHRoZSBvbmUgd2l0aCBBcnJheVN0b3JhZ2Up
IHdpdGggdGhlIG9ubHkgc3RydWN0dXJlICh0aGUKKyAgICAvLyBvbmUgdGhhdCBzYXlzIHRoYXQg
dGhlIGJ1dHRlcmZseSBpcyBDb250aWd1b3VzKS4gV2hlbiBzY2FubmluZyBDb250aWd1b3VzLCB0
aGUgY29sbGVjdG9yIHdpbGwKKyAgICAvLyBtYXJrIHdvcmQgYXQgYWRkcmVzc2VzIGdyZWF0ZXIg
dGhhbiBvciBlcXVhbCB0byB0aGUgYnV0dGVyZmx5IHBvaW50ZXIsIHVwIHRvIHRoZSBwdWJsaWNM
ZW5ndGgKKyAgICAvLyBpbiB0aGUgYnV0dGVyZmx5LiBCdXQgYW4gQXJyYXlTdG9yYWdlIGhhcyBz
b21lIG5vbi1wb2ludGVyIGhlYWRlciBkYXRhIGF0IGxvdyBwb3NpdGl2ZQorICAgIC8vIG9mZnNl
dHMgZnJvbSB0aGUgYnV0dGVyZmx5IC0gc28gd2hlbiB0aGlzIHJhY2UgaGFwcGVucywgdGhlIGNv
bGxlY3RvciB3aWxsIHN1cmVseSBjcmFzaAorICAgIC8vIGJlY2F1c2UgaXQgd2lsbCBmYWlsIHRv
IGRlY29kZSB0d28gY29uc2VjdXRpdmUgaW50MzJzIGFzIGlmIGl0IHdhcyBhIEpTVmFsdWUuCisg
ICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgd2UgaGF2ZSB0aGUgSlNDZWxsIGxvY2sgZm9yIHRo
aXMgcHVycG9zZSEKKyAgICAKKyAgICBJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CisgICAg
c2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0x
NDY4LDcgKzE1NDUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
CiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0
dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKIApAQCAtMjAxOSw3ICsyMDk2
LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3BlcnR5KAogCiAgICAgU3Bh
cnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0KCktPmFycmF5U3RvcmFnZSgp
LT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVChtYXApOwotCisgICAgCiAg
ICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0dldE93
blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9wZXJ0eSBuYW1lIFAuCiAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMs
IGluZGV4KTsKICAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFwID0gJnJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CkBAIC0yNzI1LDcgKzI4MDIsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0
aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAg
ICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5
KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5
KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBA
IC0yNzQyLDcgKzI4MjAsOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChW
TSYgCiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNs
ZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9p
bmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0yNzYyLDYgKzI4NDEsNyBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93
KFZNJiB2bSwgCiAgICAgCiAgICAgdW5zaWduZWQgYXZhaWxhYmxlT2xkTGVuZ3RoID0KICAgICAg
ICAgQnV0dGVyZmx5OjphdmFpbGFibGVDb250aWd1b3VzVmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2Fw
YWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7CisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBu
dWxscHRyOwogICAgIGlmIChhdmFpbGFibGVPbGRMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgICAg
IC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgc29tZW9uZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9y
IGxlbmd0aCB0aGF0IGNhdXNlZCBpbnRlcm5hbAogICAgICAgICAvLyBmcmFnbWVudGF0aW9uLiBJ
ZiB3ZSBkaWQgb3VyIGpvYnMgcmlnaHQsIHRoaXMgd291bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBi
ZXQgd2Ugd2lsbCBtZXNzCkBAIC0yNzc2LDE3ICsyODU2LDI0IEBAIGJvb2wgSlNPYmplY3Q6OmVu
c3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAgICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgICAgICBpZiAoIWJ1dHRlcmZseSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0
ZXJmbHkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHk7CiAgICAgfQogCi0gICAg
YnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLQogICAgIGlmICho
YXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9s
ZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAgICAgICAgYnV0
dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAgICAgICAgICAgYnV0dGVy
Zmx5LT5pbmRleGluZ1BheWxvYWQ8ZG91YmxlPigpW2ldID0gUE5hTjsKICAgICB9IGVsc2Ugewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JM
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91cygpW2ldLmNsZWFy
KCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmluZGV4aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8
VW5rbm93bj4+KClbaV0uY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAobmV3QnV0dGVyZmx5KSB7
CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Cisg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1fYnV0dGVyZmx5LnNldCh2
bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0
b3JMZW5ndGgpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjgwMiwxMiArMjg4OSwx
MyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0dGVyCiAKICAgICBEZWZl
ckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1
dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJh
eVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlz
LCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0
aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVuZ3RoKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0
dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0b3JhZ2Uo
Vk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitCdXR0ZXJmbHkqIEpTT2Jq
ZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUs
IHNpemVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4gb2xkU2l6ZSk7CiAKQEAg
LTMwOTIsMTUgKzMxODAsMzQgQEAgdm9pZCBKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeShW
TSYgdgogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSkpOwogfQogCi12
b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhWTSYgdm0sIHNpemVf
dCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIp
Cit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzLT5idXR0ZXJmbHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNpdHkgPSB0aGlzLT5idXR0
ZXJmbHlQcmVDYXBhY2l0eSgpOwotICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gYnV0dGVyZmx5LT5i
YXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKLSAgICB2b2lkKiBuZXdC
YXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9y
ZSk7CisgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBz
b21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCisgICAgLy8gZGljdGlvbmFy
eSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4gQnV0LCB3ZSBhcmUgZ3Vh
cmFudGVlZCB0byBiZSBob2xkaW5nCisgICAgLy8gdGhlIHN0cnVjdHVyZSdzIGxvY2sgcmlnaHQg
bm93LCBhbmQgdGhhdCBoZWxwcyBhIGJpdC4KKyAgICAKKyAgICBCdXR0ZXJmbHkqIG9sZEJ1dHRl
cmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgIHNpemVfdCBwcmVDYXBhY2l0eTsKKyAgICBz
aXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9vbCBoYXNJbmRleGluZ0hl
YWRlciA9IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhhc0lu
ZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IG9sZEJ1dHRlcmZseS0+aW5k
ZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPmluZGV4
aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9IDA7
CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQodm0sIHRoaXMsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFm
dGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0g
ICAgbWVtbW92ZShuZXdCYXNlLCBjdXJyZW50QmFzZSwgdGhpcy0+YnV0dGVyZmx5VG90YWxTaXpl
KCkpOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgQnV0dGVy
Zmx5Ojpmcm9tQmFzZShuZXdCYXNlLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cikpOworICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUgcHJlY2FwYWNpdHkuCisgICAgdm9pZCog
Y3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cik7CisgICAgdm9pZCogbmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVD
YXBhY2l0eUFmdGVyKTsKKworICAgIG1lbWNweShuZXdCYXNlLCBjdXJyZW50QmFzZSwgQnV0dGVy
Zmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgCisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiB9CiAKIHVp
bnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ3LDExICs3NDcsMTAgQEAgcHVibGljOgog
ICAgIGJvb2wgc3RhdGljUHJvcGVydGllc1JlaWZpZWQoKSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+
c3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsgfQogICAgIHZvaWQgcmVpZnlBbGxTdGF0aWNQcm9w
ZXJ0aWVzKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBn
cm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7
Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoVk0mLCBCdXR0
ZXJmbHkqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwogICAg
ICAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYsIEJ1dHRlcmZseSopOyAvLyBBbHdheXMg
Y2hhbmdlIHRoZSBidXR0ZXJmbHkgYmVmb3JlIGNoYW5naW5nIHRoZSBzdHJ1Y3R1cmUhCiAgICAg
dm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSopOwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7CiAKQEAgLTc1OSw3ICs3
NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzdHJ1Y3R1cmUodm0pLT5mbGF0dGVuRGlj
dGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCdXR0ZXJm
bHlBZnRlckZsYXR0ZW5pbmcoVk0mLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNp
emVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0
ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CiAKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7CkBAIC05OTAsOSArOTg5
LDkgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgYm9vbCBw
dXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVy
dHlTbG90Jik7CiAKICAgICBib29sIGdldE5vbkluZGV4UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBnZXRPd25Ob25JbmRleFBy
b3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBQ
cm9wZXJ0eU9mZnNldCk7Ci0gICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFBy
b3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUmKTsKKyAgICB2b2lkIGZp
bGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWdu
ZWQsIFN0cnVjdHVyZSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25TdGF0
aWNQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBmaW5kUHJvcGVydHlIYXNoRW50
cnkoUHJvcGVydHlOYW1lKSBjb25zdDsKQEAgLTEyMDUsMTQgKzEyMDQsNiBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRo
U2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5
KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICgh
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5n
SGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkp
OwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKLX0KLQogaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAg
IEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIyMCw3ICsxMjExLDcgQEAgaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgogICAgIEpTQ2VsbDo6c2V0U3RydWN0dXJlKHZtLCBz
dHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkp
CiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogfQpAQCAtMTI3
MywxNiArMTI2NCwxNiBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZN
CiAKIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgUHJvcGVydHlOYW1l
IHRoYXQgaXMgYWN0dWFsbHkgYW4gaW5kZXgsCiAvLyBidXQgaWYgc28gd2lsbCBhbHdheXMgcmV0
dXJuIGZhbHNlIChkb2Vzbid0IHNlYXJjaCBpbmRleCBzdG9yYWdlKS4KLUFMV0FZU19JTkxJTkUg
Ym9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5
U2xvdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChv
ZmZzZXQpKSB7CiAgICAgICAgIGlmICghVHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUo
aW5saW5lVHlwZUZsYWdzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBy
ZXR1cm4gZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgIH0KLQorICAgIAogICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMgb24gdGhpcyBtZXRo
b2QgbmV2ZXIgcmV0dXJuaW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNTRVJUKCFwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpOwogCkBAIC0xMzA3LDkgKzEyOTgsOSBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVj
dDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFs
dWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
IHsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGpzQ2FzdDxDdXN0b21HZXR0ZXJT
ZXR0ZXIqPihjdXN0b21HZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xMzI1LDcgKzEzMTYsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmZpbGxDdXN0b21HCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKm9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAo
b2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoT3B0aW9uYWw8dWlu
dDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQpAQCAtMTM1MywxMCArMTM0
NCwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5CiAgICAgICAg
ICAgICByZXR1cm4gb2JqZWN0LT5nZXROb25JbmRleFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUoKSAh
PSBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1
Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQo
KSk7CiAgICAgICAgIGlmIChvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7
CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUo
KTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwpAQCAtMTQxNywxNiArMTQw
OCwyMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAg
ICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
KQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRo
aXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+
c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQg
PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgdW5zaWduZWQg
b2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigK
KyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBb
Jl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpIHsKKyAgICAgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRl
cmZseSgpOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVy
Zmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNp
dHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNldEJ1dHRlcmZs
eSh2bSwgYnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFs
aWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zm
c2V0LCB2YWx1ZSk7CisgICAgICAgICAgICB9KTsKIAotICAgICAgICB2YWxpZGF0ZU9mZnNldChv
ZmZzZXQpOwotICAgICAgICBBU1NFUlQodGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAg
IHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWlu
c1JlYWRPbmx5UHJvcGVydGllcygpOwpAQCAtMTQ0NSwxMyArMTQ0MSwxNSBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3
U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobmV3
U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZs
eSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxv
Y2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJl
QW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3
U3RydWN0dXJlKTsKICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDk4LDEzICsxNDk2LDEzIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICBzaXplX3Qgb2xkQ2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgc2l6ZV90IG5ld0NhcGFj
aXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIEFTU0VSVChvbGRD
YXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7Ci0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFj
aXR5KQotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
dm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIGlmIChvbGRDYXBh
Y2l0eSAhPSBuZXdDYXBhY2l0eSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0
eSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgc2xvdC5zZXRO
ZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkp
CiAgICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsK
QEAgLTE1NTQsMTcgKzE1NTIsMjMgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdp
dGhvdXRUcgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoIXZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBBU1NF
UlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxs
R3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0g
ICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICBi
b29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1
ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXpl
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAg
YnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5l
Q2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHko
dm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9u
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKIH0KIAogQUxXQVlTX0lO
TElORSBKU09iamVjdCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNywxMyArMTA3LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBK
U09iamVjdDo6Z2V0UHJvcGVydHkKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBN
ZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9
IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3Ry
dWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1
cmVJRCgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUu
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQo
b2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5
cGU7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0
aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkp
KQotICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwor
ICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdl
dFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RU
eXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisg
ICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBl
KHZtLCBleGVjKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKQEAgLTEzNSwxOCArMTM1LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0
Tm9uSW5kZXgKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6
R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0Ojpn
ZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1
Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3Qt
PnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoTElLRUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVz
R2V0T3duUHJvcGVydHlTbG90KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkgewogICAgICAg
ICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1l
dGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
c2xvdCkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlw
ZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxl
LmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRo
b2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkp
Ci0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7Cisg
ICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0
UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5
cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAg
ICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUo
dm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24g
MjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25T
dHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJzLCB0cnVlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywgZmFsc2UsIE5vcm1h
bCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENvbnRpbnVvdXNseSwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwg
Tm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVDZWxscywgZmFsc2Us
IE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwg
MS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9uIDIwODU5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1
YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKIH07CiAKKy8vIEZJWE1FOiBU
aGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0LgogY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1h
cCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNDZWxsIEJh
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSw2IEBACiAKICNkZWZpbmUgRFVN
UF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIERP
X1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxzZQotI2RlZmluZSBET19QUk9QRVJU
WU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSArMTU3LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgeworICAgICAgICBpZiAoUHJv
cGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVPck51bGwoKSkgewog
ICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwotICAgICAgICAgICAgdG90YWxQ
cm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5zaXplSW5NZW1v
cnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSB0YWJsZS0+c2l6ZUlu
TWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNiw3ICszMDAsNyBAQCB2b2lkIFN0
cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgZm9yIChzdHJ1Y3R1cmUgPSB0
aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKSB7CiAg
ICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIHRhYmxl
ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7CisgICAgICAgIHRhYmxlID0gc3Ry
dWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAgICAgICAgIGlmICh0YWJsZSkgewogICAg
ICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQsIHNvIHRoYXQgdGhlIGNhbGxl
ciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAgICAgICAgICAgIC8vIGJlZm9yZSBp
dCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zMjEsMzAgKzMxNSwzMSBAQCB2b2lkIFN0
cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgQVNTRVJUKCF0YWJsZSk7CiB9
CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJiB2bSkKK1Byb3Bl
cnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9v
bCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7Ci0KKyAgICAKKyAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCiAgICAgVmVjdG9yPFN0cnVjdHVyZSos
IDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgUHJvcGVydHlU
YWJsZSogdGFibGU7CiAgICAgCiAgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6
YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7CiAgICAgCisgICAgdW5zaWduZWQg
Y2FwYWNpdHkgPSBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSk7CiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHko
dm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5
KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIGNhcGFjaXR5KTsKICAgICAgICAg
c3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICB0
YWJsZSA9IFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgY2FwYWNpdHkpOwogICAgIAogICAgIC8v
IE11c3QgaG9sZCB0aGUgbG9jayBvbiB0aGlzIHN0cnVjdHVyZSwgc2luY2Ugd2Ugd2lsbCBiZSBt
b2RpZnlpbmcgdGhpcyBzdHJ1Y3R1cmUncwogICAgIC8vIHByb3BlcnR5IG1hcC4gV2UgZG9uJ3Qg
d2FudCBnZXRDb25jdXJyZW50bHkoKSB0byBzZWUgdGhlIHByb3BlcnR5IG1hcCBpbiBhIGhhbGYt
YmFrZWQKICAgICAvLyBzdGF0ZS4KICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2ssIHZtLmhlYXApOwotICAgIGlmICghdGFibGUpCi0gICAgICAgIGNyZWF0ZVByb3Bl
cnR5TWFwKGxvY2tlciwgdm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBt
X2lubGluZUNhcGFjaXR5KSk7Ci0gICAgZWxzZQotICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0
KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgaWYgKHNldFByb3BlcnR5VGFibGUpCisgICAgICAgIHRo
aXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKIAogICAgIEluZmVycmVkVHlwZVRhYmxl
KiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOwogCkBAIC0zNTUsMTAgKzM1
MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgICAg
IFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgp
LCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkp
OwogICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSkpCiAgICAgICAgICAgICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUg
PSB0cnVlOwotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CisgICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3RO
b3RDaGFuZ2UpOwogICAgIH0KICAgICAKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Cisg
ICAgCisgICAgcmV0dXJuIHRhYmxlOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5
T2Zmc2V0JiBvZmZzZXQpCkBAIC00NzMsNyArNDcwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZE5ld1Byb3BlcnR5VHJhbgogICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hh
aW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4uZ2V0KCkpOwogICAgIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMgPSBwcm9w
ZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMo
YXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkp
OworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNl
dCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVU
YWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5
cGVUYWJsZS5nZXQoKSk7CiAKQEAgLTUyMSwzNiArNTE4LDMwIEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVBy
b3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBw
cm90b3R5cGUpCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAgIHRyYW5zaXRpb24t
Pm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsKLQotICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0pKTsKKyAgICAKKyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQg
PSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24tPnBpbigpOwotCisgICAgCiAg
ICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFu
c2l0aW9uOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNp
dGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7Ci0KLSAg
ICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRl
ZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAg
ICAgICAKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0
cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAK
ICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsKICAgICB9CiAKLSAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpOwotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0g
c3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOworICAg
IFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxl
KHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsKICAgICBl
bnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAKQEAgLTU2MSwxNyArNTUyLDE1IEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKIFN0cnVjdHVyZSogU3RydWN0
dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIAogICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7
CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24t
PnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1f
b2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5zZXREaWN0aW9u
YXJ5S2luZChraW5kKTsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICB0cmFuc2l0aW9uLT5z
ZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKLQorICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KQEAgLTYwMywz
MSArNTkyLDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKIAog
UHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZChWTSYgdm0pCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotICAgIAot
ICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5
VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKLSAgICAKLSAg
ICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAtIHNvIHRoYXQgZ2V0
Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQKLSAgICAvLyB3aWxsIGVpdGhlciBoYXZl
IHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNlIHRoZSBwcm9wZXJ0
eSB0YWJsZQotICAgIC8vIGJlZm9yZSBpdCBpcyBzdG9sZW4uCi0gICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlblByb3BlcnR5VGFi
bGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgcHJvcGVydHlUYWJsZSgpLmNsZWFyKCk7
Ci0gICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsKKyAgICAvLyBUaGlzIG11c3QgYWx3YXlz
IHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVsbC4KKyAgICBQcm9w
ZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0LT5jb3B5KHZtLCByZXN1bHQtPnNpemUoKSArIDEpOworICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBzZXRQcm9wZXJ0eVRhYmxl
KHZtLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgYm9vbCBz
ZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlU
YWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOwotICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAgIAogICAgIGlmIChj
aGFuZ2VzSW5kZXhpbmdUeXBlKHRyYW5zaXRpb25LaW5kKSkgewogICAgICAgICBpZiAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+bV9nbG9iYWxPYmplY3QuZ2V0KCkp
IHsKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVy
ZShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9i
YWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdU
eXBlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBy
ZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGUoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CisgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRUcmFuc2l0
aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgICAgICB9CkBAIC02MzgsNyArNjI1LDcgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0
aW9uOwogICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiAoZXhpc3RpbmdUcmFu
c2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykp
KSB7CiAgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmF0dHJpYnV0ZXNJblByZXZp
b3VzKCkgPT0gYXR0cmlidXRlcyk7Ci0gICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24t
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGUpOworICAgICAg
ICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlz
dGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNjQ2LDcgKzYzMyw3IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0
cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNl
dEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJ
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkp
OwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlvbktpbmQpKQogICAg
ICAgICB0cmFuc2l0aW9uLT5zZXREaWRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVlKTsKQEAgLTY1Nywz
MiArNjQ0LDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAg
ICAgICAgLy8gdGFibGUsIHNpbmNlIG91ciBsb2dpYyBmb3Igd2Fsa2luZyB0aGUgcHJvcGVydHkg
dHJhbnNpdGlvbiBjaGFpbiB0byByZW1hdGVyaWFsaXplIHRoZQogICAgICAgICAvLyB0YWJsZSBk
b2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBhY2NvdW50IHN1Y2ggd2hvbGVzYWxlIGVkaXRz
LgogICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
KCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlu
bmluZyh2bSkpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKHZtLCBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9u
LT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBp
bkZvckNhY2hpbmcoKTsKICAgICAgICAgCi0gICAgICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNEb250RGVs
ZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkKLSAgICAgICAgICAgICAgICAgICAg
ZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwotICAgICAgICAgICAgICAgIGlmIChzZXRz
UmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkgJiYgIShlbnRy
eS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hdHRy
aWJ1dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICAgICAgfQorICAgICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQodGFibGUpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRhYmxlKSB7
CisgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRpZXModHJhbnNpdGlv
bktpbmQpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsK
KyAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0cmFu
c2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKQorICAgICAgICAg
ICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7Cisg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICBjaGVja09mZnNldCh0cmFuc2l0
aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfQogICAg
IAogICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0cmFuc2l0aW9u
S2luZCkKLSAgICAgICAgJiYgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpCi0gICAgICAgICYm
ICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmlzRW1wdHkoKSkKKyAgICAgICAgJiYgIXRy
YW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKS0+aXNFbXB0eSgpKQogICAgICAgICB0cmFu
c2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1By
b3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICB0cmFuc2l0aW9uLT5waW4oKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKHZtLCB0cmFu
c2l0aW9uLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKICAgICAgICAgc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwpAQCAtNjk4LDEz
ICs2ODIsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKFZNJiB2bSkKICAgICBpZiAoaXNT
dHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOworICAgIGlm
ICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJs
ZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUt
PmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKChpdGVyLT5hdHRy
aWJ1dGVzICYgRG9udERlbGV0ZSkgIT0gRG9udERlbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC03MTcsMTMgKzcwMCwxMiBAQCBib29sIFN0cnVjdHVyZTo6aXNGcm96
ZW4oVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxl
SWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgp
OwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUo
KS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAorICAgIFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3IgKFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewog
ICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiAoUmVhZE9u
bHkgfCBBY2Nlc3NvcikpKQpAQCAtNzM2LDIxICs3MTgsMjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogewogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
ICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAKICAgICBzaXplX3QgYmVmb3JlT3V0
T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIGlmIChpc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkp
OworICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsK
KyAgICAgICAgQVNTRVJUKHRhYmxlKTsKIAotICAgICAgICBzaXplX3QgcHJvcGVydHlDb3VudCA9
IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpOworICAgICAgICBzaXplX3QgcHJvcGVydHlDb3VudCA9
IHRhYmxlLT5zaXplKCk7CiAKICAgICAgICAgLy8gSG9sZHMgb3VyIHZhbHVlcyBjb21wYWN0ZWQg
YnkgaW5zZXJ0aW9uIG9yZGVyLgogICAgICAgICBWZWN0b3I8SlNWYWx1ZT4gdmFsdWVzKHByb3Bl
cnR5Q291bnQpOwogCiAgICAgICAgIC8vIENvcGllcyBvdXQgb3VyIHZhbHVlcyBmcm9tIHRoZWly
IGhhc2hlZCBsb2NhdGlvbnMsIGNvbXBhY3RpbmcgcHJvcGVydHkgdGFibGUgb2Zmc2V0cyBhcyB3
ZSBnby4KICAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgICAgIFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKICAgICAgICAgbV9vZmZzZXQgPSBpbnZh
bGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBw
cm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgeworICAg
ICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvYmpl
Y3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwogICAgICAgICAgICAgbV9vZmZzZXQgPSBpdGVy
LT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KTsK
ICAgICAgICAgfQpAQCAtNzU5LDcgKzc0NCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVMKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb3BlcnR5
Q291bnQ7IGkrKykKICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBvZmZzZXRGb3JQ
cm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KSwgdmFsdWVzW2ldKTsKIAotICAgICAg
ICBwcm9wZXJ0eVRhYmxlKCktPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKKyAgICAgICAgdGFibGUt
PmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKICAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgp
OwogICAgIH0KIApAQCAtNzY4LDU1ICs3NTMsMzQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5UwogCiAgICAgc2l6ZV90IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgPSB0
aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCi0gICAgaWYgKGJlZm9yZU91dE9mTGluZUNhcGFj
aXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICBpZiAob2JqZWN0LT5idXR0ZXJm
bHkoKSAmJiBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBhZnRlck91dE9mTGluZUNhcGFjaXR5
KSB7CiAgICAgICAgIEFTU0VSVChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA+IGFmdGVyT3V0T2ZM
aW5lQ2FwYWNpdHkpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhZCBhIEJ1dHRlcmZseSBi
dXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdlIG5vIGxvbmdlciBoYXZlIG5lZWQgb2Yg
aXQsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gemVybyBpdCBvdXQgYmVjYXVzZSB0aGUgY29sbGVj
dG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVyZSB0byBrbm93IHRoZSBzaXplIGZvciBjb3B5aW5n
LgotICAgICAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhYWZ0ZXJPdXRPZkxpbmVDYXBh
Y2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKLSAgICAgICAgICAgIG9i
amVjdC0+c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLCAwKTsKKyAgICAgICAgaWYg
KCFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5oYXNJbmRleGluZ0hlYWRlcihvYmpl
Y3QpKQorICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIG51bGxwdHIpOwogICAg
ICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNpemVkIHRvIHRoZSBwb2ludCB3aGVyZSB0
aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxvbmdlciB3aXRoaW4gdGhlIAogICAgICAg
ICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXplIGJ5dGVzLCB3ZSdsbCBnZXQgdGhlIHdy
b25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUgYmFzZSBiYWNrIHRvIAogICAgICAgICAv
LyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2ZW50IHRoaXMgY2FzZSB3ZSBuZWVkIHRv
IG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgotICAgICAgICBlbHNlIGlmIChvYmplY3QtPmJ1
dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAg
IH0KLQotICAgIHJldHVybiB0aGlzOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBk
ZWZlckdDKTsKICAgICAKLSAgICBwaW4oKTsKLQotICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwotCi0gICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAgcGluKCk7Ci0gICAgcmV0dXJuIHJl
bW92ZShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiB0aGlzOwogfQogCi12b2lkIFN0cnVjdHVy
ZTo6cGluKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAgICBzZXRJc1Bpbm5lZFByb3Bl
cnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogICAgIGNs
ZWFyUHJldmlvdXNJRCgpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxscHRyOwogfQogCi12
b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZygpCit2b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2Fj
aGluZyhWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogewotICAgIEFTU0VSVChwcm9wZXJ0
eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKKyAgICBzZXRQ
cm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgbV9uYW1lSW5QcmV2aW91cyA9IG51bGxwdHI7
CiB9CiAKQEAgLTg5MSwxNyArODU1LDEzIEBAIHZvaWQgU3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1
ZVNsb3coCiAgICAgfQogCiAgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHBy
b3BlcnR5IHRhYmxlLgotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKLQorICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsK
KyAgICAKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBoYXZpbmcgY3JlYXRl
ZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2FzIHByZXNlbnQKLSAg
ICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJsZSBub3cuCi0gICAg
QVNTRVJUKHByb3BlcnR5VGFibGUpOwotCi0gICAgLy8gLi4uIGFuZCB0aGUgcHJvcGVydHkgbXVz
dCBiZSBwcmVzZW50LgorICAgIC8vIGFscmVhZHksIHNvIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHBy
ZXNlbnQuCiAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwotCisgICAgCiAgICAgaWYg
KHNob3VsZE9wdGltaXplKQogICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRUeXBlID0gdGFibGUt
PndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2UpOwogICAgIGVsc2Ug
ewpAQCAtOTQzLDE4ICs5MDMsMTIgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6
flByb3BlcgogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVy
dHlUYWJsZShWTSYgdm0pCi17Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFi
bGUoKS5nZXQoKSk7Ci19Ci0KIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAg
ICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0
KCkpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJlck9mU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgaWYgKFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRh
YmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0
UHJvcGVydHlUYWJsZSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3Vy
cmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQpAQCAt
OTg5LDcwICs5NDMsMjQgQEAgVmVjdG9yPFByb3BlcnR5TWFwRW50cnk+IFN0cnVjdHVyZTo6Z2V0
UAogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgR0NTYWZlQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKLSAgICAKLSAgICBBU1NFUlQoIUpT
Qzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKLQotICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFt
ZS5pc1N5bWJvbCgpKQotICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9y
RW51bWVyYXRpb24oZmFsc2UpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7
Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAo
bG9ja2VyLCB2bSk7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRh
YmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICBwcm9wZXJ0eVRhYmxl
KCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9v
ZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKLSAgICAKLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG5ld09mZnNldDsKKyAgICByZXR1cm4g
YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFBy
b3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSBwcm9wZXJ0eVRhYmxlKCktPmZp
bmQocmVwKTsKLSAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQotICAgICAgICByZXR1cm4gaW52YWxp
ZE9mZnNldDsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5v
ZmZzZXQ7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPnJlbW92ZShwb3NpdGlvbik7Ci0gICAgcHJv
cGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7Ci0KLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0
ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYgdm0sIHVu
c2lnbmVkIGNhcGFjaXR5KQotewotICAgIEFTU0VSVCghcHJvcGVydHlUYWJsZSgpKTsKLQotICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCBQ
cm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KSk7CisgICAgcmV0dXJuIHJlbW92ZShw
cm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZz
ZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVj
dHVyZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlv
bk1vZGUgbW9kZSkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFi
bGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm47Ci0KKyAg
ICAKICAgICBib29sIGtub3duVW5pcXVlID0gcHJvcGVydHlOYW1lcy5jYW5BZGRLbm93blVuaXF1
ZUZvclN0cnVjdHVyZSgpOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJv
cGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAg
Zm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NB
bGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkp
OwogICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJh
dGlvbigpIHx8ICFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwogICAgICAgICBpZiAoIShpdGVyLT5h
dHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVtUHJvcGVydGllcygp
KSB7CkBAIC0xMTE0LDYgKzEwMjIsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPm1fbG9jayk7
CisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsK
ICAgICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkpCiAgICAgICAgIHRoaXNPYmplY3QtPm1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKQEAgLTEyNzYsOTIgKzExODcsNiBAQCB2b2lk
IFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTCiAgICAgb3V0LnByaW50KCJTdHJ1
Y3R1cmVzOiIpOwogfQogCi0jaWYgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KLXZv
aWQgUHJvcGVydHlUYWJsZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgQVNTRVJUKG1faW5k
ZXhTaXplID49IFByb3BlcnR5VGFibGU6Ok1pbmltdW1UYWJsZVNpemUpOwotICAgIEFTU0VSVCht
X2luZGV4TWFzayk7Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID09IG1faW5kZXhNYXNrICsgMSk7
Ci0gICAgQVNTRVJUKCEobV9pbmRleFNpemUgJiBtX2luZGV4TWFzaykpOwotCi0gICAgQVNTRVJU
KG1fa2V5Q291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQobV9rZXlDb3VudCAr
IG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fZGVsZXRl
ZENvdW50IDw9IG1faW5kZXhTaXplIC8gNCk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleENvdW50ID0g
MDsKLSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9IDA7Ci0gICAgZm9yICh1bnNpZ25l
ZCBhID0gMDsgYSAhPSBtX2luZGV4U2l6ZTsgKythKSB7Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5
SW5kZXggPSBtX2luZGV4W2FdOwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBQcm9wZXJ0eVRh
YmxlOjpFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGVudHJ5SW5kZXggPT0gZGVsZXRlZEVudHJ5SW5kZXgoKSkgewotICAgICAgICAgICAgKytkZWxl
dGVkSW5kZXhDb3VudDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChlbnRyeUluZGV4IDwgZGVsZXRlZEVudHJ5SW5kZXgoKSk7Ci0gICAgICAgIEFTU0VS
VChlbnRyeUluZGV4IC0gMSA8PSB1c2VkQ291bnQoKSk7Ci0gICAgICAgICsraW5kZXhDb3VudDsK
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGIgPSBhICsgMTsgYiAhPSBtX2luZGV4U2l6ZTsgKyti
KQotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhbYl0gIT0gZW50cnlJbmRleCk7Ci0gICAgfQot
ICAgIEFTU0VSVChpbmRleENvdW50ID09IG1fa2V5Q291bnQpOwotICAgIEFTU0VSVChkZWxldGVk
SW5kZXhDb3VudCA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0KLSAgICBBU1NFUlQoIXRhYmxlKClbZGVs
ZXRlZEVudHJ5SW5kZXgoKSAtIDFdLmtleSk7Ci0KLSAgICB1bnNpZ25lZCBub25FbXB0eUVudHJ5
Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCB1c2VkQ291bnQoKTsgKytj
KSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IHRhYmxlKClbY10ua2V5OwotICAgICAgICBp
ZiAocmVwID09IFBST1BFUlRZX01BUF9ERUxFVEVEX0VOVFJZX0tFWSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICArK25vbkVtcHR5RW50cnlDb3VudDsKLSAgICAgICAgdW5zaWduZWQg
aSA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCk7Ci0gICAgICAgIHVuc2lnbmVkIGsgPSAw
OwotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4OwotICAgICAgICB3aGlsZSAoMSkgewotICAg
ICAgICAgICAgZW50cnlJbmRleCA9IG1faW5kZXhbaSAmIG1faW5kZXhNYXNrXTsKLSAgICAgICAg
ICAgIEFTU0VSVChlbnRyeUluZGV4ICE9IFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRleCk7
Ci0gICAgICAgICAgICBpZiAocmVwID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChrID09IDApCi0gICAgICAgICAg
ICAgICAgayA9IDEgfCBkb3VibGVIYXNoKElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCkpOwot
ICAgICAgICAgICAgaSArPSBrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4
ID09IGMgKyAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobm9uRW1wdHlFbnRyeUNvdW50ID09IG1f
a2V5Q291bnQpOwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0g
ICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2Vk
Rm9yRW51bWVyYXRpb24oKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkp
OwotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5jaGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0K
LSNlbHNlCi0KLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0g
ICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotfQotCi0jZW5kaWYgLy8gRE9fUFJPUEVSVFlN
QVBfQ09OU1RFTkNZX0NIRUNLCi0KIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmx5UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGNp
ID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
MywxNyArMTgzLDIwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzU2Vh
bGVkKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb3plbihWTSYpOwogICAg
IGJvb2wgaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkgY29uc3QgeyByZXR1cm4gIWRpZFByZXZlbnRF
eHRlbnNpb25zKCk7IH0KLSAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpOwot
ICAgIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KFZNJiwgSlNPYmplY3QqKTsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICAvLyBU
aGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKKyAgICAvLyBUaGVz
ZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uIFZlcnNpb25zIHRoYXQgdGFrZSBhIGZ1bmMg
d2lsbCBjYWxsIGl0IGFmdGVyIG1ha2luZyB0aGUKKyAgICAvLyBjaGFuZ2UgYnV0IHdoaWxlIHN0
aWxsIGhvbGRpbmcgdGhlIGxvY2suIFRoZSBjYWxsYmFjayBpcyBub3QgY2FsbGVkIGlmIHRoZXJl
IGlzIG5vIGNoYW5nZQorICAgIC8vIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwgcmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90CisgICAg
Ly8gZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNl
dCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwg
UHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0
VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2
bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlvbmFyeSgp
IGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9
CkBAIC0yMjksOCArMjMyLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29u
c3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBt
X2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUo
KSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsgfQorICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9i
LmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBib29sIG1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkgKzQzNiw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1f
Y2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhp
bmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCgp
OworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0
cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQo
KQpAQCAtNTc5LDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1w
Q29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2Nr
JiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAogcHJpdmF0ZToKQEAgLTYzMyw0NCArNjM4LDQ1IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVy
dHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25z
dCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3Bl
cnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0
eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlN
YXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291
bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIFdyaXRlQmFycmll
cjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFibGUqIHRh
a2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSog
Y29weVByb3BlcnR5VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFs
aXplUHJvcGVydHlNYXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAgLy8gVGhpcyBtYXkg
Z3JhYiB0aGUgbG9jaywgb3Igbm90LiBETyBOT1QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVj
dHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90
RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1f
cHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2
bSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhl
IGxvY2ssIG9yIG5vdC4gRE8gTk9UIGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBs
b2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUo
KS5nZXQoKTsKLSAgICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkpIHsKLSAgICAgICAg
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXAodm0pOwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0mIHZtLCBEZWZlckdD
JikKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOworICAg
ICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIHdpbGwgZ3JhYiB0aGUgbG9jay4gRE8gTk9UIGNhbGwgd2hlbiBob2xkaW5nIHRo
ZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5VGFibGUq
IG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IHRy
dWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFi
bGUqIHRhYmxlKTsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMyw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3Rv
dHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
Q2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgCi0gICAgdm9pZCBw
aW4oKTsKLSAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHBpbihWTSYsIFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZvckNhY2hpbmcoVk0m
LCBQcm9wZXJ0eVRhYmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRhKEpTQ2VsbCogY2Vs
bCkgY29uc3QKICAgICB7CkBAIC03MTAsNyArNzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJl
UmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAgICAgICAK
KwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03NDAsNyArNzQ2LDcg
QEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25U
YWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUo
KS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAg
Ly8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJp
bmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICAvLyBEdXJp
bmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBp
cyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAs
MTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsK
ICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBT
dHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAg
ewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1
LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZp
ZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAg
ICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01
Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJ
REJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAg
IAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMu
c3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUo
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRl
eGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7
IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6
SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRz
LmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0
cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9m
ZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
SURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAg
ICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAg
IENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAgIFByb3BlcnR5VGFi
bGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0g
ZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghcHJvcGVydHlUYWJs
ZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwzMSArMjE4LDYgQEAg
aW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAgIHJldHVybiBpc1Zh
bGlkKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwog
fQogCi1pbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
Ci17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNTRVJUKG91dE9mTGlu
ZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA+PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBv
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBh
Y2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBp
ZiAocHJvcGVydHlUYWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFi
bGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90
YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJv
cGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1f
cHJvcGVydHlUYWJsZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBs
YWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChMSUtFTFkoIWhh
c1JhcmVEYXRhKCkpKQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRjaHBvaW50U2V0KiBT
dHJ1Y3R1cmU6OnByb3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwpAQCAt
MjkyLDYgKzI2NiwxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25z
aXN0ZW5jeSgpCit7CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBpbmxpbmUg
c2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0
eSkKIHsKICAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSArMjc4LDYgQEAgaW5s
aW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJldHVybiBjdXJyZW50
Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSBzaXplX3QgU3Ry
dWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKQotewotICAgIHJl
dHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwot
fQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC0zMTEsNCArMjg1
LDg1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJl
RGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9T
dHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGlu
ZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
UHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKworICAgIEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgCisg
ICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFTU0VSVCghSlNDOjpp
c1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlz
U3ltYm9sKCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKwor
ICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5l
Q2FwYWNpdHkpOworICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5l
d09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVu
Yyhsb2NrZXIsIG5ld09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgCisgICAg
Ly8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdoaWNoIHdp
bGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUgb25seSB3YXkgZm9y
IHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0eS4KKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKworICAgIGlmICghdGFi
bGUpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlUYWJsZTo6
ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3Np
dGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAgIHRhYmxl
LT5yZW1vdmUocG9zaXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7
CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgb2Zmc2V0KTsK
KyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7
CisgICAgCisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBmdW5j
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFTU0VSVChpc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkp
OworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAorICAgIHJldHVybiBy
ZW1vdmUocHJvcGVydHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpz
ZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCit7CisgICAgbV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworfQorICAg
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NiBAQAorMjAxNi0xMS0x
MSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBHQyBzaG91
bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0NTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoZSBy
ZWFzb24gd2h5IEkgd2VudCB0byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2UgV1RGOjpMb2NrIGZp
dCBpbiB0d28gYml0cyBpcyB0aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkgd291bGQgZXZlbnR1
YWxseSBuZWVkIHRvIHN0dWZmIG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91cyBiaXRzIG9mIHRo
ZQorICAgICAgICBKU0NlbGwgaGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUsIGJlY2F1c2UgdGhl
IGNvbmN1cnJlbnQgR0MgaGFzIG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29uZGl0aW9ucyBpbiB2
aXNpdENoaWxkcmVuIHRoYXQgY2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBlYWNoIG9iamVjdCBq
dXN0IGhhcyBhbgorICAgICAgICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwgdHlwZXMgbWlnaHQg
dXNlIGl0IHRvIHNpbXBseSBwcm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENoaWxkcmVuCisgICAg
ICAgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZpZWxkcyBpdCB0b3Vj
aGVzLCB3aGlsZSBvdGhlciBjZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVzZSBpdCBhcyBhICJs
b2NrIG9mIGxhc3QgcmVzb3J0IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9mIGFuIG90aGVyd2lz
ZSB3YWl0LWZyZWUgb3IKKyAgICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4gUmlnaHQgbm93LCBp
dCdzIHVzZWQgdG8gcHJvdGVjdCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBpbnZvbHZpbmcKKyAg
ICAgICAgaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhpcyBo
YXBwZW4sIEkgZmFjdG9yZWQgdGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50byBhIExvY2tBbGdv
cml0aG0gc3RydWN0IHRoYXQKKyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24gbG9jayB0eXBlICh1
aW50OF90IGZvciBXVEY6OkxvY2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgxIGZvcgorICAgICAg
ICBXVEY6OkxvY2spLCBhbmQgdGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBmb3IgV1RGOjpMb2Nr
KS4gVGhpcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBhcworICAgICAgICBhIHRlbXBsYXRpemVkIExv
Y2sgY2xhc3MgdGhhdCBiYXNpY2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tUeXBlPi4gWW91IGNv
dWxkIHRoZW4gbWFrZQorICAgICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sgYnkgYml0d2lzZV9j
YXN0aW5nIGl0IHRvIFRlbXBsYXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBiaXQyPi4gQnV0Cisg
ICAgICAgIHRoaXMgZmVsdCB0b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tBbGdvcml0aG0gaGFz
IHN0YXRpYyBtZXRob2RzIHRoYXQgdGFrZQorICAgICAgICBBdG9taWM8TG9ja1R5cGU+JiBhcyB0
aGVpciBmaXJzdCBhcmd1bWVudC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMgaXQgbW9yZSBuYXR1
cmFsIHRvCisgICAgICAgIHByb2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8gYW4gZXhpc3Rpbmcg
QXRvbWljPD4gZmllbGQuCisgICAgICAgIAorICAgICAgICBXVEY6OkxvY2sgbm93IHVzZXMgTG9j
a0FsZ29yaXRobS4gVGhlIHNsb3cgcGF0aHMgYXJlIHN0aWxsIG91dGxpbmVkLiBJIGRvbid0IGZl
ZWwgdG9vCisgICAgICAgIGJhZCBhYm91dCB0aGUgTG9ja0FsZ29yaXRobS5oIGhlYWRlciBiZWNh
dXNlIHdlIGNoYW5nZSB0aGF0IGFsZ29yaXRobSBzbyBpbmZyZXF1ZW50bHkuCisgICAgICAgIAor
ICAgICAgICBBbHNvLCBJIGFkZGVkIGEgaGFzRWxhcHNlZCh0aW1lKSBmdW5jdGlvbi4gVGhpcyBm
dW5jdGlvbiBtYWtlcyBpdCBzbyBtdWNoIG1vcmUgbmF0dXJhbAorICAgICAgICB0byB3cml0ZSB0
aW1lc2xpY2luZyBjb2RlLCB3aGljaCB0aGUgY29uY3VycmVudCBHQyBoYXMgdG8gZG8gYSBsb3Qg
b2YuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0xpc3REdW1wLmg6CisgICAgICAg
ICogd3RmL0xvY2suY3BwOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAg
ICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNl
Ojp1bmxvY2tGYWlybHlTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3dJ
bXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpMb2Nr
QmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp0cnlMb2NrKToKKyAgICAgICAg
KFdURjo6TG9ja0Jhc2U6OnVubG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tG
YWlybHkpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAgICAgICAgKCk6IERl
bGV0ZWQuCisgICAgICAgICogd3RmL0xvY2tBbGdvcml0aG0uaDogQWRkZWQuCisgICAgICAgIChX
VEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1pbmdaZXJvKToKKyAgICAgICAgKFdURjo6
TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3QpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjps
b2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dHJ5TG9jayk6CisgICAgICAgIChX
VEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8pOgorICAgICAgICAoV1RG
OjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6dW5sb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFpcmx5KToK
KyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQpOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjpsb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVu
bG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwOgor
ICAgICAgICAoV1RGOjpoYXNFbGFwc2VkKToKKyAgICAgICAgKiB3dGYvVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlLmg6CisKIDIwMTYtMTEtMTAgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6IGxlbmd0aCA+IG9mZnNldCBlbmNvdW50
ZXJlZCB3aXRoIHdhc20ueWFtbC93YXNtL2pzLWFwaS90ZXN0X01vZHVsZS5qcy5kZWZhdWx0LXdh
c20KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA4NTkyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0Ix
MDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAv
KiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9
OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdC
NkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZB
NzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5
dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFC
QjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBA
CiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0
Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0Fs
Z29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGht
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVm
Q291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFz
aE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIz
RkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyog
TG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLywK
KwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovLAogCQkJ
CUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFD
RDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9yLmggKi8sCiAJCQkJQThBNDcyQzYx
NTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICovLApAQCAtMTMyMyw2ICsxMzI2LDcg
QEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAv
KiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1
MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRkNEREUx
REQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgc2V0
KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlzdEhhc2hTZXQuaAogICAg
IExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5oCiAgICAgTUQ1LmgKICAg
ICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291
cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcsMTEg
QEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNvcnRlZExpc3REdW1w
OwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsKK3Vz
aW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKIHVz
aW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiAK
ICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMDg1OTIpCisr
KyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIwICsyNiwy
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2suaCIKIAotI2luY2x1ZGUg
IkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0jaW5jbHVkZSAiU3RyaW5nUHJp
bnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCi0jaW5jbHVkZSA8
dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQordm9pZCBM
b2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0KLSAg
ICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBw
YXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9
IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZh
bHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJl
bnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8g
YmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0g
ICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVl
LCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4g
dG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAgICAgaWYgKCEo
Y3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0
KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJl
YWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZp
cnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAotICAgICAgICAvLyBpZiB0aGUg
cGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAgICYm
ICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0
ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxv
bmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KLSAgICAgICAgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVB
bmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7Ci0gICAgICAgIGlmIChw
YXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5k
b2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZlciByZWxlYXNlZC4gSXQg
d2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRoYXQgZGlkCi0gICAgICAg
ICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Ci0gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2NrKCkg
aGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIGJl
ZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIgdGhl
IGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBz
byB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRl
IHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKLSAgICAgICAgLy8gYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyht
X2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKIHsKLSAgICB1bmxvY2tT
bG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KG1f
Ynl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6
OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKEZhaXIpOwotfQotCi1O
RVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MgZmFpcm5l
c3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4g
dW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAvLyBz
b21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBub3cg
dGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtl
ZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgot
ICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUgPSBtX2J5dGUubG9h
ZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0IHx8
IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCkgewotICAgICAgICAgICAgaWYg
KG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhh
bmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdp
bGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93
IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRo
ZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGls
bAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KLSAgICAgICAgQVNTRVJUKG9sZEJ5
dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIFBhcmtpbmdM
b3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUsCi0gICAgICAgICAgICBbJl0gKFBh
cmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlz
SGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNo
b3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCi0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFk
ICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFu
ZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0gICAgICAgICAgICAgICAgICAgIC8v
IHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVU
aHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUuc3RvcmUoaGFzUGFya2VkQml0KTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZSgw
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06
OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6RmFpcik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL1dU
Ri93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVmIFdU
Rl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
LSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobS5o
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
IApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdU
RiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90LCAxLCAyPiBEZWZhdWx0TG9ja0Fs
Z29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgb25seSBy
ZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUKIC8v
IGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVuZGVkIGxvY2tpbmcgaXMgaW5saW5l
ZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCiAvLyBoYW5kbGVkIGJ5IHNw
aW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0IGlzIGNvbXBldGV0aXZl
IHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMgKzU0LDEzIEBAIG5hbWVzcGFjZSBX
VEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAgICAg
aWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvY2tTbG93KCk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1p
bmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsKICAgICB9CiAKICAgICBi
b29sIHRyeUxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdWlu
dDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgICAgIGlmIChj
dXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0
ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0
aG06OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAKICAgICAvLyBOZWVkIHRoaXMgdmVyc2lvbiBm
b3Igc3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7
CiAgICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2VjdGlvbnMgYWx3YXlzIGdl
dCBhIGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElL
RUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2Jv
ZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICB1bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0
aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tT
bG93KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyBsaWtlIHVubG9jaygpIGJ1dCBpdCBndWFy
YW50ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2NrIGZhaXJseS4gRm9yIHNob3J0IGNyaXRpY2Fs
CkBAIC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gd2FudC4KICAg
ICB2b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5j
b21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFz
ZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRp
bmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tGYWly
bHlTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVu
bG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tGYWlybHlT
bG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0
OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OmlzTG9ja2VkKG1fYnl0ZSk7
CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CkBAIC0xMjYsMjEgKzEwOSwxMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0g
MTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQgPSAyOwotCisgICAgCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5s
b2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0gRmFpcm5lc3MgewotICAgICAgICBGYWly
LAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZvaWQgdW5sb2NrU2xvd0ltcGwoRmFpcm5l
c3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHks
Ci0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9OwogCiAgICAgLy8gTWV0aG9kIHVzZWQgZm9y
IHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlSZXNldCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdv
cml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tBbGdv
cml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRobV9oCisKKyNpbmNsdWRlIDx0aHJlYWQ+
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2NrLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
b2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+CitjbGFz
cyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBpc0hlbGRCaXQgfCBoYXNQYXJrZWRC
aXQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9t
aWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4
Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2Nr
KQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hh
bmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWxvY2tGYXN0KGxvY2sp
KSkKKyAgICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVW
YWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBMb2Nr
VHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAg
ICAgICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRW
YWx1ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxv
Y2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQorICAg
ICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICB1bmxvY2tT
bG93KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2tlZChj
b25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2su
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICB9CisgICAg
CisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCisgICAgeworICAgICAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAgICAg
IC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBh
c3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1p
dCA9IDQwOworICAgIAorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1
cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKworICAgICAgICAgICAgLy8gV2UgYWxsb3cg
b3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1
ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkg
cGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBz
cGluIGFyb3VuZC4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJr
ZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAgICAgICAgIHNwaW5D
b3VudCsrOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5l
ZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBh
bmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAgICAgLy8gaWYgdGhlIHBh
cmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQuCisgICAgICAg
ICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAg
ICAgICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVu
dEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQ
YXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAg
ICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9CisgICAgICAgICAgICAgICAg
UGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5w
YXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJr
UmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMg
aGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFk
IHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQg
YW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAgICAgICAgICAgICAgICAg
IC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBp
cyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhh
dmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAg
ICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVz
cykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsg
Q0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisg
ICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlm
IHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJl
IGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBh
cmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IG9s
ZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisg
ICAgICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdAorICAgICAg
ICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKChvbGRCeXRlVmFsdWUgJiBtYXNr
KSA9PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKGlzSGVsZEJpdCwgMCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU29t
ZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFjdGx5IG9uZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRo
ZSBsb2NrIHRvIHRoYXQgdGhyZWFkCisgICAgICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2ls
bCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cg
Zm9yIGJhcmdpbmcuCisgICAgICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZl
IHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBz
dGlsbAorICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBwYXJrZWQuCisgICAgICAgICAgICBB
U1NFUlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKKyAgICAgICAgICAgICAgICAm
bG9jaywKKyAgICAgICAgICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1
bHQpIC0+IGludHB0cl90IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5
IG9uZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVyIHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1Bhcmtl
ZEJpdCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3Ro
IGJpdHMgc2V0IHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChsb2NrLmxv
YWQoKSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYg
KGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFu
ZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3YWl0aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRv
ZmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBl
IG9sZFZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2NrVHlw
ZSBuZXdWYWx1ZSA9IG9sZFZhbHVlICYgfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXdWYWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgZW51bSBUb2tlbiB7CisgICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKKyAgICAgICAg
RGlyZWN0SGFuZG9mZgorICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpMb2NrQWxnb3JpdGhtOworCisjZW5kaWYgLy8gV1RGX0xvY2tBbGdvcml0aG1faAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJDb25kaXRpb24u
aCIKICNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRl
IDxjZmxvYXQ+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKQEAgLTEyOCw2ICsxMzEsMTcgQEAgdm9pZCBzbGVlcChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cAogICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VM
b2NrLCB0aW1lKTsKIH0KIAorYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZSYgdGltZSkKK3sKKyAgICAvLyBBdm9pZCBkb2luZyBub3coKS4KKyAgICBpZiAoISh0
aW1lID4gdGltZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcygwKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0aW1lIDw9IHRp
bWUubm93V2l0aFNhbWVDbG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJpdmF0ZToKIAogV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CiAKK1dURl9F
WFBPUlRfUFJJVkFURSBib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlJik7CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlRpbWVXaXRoRHluYW1p
Y0Nsb2NrVHlwZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNlZDsKK3VzaW5nIFdURjo6c2xlZXA7CiAK
ICNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294526</attachid>
            <date>2016-11-11 13:07:14 -0800</date>
            <delta_ts>2016-11-12 09:15:51 -0800</delta_ts>
            <desc>fix some build errors</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>238001</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1MyBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuCisKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5t
bToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBpc09sZEV4dGVybmFsT2JqZWN0Ol0pOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5lQWNj
ZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAgIChKU0M6OklubGluZUFjY2Vz
czo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6
CisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVtZW1i
ZXJDb2RlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphcnJheWlm
eSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
ICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6bWFy
a0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjpyZW1lbWJlckNvZGVC
bG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6Om1hcmtDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgorICAgICAgICAoSlNDOjpERkc6OnJlbWVt
YmVyQ29kZUJsb2Nrcyk6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0Lmg6CisgICAgICAgICog
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFi
c3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTEpJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6On5KSVRDb2RlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6aXNBcnJheVR5cGUpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVTdHViKToKKyAgICAg
ICAgKiBoZWFwL0NlbGxTdGF0ZS5oOgorICAgICAgICAqIGhlYXAvR0NTZWdtZW50ZWRBcnJheS5o
OgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRo
ZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpS
ZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29wZSk6CisgICAgICAgIChKU0M6
OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMp
OgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucyk6CisgICAgICAgIChKU0M6
OkhlYXA6Om1hcmtUb0ZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6SGVhcDo6Z2F0aGVyU3RhY2tS
b290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmJlZ2luTWFya2luZyk6CisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNp
dENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OnVw
ZGF0ZU9iamVjdENvdW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmVuZE1hcmtpbmcpOgorICAg
ICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgorICAgICAgICAoSlNDOjpIZWFw
Ojpjb2xsZWN0SW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpzdG9wVGhlV29ybGQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpyZXN1bWVUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIp
OgorICAgICAgICAoSlNDOjpIZWFwOjpjYW5Db2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0
ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bm90aWZ5SXNTYWZlVG9D
b2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncyk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVh
cDo6dmlzaXRFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFN0
cm9uZ0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEhhbmRsZVN0
YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFNoYWRvd0NoaWNrZW4pOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjp0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFdlYWtIYW5kbGVzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BBbGxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdG9yU2xvdFZpc2l0b3Ip
OgorICAgICAgICAoSlNDOjpIZWFwOjptdXRhdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6c2xvdFZpc2l0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJ
c1NhZmVUb0NvbGxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8pOgorICAgICAgICAqIGhl
YXAvTWFya1N0YWNrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4pOgorICAgICAgICAqIGhl
YXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6TWFya2VkQmxv
Y2spOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVw
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXApOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSk6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3cpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpTZXRO
ZXdseUFsbG9jYXRlZEZ1bmN0b3I6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6b3BlcmF0b3IoKSk6IERl
bGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAqIGhlYXAvTWFy
a2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGlu
Zyk6CisgICAgICAgICogaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmg6IEFkZGVkLgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6U2xv
dFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmNsZWFyTWFya1N0YWNrcyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRK
U0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpzZXRNYXJrZWRB
bmRBcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRU
b01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRUb011dGF0b3JN
YXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRy
YWluRnJvbVNoYXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1
ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4pOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cyk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNsZWFyTWFy
a1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RD
b3VudCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6Y29sbGVjdG9yTWFya1N0YWNrKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpieXRlc1Zpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzQ29waWVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL1Ns
b3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJ
bmZvKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAg
ICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5jcHA6
CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2Nr
Lmg6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXI6Ok5vRGVmZXI6Ok5v
RGVmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNBcmd1bWVudHM8VHlwZT46OnB1
dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdUeXBlLmg6CisgICAgICAgICog
cnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAoSlNDOjpKU0Nl
bGw6OkludGVybmFsTG9ja2VyOjpJbnRlcm5hbExvY2tlcik6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6SW50ZXJuYWxMb2NrZXI6On5JbnRlcm5hbExvY2tlcik6CisgICAgICAgIChKU0M6OkpTQ2Vs
bDo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQpOgorICAgICAgICAo
SlNDOjpKU0NlbGw6OmF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyk6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpKU0NlbGwpOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNDZWxs
OjppbmRleGluZ1R5cGVBbmRNaXNjKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OkpTQ2VsbDo6Y2FsbERlc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmxvY2tJbnRl
cm5hbExvY2spOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnVubG9ja0ludGVybmFsTG9jayk6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdl
QWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5k
ZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxJbnQzMik6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252
ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRD
b250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmluZFN0
cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFu
Z2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphdHRyaWJ1
dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0RpY3Rpb25h
cnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc1NlYWxlZCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6aXNGcm96ZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1h
dGVyaWFsaXplUHJvcGVydHlNYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3kpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJREJsb2Iu
aDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpTdHJ1Y3R1cmVJREJsb2IpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OnNldEluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6Omlu
ZGV4aW5nVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6c2V0
SW5kZXhpbmdUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpp
bmRleGluZ1R5cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnNldFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6cHJvcGVydHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KTogRGVsZXRlZC4KKwogMjAxNi0xMS0x
MSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIyMDg1ODQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTUx
LDcgKzE1MSw3IEBAIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9iamNPYmplY3QoaWQgb2JqZWMKIC0g
KGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0CiB7CiAgICAgSlNDOjpWTSogdm0g
PSB0b0pTKG1fZ3JvdXApOwotICAgIHJldHVybiB2bS0+aGVhcC5zbG90VmlzaXRvcigpLmNvbnRh
aW5zT3BhcXVlUm9vdChvYmplY3QpOworICAgIHJldHVybiB2bS0+aGVhcC5jb2xsZWN0b3JTbG90
VmlzaXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOwogfQogCiAtICh2b2lkKWFkZEV4
dGVybmFsUmVtZW1iZXJlZE9iamVjdDooaWQpb2JqZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTYxMyw2ICs2MTMsNyBAQAogCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEU5MThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovOyB9OwogCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUxOENFNEZEODAwNTIzNzFEIC8q
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJMEZBREREMUQxREQwMUVERTAwODI3NUU4IC8q
IFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQURERDFDMUREMDFFREMwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNj
b3BlLmggKi87IH07CiAJCTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREU2NzIxRDRE
MjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJCTBGQUY3RUZEMTY1QkE5MUIwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERpc2Fzc2Vt
Ymxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzAwNCw2ICszMDA1LDcgQEAK
IAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3QThF
RDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURERDFDMUREMDFFREMwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlc3VtZVRoZVdvcmxkU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhlYXBVdGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1IC8qIEpJVERp
c2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREaXNhc3Nl
bWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2ODYsNiArNTY4OCw3IEBA
CiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oICovLAogCQkJ
CUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggKi8sCiAJCQkJMEY3
Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKKwkJ
CQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovLAog
CQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8sCiAJCQkJ
MTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggKi8sCiAJCQkJMEZDQjQw
ODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovLApAQCAtNzkxOCw2
ICs3OTIxLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1REIgLyogREZHQmFzaWNCbG9j
a0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkJEOTYxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZBREREMUQxREQwMUVERTAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDM0QyQjBBMUQzNDMxNjIwMEJBOTE4QyAvKiBIZWFwQ2VsbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tN
YXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDgwLDcgKzEwMDg0LDYgQEAKIAkJCQkw
RkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENCMzQxMDA0QzJFQjggLyogRGVidWdnZXJQYXJzZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTNGRjdGOUQxREMwMERCMTAwQTI2Q0NDIC8qIFdh
c21Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcx
IC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQy
MTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2
aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBJbmxpbmVBY2Nl
c3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7
CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB2YWx1ZTsKLSAgICAgICAgaml0LmxvYWQ4
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2Us
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdmFsdWUpOwogICAgICAgICBq
aXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hh
cGVNYXNrKSwgdmFsdWUpOwogICAgICAgICBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpOwpAQCAtMTU4LDcgKzE1OCw3IEBAIEFM
V0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUKIGJvb2wgSW5saW5lQWNjZXNz
OjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYgdm0sIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0KKyAgICAKICAgICBHUFJSZWcgYmFzZSA9IHN0
YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQUik7CiAgICAgSlNWYWx1ZVJl
Z3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAtMTczLDcgKzE3Myw3IEBAIGJv
b2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUEKICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZS5wYXlsb2Fk
R1BSKCk7CiAgICAgfQotCisgICAgCiAgICAgaml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSks
IHZhbHVlKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0
ZUFycmF5TGVuZ3RoKFYKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVn
cygpOwogICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2NyYXRjaFJlZ2lzdGVyKHN0dWJJbmZvKTsK
IAotICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8
IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CiAgICAgYXV0byBicmFuY2hUb1Nsb3dQYXRo
ID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhcnJheS0+aW5kZXhpbmdUeXBl
KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0Fj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjA3LDcgKzYwNyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAg
c3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3RoOiB7CiAgICAgICAgIEFTU0VS
VCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworICAg
ICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGZhbGxUaHJv
dWdoLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0MzIoCiAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwODU5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlm
aWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgogICAgICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIHNp
bmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCiAgICAgICAgICAgICBqaXQt
Pm1faml0LmxvYWQ4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1f
YmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIG1fc3RydWN0dXJlR1BSKTsK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX3N0cnVj
dHVyZUdQUik7CiAgICAgICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAuZmlsbCgKICAgICAg
ICAgICAgICAgICBqaXQsIGppdC0+anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShtX3N0cnVj
dHVyZUdQUiwgbV9hcnJheU1vZGUpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODks
NiArODg5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
ICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgcmVhZChKU09i
amVjdF9idXR0ZXJmbHkpOyAvLyBUaGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2UuCiAgICAgICAg
IHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5m
b1R5cGUpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5T
dHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNo
MSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gxKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJs
eUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9k
ZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsOSArNTA1LDkgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVl
LmlzQ2VsbCgpKSkgewogICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7
CiAKLSAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpIHsKKyAgICAgICAgaWYgKHByb3Bl
cnR5LmlzVUludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZ2V0QnlWYWwoZXhlYywgYmFzZSwg
cHJvcGVydHkuYXNVSW50MzIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEb3Vi
bGUoKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CiAgICAgICAg
ICAgICBkb3VibGUgcHJvcGVydHlBc0RvdWJsZSA9IHByb3BlcnR5LmFzRG91YmxlKCk7CiAgICAg
ICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5QXNVSW50MzIgPT0g
cHJvcGVydHlBc0RvdWJsZSAmJiBpc0luZGV4KHByb3BlcnR5QXNVSW50MzIpKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAs
MTYgKzYxMCwzNCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21w
aWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBs
YW46OnJlbWVtYmVyQ29kZUJsb2NrcygpCit2b2lkIFBsYW46Om1hcmtDb2RlQmxvY2tzKFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKIHsKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dD
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90
cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4g
ZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3Vt
ZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcg
R0MuCisKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihj
b2RlQmxvY2spOworICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJs
b2NrKQorICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihwcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CisKK3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKICAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1
ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCiAgICAgLy8gYW4gZXhwbGljaXQg
YmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CiAg
ICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCiAKLSAg
ICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIEhl
YXA6OmhlYXAoY29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUo
KSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndy
aXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIGlmIChwcm9maWxlZERG
R0NvZGVCbG9jaykKLSAgICAgICAgSGVhcDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jayktPndy
aXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xpdmVu
ZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBz
dHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgQ29tcGls
YXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsKKyAg
ICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCByZW1lbWJlckNv
ZGVCbG9ja3MoVk0mKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZv
aWQgY2FuY2VsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzNiw3ICs4
MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBt
X2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBC
YWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCAwLAog
ICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5h
cnJheU1vZGUoKSkpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFy
cmF5aWZ5KE5vZGUqIG5vZGUKICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQ
Uik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwg
bm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRyeVRvRlRMKCkp
CiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKLQorICAgICAgICAKICAgICAg
ICAgbV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAgICAgTmF0dXJhbExvb3BzJiBu
YXR1cmFsTG9vcHMgPSAqbV9ncmFwaC5tX25hdHVyYWxMb29wczsKICAgICAgICAgSGFzaE1hcDxj
b25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVkPiBuYXR1cmFsTG9vcFRvTG9vcEhpbnQgPSBidWls
ZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChuYXR1cmFsTG9vcHMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiREZHV29ya2xp
c3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZlcG9pbnQuaCIK
QEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCisj
aWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5IDogcHVibGlj
IEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25zdCBMb2NrSG9s
ZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0YSwgQm94PExv
Y2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRpdGlvbiwgaW50
IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29ya2xpc3Q6OmNv
bXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2
bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0
b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOworICAg
IGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBt
X3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVl
LmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9
CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9pZCBXb3JrbGlz
dDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+
dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgICAgIHBs
YW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMsNiArNTY0LDE0
IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9CiAKK3ZvaWQg
bWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CisgICAg
ICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZv
ckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2RlQmxvY2tzKHZt
LCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBp
LS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2
bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNlIC8vIEVOQUJM
RShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7Cit9CisKK3Zv
aWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3ZvaWQgcmVtZW1i
ZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw2IEBACiAK
ICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRlICJERkdQbGFu
LmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9BdXRvbWF0aWNU
aHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAKIG5hbWVzcGFj
ZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsgTm90S25v
d24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAg
IC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAg
ICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAtMTYzLDkgKzE2
NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRlCiAgICAgcmV0
dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogdm9pZCBjb21w
bGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90Vmlz
aXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5j
cHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0ICs3MywxNCBA
QCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAgLCBhYnNvbHV0
ZSgmcm9vdCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvdXIgZXhwbGlj
aXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCByZWFsaXR5Lgot
ICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSAmIChzaXpl
b2YoaW50MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5
cGUub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkpOwotICAgIFJF
TEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90
eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhp
bmdUeXBlLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICYgKHNp
emVvZihpbnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5n
VHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgp
ICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxs
U3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5nZVBhcmVudCgm
SlNDZWxsX2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBhcmVudCgmSlND
ZWxsX2hlYWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2Vs
bF91c2VmdWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MuY2hhbmdlUGFy
ZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5cGUuY2hhbmdl
UGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb0ZsYWdzLmNo
YW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2VsbFN0YXRlLmNo
YW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4LDExIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3Is
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxs
X2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2Vs
bF9oZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1p
c2MsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlND
ZWxsX3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNy
byhKU0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJs
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0
aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3Jv
KEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAg
ICAgICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOworICAgICAgICBk
YXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzgwLDYgKzI3ODAsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUo
KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGls
aW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9k
ZSk7CisgICAgICAgIAorICAgICAgICBGZW5jZVZhbHVlKiBmZW5jZSA9IG1fb3V0LmZlbmNlKCk7
CisgICAgICAgIC8vIFdlIGNvdWxkIGRlY29yYXRlIHRoaXMgd2l0aCB0aGUgdW5pb24gb2YgYnV0
dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIHdvbid0CisgICAgICAgIC8vIGhlbHAgdGhh
dCBtdWNoLiBQcmVjaXNlIHJlYWQgYWNjb3VudGluZyBpcyBtb3N0bHkgZm9yIHN0b3JlIGVsaW1p
bmF0aW9uIGFuZCBpZiB0aGlzCisgICAgICAgIC8vIHJlYWRzIHN0cnVjdHVyZSB0aGVuIGl0J2xs
IGJsb2NrIHRoYXQgc3RvcmUgZWxpbWluYXRpb24uIFdlIHJlYWxseSB3YW50IHRvIGJlIGFibGUK
KyAgICAgICAgLy8gdG8gcHV0IGEgcmVsZWFzZSBmbGFnIG9uIHRoZSBzdG9yZSBiZWxvdy4KKyAg
ICAgICAgZmVuY2UtPndyaXRlID0gSGVhcFJhbmdlKCk7CiAKICAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CkBAIC01
MDM0LDYgKzUwNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6
OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25z
LmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CkBAIC01MDQxLDcgKzUwNDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlh
bnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBk
YXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFu
c2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5m
bygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7
CkBAIC01MDQ5LDcgKzUwNjEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAg
c3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExNzM5LDcgKzExNzUwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5n
VHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5n
VHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDhaZXJv
RXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewogICAg
ICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDIwODU5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gaml0LmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAg
ICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKKyAg
ICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgR1BSSW5mbzo6cmVn
VDEpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQubHNoaWZ0MzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAgICBqaXQub3IzMihH
UFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2Zp
bGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMTEgQEAgZW51
bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKICAgICAvLyBTbG90VmlzaXRvcnMgYXJlIGRv
bmUuCiAgICAgQW50aHJhY2l0ZU9yQmxhY2sgPSAwLAogICAgIAotICAgIC8vIFRoZSBvYmplY3Qg
aXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBoYXMgbm90
IGJlZW4gbWFya2VkIHlldC4KKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdvaW5nIHRvIGJlIGlzIGlu
IGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVu
IG1hcmtlZCB5ZXQuCiAgICAgTmV3V2hpdGUgPSAxLAogCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSBpbiB0aGlzIEdDIHRoYXQgd2UgYXJlCi0gICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4gSWYgdGhp
cyBpcyBhbiBlZGVuIEdDLCB0aGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGVk
ZW4uCi0gICAgTmV3R3JleSA9IDIsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUu
IGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGJ1dCBpdCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChp
ZiB0aGlzIGlzIGVkZW4KLSAgICAvLyBHQykgb3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGlu
IHRoaXMgY3VycmVudCBHQyAoYmVjYXVzZSBhIGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1
ZXN0ZWQKLSAgICAvLyByZS1ncmV5aW5nKS4KLSAgICBPbGRHcmV5ID0gMworICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkLgorICAgIEdyZXkgPSAyLAog
fTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBi
bGFja1RocmVzaG9sZCBtZWFucyB4IGlzIEFudGhyYWNpdGVPckJsYWNrLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTYyLDMgKzE2NCw0IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIw
ODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw2ICs3OCwzNSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgSGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZSB7CitwdWJsaWM6CisgICAg
UmVzdW1lVGhlV29ybGRTY29wZShIZWFwJiBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQor
ICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAg
ICAgICAgICAgZGF0YUxvZygoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGlt
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMuLi5dXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGVh
cC5yZXN1bWVUaGVXb3JsZCgpOworICAgIH0KKyAgICAKKyAgICB+UmVzdW1lVGhlV29ybGRTY29w
ZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxkKCk7CisKKyAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisK
IG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICog
TUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwg
bV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6
bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3Rk
OjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04p
CiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwg
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIg
KzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZv
aWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmco
KQpAQCAtNDM5LDExNyArNDcxLDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMo
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRl
QWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAK
LXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtS
b290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2Nv
cGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50
Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNp
dG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdl
bmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNl
Iik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkg
eworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2st
PmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVt
ZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0j
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGls
IHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIn
cyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGlu
Z1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUK
LSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5j
ZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lk
ZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNz
VW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVs
bCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5N
YXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhp
c10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFi
bGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RG
TW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0
b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNl
dEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmICht
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3
VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
bG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChH
Q1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQo
R0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNp
dG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygp
OwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpz
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0
b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAg
ICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBk
b3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91Ymxl
IHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlh
bFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMi
LCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0g
dG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAv
LyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZp
eHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgorICAgICAgICAgICAg
CisgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xs
ZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25n
UmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAKKyAgICAg
ICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAo
bV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkpCisgICAgICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKGhlYXBSb290VmlzaXRvciwgKm1fbWFya0xpc3RT
ZXQpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8g
Y29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0
IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQg
dG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAg
ICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBi
YXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlF
eGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1i
ZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFBy
b3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1
ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RW
aXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0g
ICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRT
YW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAg
IHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHVi
Um91dGluZXMoKTsKLSAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENv
bnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVy
Z2VuY2UiKTsKLQotICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJl
Y2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0
aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJv
b3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwor
ICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAg
ICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCisgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0
byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAg
IHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAg
ICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpOworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNl
cnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUK
KyAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3Vy
ZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28g
dGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28s
IHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sg
LSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28g
d2FudCB0byBkbyB0aGlzCisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0
aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0
CisgICAgICAgIC8vIEdDLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1f
dm0pOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFj
a3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFk
KQorICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIu
CisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
IAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOwor
ICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQo
U2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYg
KGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewor
ICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5k
RHJhaW4oKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZy
b21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRp
bWVUb1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQog
CiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRl
eCk7CkBAIC01NjMsNyArNjQyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IHJvb3RzKQogewotICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9t
YWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJv
dXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0KIApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVh
cDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxD
b2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAK
ICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywg
Im1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lk
IEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Ns
b3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlz
aXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9z
bG90VmlzaXRvci5hcHBlbmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFw
cGVuZChyb290cyk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBk
YXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKKyAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICNlbmRpZgogfQogCkBAIC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFw
OjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2
aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBS
b290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0
czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQt
PnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1h
cmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1
ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxh
c3RFeGNlcHRpb24oKSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25n
IEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJv
ZmlsZXIoKQotewotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
ewotICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkp
OwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQot
ewotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJv
ZmlsZXJMb2coKS0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUg
UHJvZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hh
ZG93Q2hpY2tlbigpCi17Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
bV9zbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCkKLXsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMobV9zbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1
YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25h
dGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzIik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHModmlzaXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7
Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAg
IGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAg
ICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RD
b3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xv
dFZpc2l0b3IudmlzaXRDb3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0
aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9i
amVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkg
LSBnY1N0YXJ0VGltZSk7CiAgICAgfQpAQCAtODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAw
OwogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0
ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkVGhpc0N5Y2xlID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNp
dGVkKCkgKworICAgICAgICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFs
Qnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQg
SGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAg
IG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBI
ZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsK
ICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpB
bnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBn
cmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdy
ZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4g
b2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMg
d2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0
d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAg
Ly8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJs
YWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21l
IHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcg
cGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0
IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVj
dG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2Jq
ZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29t
ZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVu
Zm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2st
PmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0x
MDk0LDI0ICsxMDQwLDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAg
ICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25p
Y1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFM
b2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9
IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0
eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFC
TEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwot
ICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1f
dm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgp
LT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24g
c2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7
CkBAIC0xMTMxLDEyICsxMDY3LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAg
ICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpC
ZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7
Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3Rz
KGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAg
IAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVP
YmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzEx
MDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1l
TVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAg
ICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRh
dGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIs
IChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQog
ICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzExMjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29y
bGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygp
OwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOwor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1f
b2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogewor
ICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24g
Y3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0
aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBu
by1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAg
ICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3lj
bGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3Bh
Y2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKQEAgLTE0NjksMTAgKzE0MjUsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9w
cGluZyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NT
Y29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENv
ZGUoKTsKLSAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VB
bGxvY2F0aW9ucygpOworICAgIHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2Nv
cGUoKnRoaXMpOworICAgICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAg
ICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2Nh
dGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3Vz
bHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7CiAgICAgaWYgKEhhc093blByb3BlcnR5Q2Fj
aGUqIGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+
Y2xlYXIoKTsKIH0KQEAgLTE1NTQsMjMgKzE1MTUsOSBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENv
bGxlY3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxlY3Qo
KTsKIH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsKLSAgICBt
X3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFwOjpmbHVz
aFdyaXRlQmFycmllckJ1ZmZlcigpCiB7Ci0gICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENv
bGxlY3Rpb25TY29wZTo6RWRlbikgewotICAgICAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVz
aCgqdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZm
ZXIucmVzZXQoKTsKLX0KLQotdm9pZCBIZWFwOjpzdG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9v
YmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZs
dXNoKCp0aGlzKTsKIH0KIAogdm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xOTU0
LDcgKzE5MDEsNyBAQCBib29sIEhlYXA6OmNhbkNvbGxlY3QoKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSB8fCBtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3Rh
dGU6OkhlbHBpbmdHQykKKyAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpI
ZWxwaW5nR0MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTE5NzYsMTIgKzE5MjMsOCBAQCBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3koKQogICAg
IHJldHVybiBtYXlCZUdDVGhyZWFkKCkgfHwgbXV0YXRvclN0YXRlKCkgIT0gTXV0YXRvclN0YXRl
OjpSdW5uaW5nOwogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxs
U3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9y
eVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUt
Y291bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xs
ZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpF
ZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0cmFNZW1vcnlTaXplOwogICAgIAogICAgIGZv
ciAoOzspIHsKQEAgLTE5OTIsMTIgKzE5MzUsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChDZWxsCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIEhl
YXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVf
dCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNp
emUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dGVybmFs
IG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBp
ZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRl
ID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBj
b3VudGVyID0gJm1fZXh0ZXJuYWxNZW1vcnlTaXplOwogCiAgICAgZm9yICg7OykgewpAQCAtMjA5
MSw0ICsyMDMwLDExIEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8K
IH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCkKK3sKKyAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CisgICAgaWYgKE9wdGlvbnM6OmNv
bGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvblNjb3Bl
LmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJIYW5k
bGVTZXQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2lu
Y2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJT
bG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJU
aW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBA
IC03MCw3ICs3MCw5IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOwog
Y2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIE1hcmtT
dGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBTbG90VmlzaXRv
cjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTEyOSw3ICsx
MzEsOCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4g
bV9vYmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsg
cmV0dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIGNvbnN0IFNsb3RWaXNpdG9yJiBzbG90
VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRv
ciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cjsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gKm1f
bXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNh
bGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdD
QWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTE2OCw3ICsxNzEs
NyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlND
ZWxsKiwgRmluYWxpemVyKTsKICAgICB2b2lkIGFkZEV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2Uq
KTsKIAotICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVj
dCA9IHRydWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIGJvb2wg
aXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3Q7CkBA
IC0yMDMsMTEgKzIwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1
bmN0aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwogICAgIC8v
IG1lbW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXpl
X3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRy
YSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3Rh
dGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlTaXplKCkgeyBy
ZXR1cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNlbmRpZgogCkBAIC0zOTEsNiArMzk0LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhl
V29ybGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIGZyaWVu
ZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0
b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQyMiwzMSArNDI4
LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7
CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4p
OwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9p
ZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAotICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBn
Y1N0YXJ0VGltZSk7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUp
OwogICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZv
aWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRo
ZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGJlZ2lu
TWFya2luZygpOwotICAgIHZvaWQgdmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAgICB2
b2lkIHZpc2l0U21hbGxTdHJpbmdzKCk7CiAgICAgdm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFr
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVz
KCk7Ci0gICAgdm9pZCB2aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lk
IHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdI
YW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwotICAgIHZv
aWQgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICB2b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwot
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOworICAgIHZvaWQgbWFya1RvRml4cG9p
bnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtpbmcoKTsKIApAQCAtNTE4LDcgKzUxMSw4
IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAg
IAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxN
YXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUg
c2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2Vm
dWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVz
ZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20K
QEAgLTU3Miw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsK
ICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNr
QXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0Fy
cmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFy
a1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVy
T2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTYwMCw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBB
bGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAg
ICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJl
bGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1l
IG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4g
bV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tB
cnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0
LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRz
LnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJI
ZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIu
bV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJP
ZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMg
PSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBw
bGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50
cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIu
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAg
ICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0
YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAg
ICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNv
cHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJh
eSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAot
ICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2
b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAg
IHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFs
U29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2Vk
CiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNB
bnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7
CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgy
LDE0IEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1f
aGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAg
ICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVt
cGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVN
b2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2Rl
IG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtz
TW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoKQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUg
PT0gU3dlZXBPbmx5KSk7CiAgICAgCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOwogCkBAIC05OSw3ICsxMDEsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQog
ICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCkgewotICAgICAgICBBU1NFUlQobWFy
a3NNb2RlID09IE1hcmtzU3RhbGUpOworICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtz
U3RhbGUgfHwgYmxvY2subV9tYXJrcy5pc0VtcHR5KCkpOwogICAgICAgICAKICAgICAgICAgY2hh
ciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5h
dG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3Rh
cnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKQEAgLTExMSw2ICsxMTMsOCBAQCBGcmVlTGlzdCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0
ZWQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHko
dGhpcywgdHJ1ZSk7CisgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAg
ICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKICAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJl
ZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CiAgICAg
ICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkgc3dlcHQgYmxvY2sg
IiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFu
ZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsKQEAgLTEy
MywxNyArMTI3LDExIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUK
ICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBib29s
IGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewotICAgICAgICBpZiAoZW1wdHlNb2RlID09
IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYm
IGJsb2NrLm1fbWFya3MuZ2V0KGkpKQotICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkg
ewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgVmVjdG9yPHNpemVfdD4gZGVhZENlbGxzOworICAgIGF1
dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBpKSB7CiAgICAgICAgIEhlYXBDZWxsKiBj
ZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYmxvY2suYXRvbXMoKVtpXSk7
CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9uICYmIGVt
cHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9j
a0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCktPmNhbGxEZXN0cnVjdG9yKCp2bSgpKTsKIAogICAg
ICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewpAQCAtMTQ0LDEyICsxNDIs
MzMgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAg
ICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQorICAg
IH07CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9
IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKKyAg
ICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJr
cy5nZXQoaSkpCisgICAgICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNO
ZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7CisgICAgICAgICAg
ICBpc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3Jz
QW5kQ29sbGVjdG9ySXNSdW5uaW5nKQorICAgICAgICAgICAgZGVhZENlbGxzLmFwcGVuZChpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQotCisg
ICAgCiAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRpc2NhcmQgdGhlIG5ld2x5QWxsb2NhdGVkIGJp
dHMgaWYgd2UncmUgY3JlYXRpbmcgYSBGcmVlTGlzdCwKICAgICAvLyBvdGhlcndpc2Ugd2Ugd291
bGQgbG9zZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgY3VycmVudGx5IGFsaXZlLgogICAgIGlmIChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0ICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNO
ZXdseUFsbG9jYXRlZCkKICAgICAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRT
cGFjZTo6bnVsbFZlcnNpb247CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQor
ICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CisgICAgCisgICAgaWYgKGRlc3RydWN0aW9u
TW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgOiBkZWFkQ2VsbHMpCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2Vs
bChpKTsKKyAgICB9CiAKICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6bGlzdChoZWFk
LCBjb3VudCAqIGNlbGxTaXplKCkpOwogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVM
aXN0KQpAQCAtMTc3LDEyICsxOTYsMTggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXAoU3dlZQogICAgIAogICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKHRo
aXMpKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVz
dHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxO
ZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1vZGUpOwotICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dFNjcmliYmxlTW9kZTxEb2VzTm90TmVlZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOworICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOwor
ICAgIAorICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlv
bikgeworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgICAgICByZXR1
cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENv
bGxlY3RvcklzUnVubmluZz4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVy
U2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CisgICAg
fQorICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc05vRGVz
dHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAg
IGlmIChzY3JpYmJsZUZyZWVDZWxscygpKQpAQCAtMTkwLDcgKzIxNSw3IEBAIEZyZWVMaXN0IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxl
Y3RFbXB0eU1vZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBEb250U2NyaWJibGU+KHN3ZWVwTW9kZSk7CiB9
CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgc3dlZXBN
b2RlKQogewogICAgIC8vIEl0J3Mgbm90IG9idmlvdXMsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHdh
eSB0byBrbm93IGlmIHRoZSBibG9jayBpcyBlbXB0eS4gSXQncyB0aGUgb25seQpAQCAtMjA1LDcg
KzIzMCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICBy
ZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZDxOb3RFbXB0eSwgZGVzdHJ1
Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1v
ZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVk
KFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYgKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkp
CkBAIC0yMTMsNyArMjM4LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBI
ZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZTxlbXB0eU1vZGUsIGRl
c3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkPihz
d2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUg
ZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpO
ZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxv
Y2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
Y3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9j
YXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAg
ICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTIyMSwxMCArMjQ2LDE2IEBA
IEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dl
ZXBIZWxwZXJTZWxlY3RNYXJrc01vZGU8ZW1wdHlNb2RlLCBTd2VlcE9ubHksIGRlc3RydWN0aW9u
TW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGU+KCk7CiB9CiAKLXRlbXBsYXRl
PE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
d2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxs
b2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpCiB7Ci0gICAgaWYgKGFyZU1hcmtzU3Rh
bGUoKSkKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHNwYWNlKCktPm1hcmtpbmdW
ZXJzaW9uKCk7CisgICAgYm9vbCBtYXJrc0FyZVVzZWZ1bCA9ICFibG9jaygpLmFyZU1hcmtzU3Rh
bGUobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkK
KyAgICAgICAgbWFya3NBcmVVc2VmdWwgfD0gYmxvY2soKS5tYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhtYXJraW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKCFtYXJrc0FyZVVzZWZ1
bCkKICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUs
IGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtz
U3RhbGU+KCk7CiAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1v
ZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1h
cmtzTm90U3RhbGU+KCk7CiB9CkBAIC0yNDEsMjQgKzI3Miw2IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7CiB9CiAK
LWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9p
ZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRC
bG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVh
cENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJs
b2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9jay0+c2V0
TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNv
bnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2Js
b2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25z
dCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEyICsyNzks
MTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIEFTU0VS
VCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlz
dGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUg
YWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBz
aW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRvbmUgc3Rv
cEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxvY2F0aW9u
V2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsKKyAgICAK
ICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0
aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJl
IG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3YXkgdG8g
dGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3OSwxMiArMjk3LDE3IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2NhdGVkLmNs
ZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNw
YWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1
bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAgICBmb3JF
YWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIC0+
IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBzZXROZXdseUFsbG9jYXRlZChjZWxsKTsK
KyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9
KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAgICAgIFsm
XSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwogICAg
ICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICAgICAgY2xlYXJOZXdseUFs
bG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzMwLDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVz
dW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1Bv
aW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4i
KTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNT
RVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkp
IHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qg
bm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFs
cmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAg
ICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpAQCAtMzU0LDYgKzM4MSw4IEBAIHZvaWQg
TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAoaGFuZGxl
KCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwgIW1hcmtz
Q29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IENsZWFy
aW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAgICAvLyBX
ZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNv
Z25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vy
dml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRoZSBvbGQg
ZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1
Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBAIC0zNjIs
NiArMzkxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAg
ICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFya3MuY2xl
YXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBk
YXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBI
ZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRl
ZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
ID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNv
bnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwg
c2V0IG9mIGJpdHMKQEAgLTQyOSw3ICs0NjAsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmRpZENvbnN1bWVGcmVlCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFy
a2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNTRVJUKGlz
RnJlZUxpc3RlZCgpKTsKICAgICBtX2lzRnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFsbG9jYXRv
cigpLT5zZXRJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKKyAgICBhbGxvY2F0b3IoKS0+YXRvbWlj
U2V0QW5kQ2hlY2tJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKIH0KIAogc2l6ZV90IE1hcmtlZEJs
b2NrOjptYXJrQ291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMzAgKzE5MCwzMiBAQCBwdWJsaWM6
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFuZGxlKEhlYXAmLCB2b2lkKik7CiAgICAgICAgIAot
ICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGU+CisgICAgICAgIGVudW0gU3dlZXBEZXN0
cnVjdGlvbk1vZGUgeyBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMs
IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcgfTsKKyAgICAgICAgCisg
ICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlPgogICAgICAgICBGcmVlTGlzdCBz
d2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGVudW0gU2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxlLCBTY3Jp
YmJsZSB9OwogICAgICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSwg
U2NyaWJibGVNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShT
d2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gRW1wdHlN
b2RlIHsgSXNFbXB0eSwgTm90RW1wdHkgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVt
cHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAg
RnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgPSBT
d2VlcE9ubHkpOwogICAgICAgICAKICAgICAgICAgZW51bSBOZXdseUFsbG9jYXRlZE1vZGUgeyBI
YXNOZXdseUFsbG9jYXRlZCwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCB9OwogICAgICAgICAK
LSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9k
ZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAg
ICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBP
bmx5KTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBE
ZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAg
ICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhl
bHBlclNlbGVjdE1hcmtzTW9kZSgpOwogICAgICAgICAKICAgICAgICAgZW51bSBNYXJrc01vZGUg
eyBNYXJrc1N0YWxlLCBNYXJrc05vdFN0YWxlIH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0
ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5l
d2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxv
Y2F0ZWRNb2RlLCBNYXJrc01vZGU+CiAgICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAo
KTsKICAgICAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZv
ck1hcmtpbmcoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAg
ICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAg
WyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAg
ICAgICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODU5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAj
ZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAgOiBtX3N0
YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVkKDApCisg
ICAgOiBtX2J5dGVzVmlzaXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAgLCBtX2lz
SW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNl
Ojppbml0aWFsVmVyc2lvbikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNp
dG9yKEhlYXAmIGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewotICAgIGNs
ZWFyTWFya1N0YWNrKCk7CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCkBAIC0xMDksMTYgKzEwNywxNyBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7
CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBtX2J5dGVz
VmlzaXRlZCA9IDA7Ci0gICAgbV9ieXRlc0NvcGllZCA9IDA7CiAgICAgbV92aXNpdENvdW50ID0g
MDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwotICAgIEFTU0VSVCghbV9j
dXJyZW50Q2VsbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCit2b2lkIFNsb3RWaXNpdG9yOjpjbGVh
ck1hcmtTdGFja3MoKQogewotICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBtX2NvbGxlY3RvclN0
YWNrLmNsZWFyKCk7CisgICAgbV9tdXRhdG9yU3RhY2suY2xlYXIoKTsKIH0KIAogdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cykKQEAg
LTE0OCw3ICsxNDcsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFy
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGpzQ2Vs
bC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgICAgIGpzQ2VsbC0+c2V0
Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAKICAgICAgICAgYXBwZW5kVG9NYXJrU3RhY2so
anNDZWxsKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwLDcgKzIwOSw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2UKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBv
YmplY3QgaXMgZ3JleSBhbmQgdGhhdDoKICAgICAvLyBJbiBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6
IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQgaXMgZ3JleSBpbiB0aGlzIEdDIGN5Y2xlLgogICAgIC8v
IEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0aW9uOiBpdCdzIGEgbmV3IG9iamVjdCB0aGF0IGJlY2Ft
ZSBncmV5IHJhdGhlciB0aGFuIGFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICBjZWxsLT5z
ZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBhcHBlbmRUb01hcmtTdGFjayhjb250YWluZXIs
IGNlbGwpOwogfQpAQCAtMjI4LDE2ICsyMjcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRUbwogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1cnJlbnRs
eShjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLSAgICBBU1NFUlQoY2Vs
bC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgp
ID09IENlbGxTdGF0ZTo6T2xkR3JleSk7CisgICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09
IENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQoKTsKICAg
ICAKLSAgICAvLyBGSVhNRTogVGhlc2UgImp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRz
IHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gQnV0Ci0gICAgLy8gdGhh
dCB3b24ndCBiZSB0aGUgY2FzZSB3aGVuIHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAgbV92aXNp
dENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXplKCk7CiAg
ICAgCi0gICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5hcHBl
bmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFj
ayhjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9tdXRhdG9yU3RhY2suYXBwZW5kKGNlbGwp
OwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2Up
CkBAIC0yOTQsMTIgKzI5NiwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZp
c2l0Q2hpCiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0
aGlzLCBjZWxsKTsKICAgICAKLSAgICBtX29sZENlbGxTdGF0ZSA9IGNlbGwtPmNlbGxTdGF0ZSgp
OworICAgIGlmIChmYWxzZSkgeworICAgICAgICBkYXRhTG9nKCJWaXNpdGluZyAiLCBSYXdQb2lu
dGVyKGNlbGwpKTsKKyAgICAgICAgaWYgKG1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAobXV0YXRvcikiKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICB9CiAgICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFjZSBoZXJlIC0gdGhlIGNlbGwgc3RhdGUg
Y2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2JqZWN0cyBjYW4gb25seSBiZQotICAgIC8v
IHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBOZWl0aGVyIHRoZSBiYXJyaWVyIG5vciBt
YXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbgotICAgIC8vIG9iamVjdCB0aGF0IGlz
IGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpP
bGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgLy8g
RnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9yIHRoZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxy
ZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0IGF0CisgICAgLy8gYWJvdXQgdGhlIHNhbWUg
dGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3MgZmluZS4gSXQncyBhIGduYXJseSBhbmQgc3Vw
ZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90IGNsZWFyIHRvIG1lIHRoYXQgaXQgd291bGQg
YmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJhaWwgaGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFs
cmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAgCkBAIC0zMjYsMjMgKzMzMywyMyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgfQogICAgIAogICAgIGlm
IChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKSB7Ci0gICAgICAgIGlmIChtX29sZENl
bGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkpCisgICAgICAgIGlmICghbV9pc1Zpc2l0aW5n
TXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRO
b2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogICAgIH0KIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93
blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pCiB7CiAg
ICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkgb2Z0ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUg
Y29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1bWUgdGhhdCBkb25hdGluZyBpcyBub3QgcHJv
Zml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tpbmcgd2hlbiBhIHRocmVhZCByZWFjaGVzIGEg
ZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4KLSAgICBpZiAobV9zdGFjay5zaXplKCkgPCAy
KQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElm
IHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0
aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFi
bGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAgaWYgKHRv
LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgd2UncmUgY29udGVuZGluZyBv
biB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVyCkBAIC0z
NTIsMjYgKzM1OSw0MyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVh
ZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVD
ZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7CisgICAgZnJvbS5kb25hdGVTb21lQ2Vs
bHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5
QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6
OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9jb2xs
ZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayk7CisgICAgZG9u
YXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JN
YXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNUaW1lIHRp
bWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKLSAgICB3aGls
ZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93
bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0KCkpOwor
ICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0b3JTdGFj
ay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgICAgIGlmICghbV9j
b2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2su
cmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2FuUmVtb3Zl
TGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1f
Y29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghbV9tdXRh
dG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5yZWZpbGwo
KTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcg
b2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBvZgorICAgICAgICAg
ICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5IG9uY2Uu
IFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAgICAgICAgICAgIC8vIHBvc3NpYmx5IG1hbnkg
dGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgbWFya2VkLgorICAgICAgICAg
ICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmVi
YWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTsp
CisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1vdmVMYXN0
KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB9CiAg
ICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQor
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFy
ZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0
KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0
MTYsNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAogICAgICAg
ICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVyIHRlcm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9y
IHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAgICAgICAgICAgICAgIC8vIGZvciB1cyB0byBk
by4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAg
ICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0aGVtIHRv
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0LgotICAg
ICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdChs
b2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlh
YmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1vZGUgPT0g
U2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1p
bmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KICAgICAgICAgICAgICAgICBpZiAo
IW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAg
ICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisg
ICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0Nv
bmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAgICAgICAgICAgICAgIGxvY2ssCisgICAgICAg
ICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbCgKKyAg
ICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgW3Ro
aXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkTWFy
a1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAu
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVudCBwaGFzZSBkb25lPyBJZiBzbywgcmV0dXJu
IGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxs
ZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAgICAgICAg
ICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5n
UGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2suc3RlYWxTb21l
Q2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJr
U3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAg
ICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAg
Km1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGlu
Z1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFy
YWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWluKCk7Cisg
ICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0KIApAQCAtNDUzLDcgKzQ4OSw2IEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6
OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAogewogICAgIEFTU0VSVCghbV9p
c0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwog
ICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKIH0KIApAQCAt
NDY3LDEzICs1MDIsNiBAQCBUcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290
CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLWludCBTbG90VmlzaXRvcjo6b3BhcXVl
Um9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNT
RVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVl
Um9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKQEAgLTQ5Nywx
NSArNTI1LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRlS25vd25Q
YXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigpCit2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAg
ICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0KIAogdm9p
ZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1
ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSBy
b290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0byogcm9v
dCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU1Myw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9oZWFwLm1fdW5jb25kaXRpb25hbEZp
bmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogfQogCi12
b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0
b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IEpTQ2Vs
bCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAg
ICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJr
U3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKG11dGF0b3JNYXJrU3Rh
Y2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJrU3RhY2su
aCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkgKzU4LDExIEBAIHB1YmxpYzoKICAg
ICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBNYXJrU3Rh
Y2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQotICAgIGNvbnN0IE1hcmtT
dGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9Ci0KKyAgICBN
YXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xsZWN0b3JT
dGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4g
bV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNvbnN0IE1h
cmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9y
U3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsK
ICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwyNCArODcsMjMgQEAgcHVibGljOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0OwogICAgIFRy
aVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKLSAgICBpbnQg
b3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBtX3N0YWNr
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3Rh
Y2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAgdm9pZCBk
aWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtT
dGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3QgYnl0ZXNW
aXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0
ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29waWVkOyB9CiAgICAgc2l6ZV90IHZp
c2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KIAogICAgIHZvaWQgZG9u
YXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmlu
aXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0g
TW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAgICAgZW51bSBTaGFyZWREcmFpbk1v
ZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVk
KFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBTaGFyZWREcmFpblJlc3VsdCB7IERv
bmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNo
YXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVj
ZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJs
ZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhDb250YWlu
ZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9pZCBhcHBlbmRUb011dGF0b3JNYXJrU3Rh
Y2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwo
SGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwogCiAgICAgdm9pZCB2aXNpdENoaWxk
cmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbCgp
OworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFy
a1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fc3RhY2s7CisgICAgTWFy
a1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX211dGF0
b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRsZS1vd25p
bmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4K
ICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3Bp
ZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBib29sIG1faXNJblBhcmFsbGVsTW9k
ZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFNuYXBzaG90
QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVsbHB0ciB9OwogICAgIEpTQ2VsbCog
bV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBDZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7
CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5jb25kaXRp
b25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQo
c2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9v
bGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQor
ICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KIAogI2lm
IEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVt
b3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0
dXJlCiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1Y3R1cmVJRElzVmFsaWQpOwog
ICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVtcCBjb3Jy
ZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3Ry
dWN0dXJlUHRyLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGlu
Z1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwg
SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0
dXJlUHRyLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpKTsKICAgICAgICAgaml0LmFi
b3J0V2l0aFJlYXNvbihBSEluZGV4aW5nVHlwZUlzVmFsaWQpOwogICAgICAgICBjb3JyZWN0SW5k
ZXhpbmdUeXBlLmxpbmsoJmppdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4ICsx
MzE4LDggQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KHNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2Vsc2UKICAg
ICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbmZvIGZsYWdzIHVzaW5nIGEgc2luZ2xlIDMyLWJpdCB3
aWRlIGxvYWQgYW5kIHN0b3JlLgotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgICAgICBsb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCgpKSk7CiAKICAgICAgICAgLy8gU3RvcmUgdGhlIFN0cnVjdHVyZUlECiAgICAgICAgIHN0
b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw3ICs5OTYsNyBAQCBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgICAgIHN0b3JlMzIoaW5kZXhpbmdU
eXBlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAg
fQogCi0gICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgaW5kZXhpbmdUeXBlKTsKKyAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKIH0KIAogaW5saW5lIHZvaWQg
SklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdpdGhDZWxsKFJlZ2lz
dGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMDEsOCArMjIwMSw4IEBAIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICBv
YmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsK
KyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3Rv
cmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmplY3QtPnNldEJ1
dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
cmVzdWx0KTsKIH0KIApAQCAtMjIxMSw4ICsyMjExLDggQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCi0gICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZs
eVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAgICBCdXR0ZXJmbHkqIHJl
c3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgb2JqZWN0LT5z
ZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
OCw3ICsxMDA4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQog
ICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0
cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNv
dmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwogICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29uc3Rh
bnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUs
IG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUp
OwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBpZiAoIWlzSW5p
dGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVU
eXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5l
ZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0ICsxMDM3LDE1IEBA
IHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihv
cGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoqPigmY3VycmVu
dEluc3RydWN0aW9uWzVdKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZW1p
dFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwg
dmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
c2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAg
LTExNTcsMTEgKzExNTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhJ
bnN0cgogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAg
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAKLSAg
ICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
LSAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBzdG9yZTY0KHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiAjZW5kaWYgLy8g
VVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9pbnRTZXQo
KQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dCgpCiAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewotCisgICAgICAgICAg
ICAKICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6
Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoKmNvZGVCbG9jay0+dm0oKSwgc3R1YkluZm8sIHN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVk
Q29kZUlubGluZSkgewogICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNl
bGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA4NTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OCw2ICsxNzgsMTUgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhW
TSYgdm0pCiAgICAgU1RBVElDX0FTU0VSVChFdmFsQ29kZSA9PSAxKTsKICAgICBTVEFUSUNfQVNT
RVJUKEZ1bmN0aW9uQ29kZSA9PSAyKTsKICAgICBTVEFUSUNfQVNTRVJUKE1vZHVsZUNvZGUgPT0g
Myk7CisgICAgCisgICAgU1RBVElDX0FTU0VSVChJc0FycmF5ID09IDB4MDEpOworICAgIFNUQVRJ
Q19BU1NFUlQoSW5kZXhpbmdTaGFwZU1hc2sgPT0gMHgwRSk7CisgICAgU1RBVElDX0FTU0VSVChO
b0luZGV4aW5nU2hhcGUgPT0gMHgwMCk7CisgICAgU1RBVElDX0FTU0VSVChJbnQzMlNoYXBlID09
IDB4MDQpOworICAgIFNUQVRJQ19BU1NFUlQoRG91YmxlU2hhcGUgPT0gMHgwNik7CisgICAgU1RB
VElDX0FTU0VSVChDb250aWd1b3VzU2hhcGUgPT0gMHgwOCk7CisgICAgU1RBVElDX0FTU0VSVChB
cnJheVN0b3JhZ2VTaGFwZSA9PSAweDBBKTsKKyAgICBTVEFUSUNfQVNTRVJUKFNsb3dQdXRBcnJh
eVN0b3JhZ2VTaGFwZSA9PSAweDBDKTsKIAogICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
cHRyZGlmZl90PigocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8SlNDZWxsPio+KDB4NDAw
MCktPnNsb3QoKSkpIC0gMHg0MDAwKSk7CiAgICAgc3RhdGljX2Fzc2VydChQdXRCeUlkUHJpbWFy
eVR5cGVNYXNrID09IDB4NiwgIkxMSW50IGFzc3VtZXMgUHV0QnlJZFByaW1hcnlUeXBlTWFzayBp
cyA9PSAweDYiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBj
b3B5KQpAQCAtMTUwNSw2ICsxNTA1LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAub3BHZXRC
eVZhbE91dE9mQm91bmRzOgogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQwKQogICAgIHN0
b3JlYiAxLCBBcnJheVByb2ZpbGU6Om1fb3V0T2ZCb3VuZHNbdDBdCisgICAgam1wIC5vcEdldEJ5
VmFsU2xvdwogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgogICAgICMgRmlyc3QgbGV0
cyBjaGVjayBpZiB3ZSBldmVuIGhhdmUgYSB0eXBlZCBhcnJheS4gVGhpcyBsZXRzIHVzIGRvIHNv
bWUgYm9pbGVycGxhdGUgdXAgZnJvbnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDg1OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTMzMywxNCArMzMzLDE0IEBAIGVsc2UKIGVuZAogCiAjIENvbnN0YW50
IGZvciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCi1jb25zdCBJc0FycmF5ICAgICAgICAg
ICAgICAgICAgPSAxCi1jb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAzMAotY29uc3Qg
Tm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMAotY29uc3QgSW50MzJTaGFwZSAgICAgICAgICAg
ICAgID0gMjAKLWNvbnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDIyCi1jb25zdCBDb250
aWd1b3VzU2hhcGUgICAgICAgICAgPSAyNgotY29uc3QgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAg
ID0gMjgKLWNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMwCitjb25zdCBJc0FycmF5
ICAgICAgICAgICAgICAgICAgPSAweDAxCitjb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAg
PSAweDBFCitjb25zdCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAwCitjb25zdCBJbnQz
MlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Citjb25zdCBEb3VibGVTaGFwZSAgICAgICAgICAg
ICAgPSAweDA2Citjb25zdCBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Citjb25zdCBB
cnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBCitjb25zdCBTbG93UHV0QXJyYXlTdG9yYWdl
U2hhcGUgPSAweDBDCiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNgpA
QCAtODg3LDcgKzg4Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBl
LCAKICAgICBjb25zdCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIAogICAgIGxv
YWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAogICAgIHN0b3JlaSBzY3Jh
dGNoLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtwcm9maWxlXQotICAgIGxv
YWRiIEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5nVHlwZQorICAgIGxvYWRi
IEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRleGluZ1R5cGUKIGVuZAog
CiBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2su
aAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
Y3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCiAgICAgRGVm
ZXJHQyBtX2RlZmVyR0M7Ci0jZWxzZQotICAgIHN0cnVjdCBOb0RlZmVyIHsKLSAgICAgICAgTm9E
ZWZlcihIZWFwJiBoZWFwKSA6IG1faGVhcChoZWFwKSB7IH0KLSAgICAgICAgSGVhcCYgbV9oZWFw
OwotICAgIH07Ci0gICAgTm9EZWZlciBtX2RlZmVyR0M7Ci0jZW5kaWYKIH07CiAKIGNsYXNzIENv
bmN1cnJlbnRKSVRMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpJVExvY2tlckJhc2UgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NiwxMSArNjYsMTMgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQog
ICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAgICAgCiAgICAg
aWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAgICAg
c2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqZWN0LT5nZXRJbmRl
eFF1aWNrbHkoaW5kZXgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUs
IHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICByZXR1cm4g
QmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90
KTsKKyAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2Jq
ZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KQEAgLTEyOSw3ICsxMzEsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVu
dHM8VHlwZT46OnB1dEJ5SW5kZXgoCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxU
eXBlKj4oY2VsbCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLQorICAgIAogICAgIGlmICh0
aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CiAgICAgICAgIHRoaXNP
YmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5
cGUuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0Fs
Z29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC01MiwyMSArNTMsMjUgQEAgdHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIHN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMHgwMTsK
IAogLy8gVGhlIHNoYXBlIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi1zdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEU7Ci1zdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4MDA7Ci1z
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAgICAgICA9IDB4MDI7
IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJheXMuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElu
dDMyU2hhcGUgICAgICAgICAgICAgICA9IDB4MDQ7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDB4MDY7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEE7Ci1zdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEM7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICAgICAgICAgPSAweDBFOworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgICAgICAgID0g
MHgwMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAg
ICAgICAgICA9IDB4MDI7IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJheXMuCitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEludDMyU2hhcGUgICAgICAgICAgICAgICAgICAgICAgPSAweDA0Oworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgICAgICAgID0g
MHgwNjsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAgICAg
ICAgICAgICA9IDB4MDg7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5U3RvcmFnZVNo
YXBlICAgICAgICAgICAgICAgPSAweDBBOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93
UHV0QXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQzsKIAotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgPSAxOwotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzICAgPSA3Oworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgICAgICAgICA9IDc7CiAKIC8v
IEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBU
aGVzZSBhcmUgdXN1YWxseQogLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBk
aXJlY3RseS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3Nv
cnMgID0gMHgxMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nl
c3NvcnMgICAgICAgICA9IDB4MTA7CisKKy8vIFRoZSBJbmRleGluZ1R5cGUgZmllbGQgb2YgSlND
ZWxscyBpcyBzdG9sZW4gZm9yIGxvY2tzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRl
eGluZ1R5cGVMb2NrSXNIZWxkICAgICAgICAgID0gMHgyMDsKK3N0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgSW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZCAgICAgICA9IDB4NDA7CiAKIC8vIExpc3Qg
b2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9u
QXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDsKQEAgLTE3Nyw0ICsxODIsNiBAQCBz
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgCiAvLyBNYXNrIG9mIGFsbCBw
b3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCiBzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IEFsbEFycmF5VHlwZXMgfCBNYXlIYXZl
SW5kZXhlZEFjY2Vzc29yczsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPEluZGV4aW5nVHlwZSwg
SW5kZXhpbmdUeXBlTG9ja0lzSGVsZCwgSW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZD4gSW5kZXhp
bmdUeXBlTG9ja0FsZ29yaXRobTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5MCw3ICszOTAsOSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZN
JiB2CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5l
d1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRl
eEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgCi0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5n
aW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgCisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC0xMDYzLDEzICsxMDY1LDE1IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmEKICAgICAvLyBOZWVkIHRvIGhhdmUgR0MgZGVmZXJyZWQgYXJv
dW5kIHRoZSB1bnNoaWZ0Q291bnRTbG93Q2FzZSgpLCBzaW5jZSB0aGF0IGxlYXZlcyB0aGUgYnV0
dGVyZmx5IGluCiAgICAgLy8gYSB3ZWlyZCBzdGF0ZTogc29tZSBwYXJ0cyBvZiBpdCB3aWxsIGJl
IGxlZnQgdW5pbml0aWFsaXplZCwgd2hpY2ggd2Ugd2lsbCBmaWxsIGluIGhlcmUuCiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2Vy
KHRoaXMpOwogICAgIAogICAgIGlmIChtb3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRleEJpYXMg
Pj0gY291bnQpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5i
dXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOwogICAgICAgICBzdG9yYWdl
ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgLT0gY291bnQ7CiAgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JM
ZW5ndGggKyBjb3VudCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIH0gZWxzZSBpZiAo
IW1vdmVGcm9udCAmJiB2ZWN0b3JMZW5ndGggLSBsZW5ndGggPj0gY291bnQpCiAgICAgICAgIHN0
b3JhZ2UgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSBp
ZiAodW5zaGlmdENvdW50U2xvd0Nhc2Uodm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291bnQpKQpA
QCAtMTA5MCw2ICsxMDk0LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAg
IHZlY3RvcltpICsgc3RhcnRJbmRleF0uY2xlYXIoKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9u
IDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDAsOCArMTAwLDMyIEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJveHko
KSBjb25zdDsKICAgICBib29sIGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OwogICAg
IGJvb2wgaXNBUElWYWx1ZVdyYXBwZXIoKSBjb25zdDsKKyAgICAKKyAgICAvLyBFYWNoIGNlbGwg
aGFzIGEgYnVpbHQtaW4gbG9jay4gQ3VycmVudGx5IGl0J3Mgc2ltcGx5IGF2YWlsYWJsZSBmb3Ig
dXNlIGlmIHlvdSBuZWVkIGl0LiBJdCdzCisgICAgLy8gYSBmdWxsLWJsb3duIFdURjo6TG9jay4g
Tm90ZSB0aGF0IHRoaXMgbG9jayBpcyBjdXJyZW50bHkgdXNlZCBpbiBKU0FycmF5IGFuZCB0aGF0
IGxvY2sncworICAgIC8vIG9yZGVyaW5nIHdpdGggdGhlIFN0cnVjdHVyZSBsb2NrIGlzIHRoYXQg
dGhlIFN0cnVjdHVyZSBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QuCisgICAgdm9pZCBsb2Nr
SW50ZXJuYWxMb2NrKCk7CisgICAgdm9pZCB1bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAKKyAg
ICBjbGFzcyBJbnRlcm5hbExvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICBJbnRlcm5hbExv
Y2tlcihKU0NlbGwqIGNlbGwpCisgICAgICAgICAgICA6IG1fY2VsbChjZWxsKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2NlbGwtPmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgfkludGVybmFsTG9ja2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9jZWxsLT51bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBKU0NlbGwqIG1fY2VsbDsKKyAgICB9OwogCiAgICAgSlNUeXBlIHR5
cGUoKSBjb25zdDsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0
OwogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVJ
RCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0OwpAQCAtMTY3LDYgKzE5MSwxNiBAQCBwdWJsaWM6CiAg
ICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CiAg
ICAgCiAgICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3Rf
Y2FzdDxKU0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisgICAgYm9v
bCBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3RhdGUgb2xk
U3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0
b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5l
d1N0YXRlKTsKKyAgICB9CisKKyAgICBDZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2Vs
bFN0YXRlU3Ryb25nKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKCZtX2Nl
bGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlm
Zl90IHN0cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkBAIC0xODMsOSArMjE3LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fdHlwZSk7CiAgICAg
fQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIC8vIERP
IE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgdXNlIGEgQ0FTIGxvb3AsIHNpbmNlIHNv
bWUgYml0cyBhcmUgZmxpcHBlZCB1c2luZyBDQVMKKyAgICAvLyBmcm9tIG90aGVyIHRocmVhZHMg
ZHVlIHRvIHRoZSBpbnRlcm5hbCBsb2NrLiBPbmUgZXhjZXB0aW9uOiB5b3UgZG9uJ3QgbmVlZCB0
aGUgQ0FTIGlmIHRoZQorICAgIC8vIG9iamVjdCBoYXMgbm90IGVzY2FwZWQgeWV0LgorICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpCiAgICAgewotICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGUpOworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNlbGxTdGF0ZU9mZnNldCgpCkBAIC0yMjgs
NyArMjY1LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwogCiAgICAgU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKLSAgICBJbmRleGluZ1R5cGUg
bV9pbmRleGluZ1R5cGU7CisgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsg
Ly8gRE8gTk9UIHN0b3JlIHRvIHRoaXMgZmllbGQuIEFsd2F5cyBDQVMuCiAgICAgSlNUeXBlIG1f
dHlwZTsKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIG1fZmxhZ3M7CiAgICAgQ2VsbFN0
YXRlIG1fY2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
ZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFQKIAogaW5saW5lIEpT
Q2VsbDo6SlNDZWxsKFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBtX3N0cnVjdHVy
ZUlEKHN0cnVjdHVyZS0+aWQoKSkKLSAgICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpCisgICAgLCBtX2luZGV4aW5nVHlwZUFuZE1pc2Moc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3R5cGUoc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSkKICAgICAsIG1fZmxhZ3Moc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpKQogICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKQEAg
LTc0LDcgKzc0LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgog
ICAgIGlmIChzdHJ1Y3R1cmUpIHsKICNlbmRpZgogICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3Ry
dWN0dXJlLT5pZCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCk7CisgICAgICAgIG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUt
PnR5cGVJbmZvKCkudHlwZSgpOwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5m
bygpLmlubGluZVR5cGVGbGFncygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEs
OSArOTEsMTQgQEAgaW5saW5lIEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVy
biBtX3R5cGU7CiB9CiAKK2lubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQor
CiBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9pbmRleGluZ1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2Mo
KSAmIEFsbEFycmF5VHlwZXM7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0
dXJlKCkgY29uc3QKQEAgLTE5NSwxNyArMjAwLDI3IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNB
UElWYWx1ZVdyYXBwZXIoKSAKICAgICByZXR1cm4gbV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5
cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5j
bGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VS
VCghdGhpcy0+c3RydWN0dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6
aGVhcCh0aGlzKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0
cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUt
PmlkKCk7CiAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKTsKICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwotICAgIG1f
aW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5
cGUgbmV3SW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KCk7CisgICAgaWYgKG1faW5kZXhpbmdUeXBlQW5kTWlzYyAhPSBuZXdJbmRleGluZ1R5cGUp
IHsKKyAgICAgICAgQVNTRVJUKCEobmV3SW5kZXhpbmdUeXBlICYgfkFsbEFycmF5VHlwZXNBbmRI
aXN0b3J5KSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBv
bGRWYWx1ZSA9IG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKKyAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBuZXdWYWx1ZSA9IChvbGRWYWx1ZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkgfCBzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmIChX
VEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2luZGV4aW5nVHlwZUFuZE1p
c2MsIG9sZFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0K
IAogaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QK
QEAgLTI4NCwxMSArMjk5LDI2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3Io
Vk0mIHYKICAgICBpZiAoaXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChz
dHJ1Y3R1cmVJRCgpKTsKLSAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0lt
bW9ydGFsKQotICAgICAgICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUu
ZGVzdHJveSh0aGlzKTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3Ry
dWN0dXJlSXNJbW1vcnRhbCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlv
blB0ciBkZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBk
ZXN0cm95KHRoaXMpOworICAgIH0gZWxzZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVP
YmplY3QqPih0aGlzKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAg
ICAgemFwKCk7CiB9CiAKK2lubGluZSB2b2lkIEpTQ2VsbDo6bG9ja0ludGVybmFsTG9jaygpCit7
CisgICAgQXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPElu
ZGV4aW5nVHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVM
b2NrQWxnb3JpdGhtOjpsb2NrKCpsb2NrKTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxv
Y2tJbnRlcm5hbExvY2soKQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0
d2lzZV9jYXN0PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7
CisgICAgSW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxNyArMTEyLDI4IEBAIEFM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAKICAgICAvLyBNYXJr
IHRoZSBwcm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZs
eS0+cHJvcGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIAot
ICAgIC8vIE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgIHN3aXRjaCAodGhpcy0+
aW5kZXhpbmdUeXBlKCkpIHsKKworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBzd2l0Y2ggKG9sZFR5cGUpIHsKICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hp
ZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkpOwotICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+bV9zcGFyc2VNYXApOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJ
TkdfVFlQRVM6IHsKKyAgICAgICAgLy8gVGhpcyBsb2NrIGlzIGhlcmUgdG8gcHJvdGVjdCBDb250
aWd1b3VzLT5BcnJheVN0b3JhZ2UgdHJhbnNpdGlvbnMsIGJ1dCB3ZSBjb3VsZCBtYWtlIHRoYXQK
KyAgICAgICAgLy8gcmFjZSB3b3JrIGlmIHdlIG5lZWRlZCB0by4KKyAgICAgICAgSlNDZWxsOjpJ
bnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CisgICAgICAgIEluZGV4aW5nVHlwZSBuZXdUeXBl
ID0gdGhpcy0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRl
cmZseSgpOworICAgICAgICBzd2l0Y2ggKG5ld1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNM
ZW5ndGgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gQUxMX0FS
UkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVMKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZh
dWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDYsMTAgKzE1NywzNCBAQCB2b2lkIEpT
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQot
ICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKLQorICAgIC8vIFdlIHdhbnQgdG8g
ZGVmZW5kIGFnYWluc3QgbXVsdGlwbGUgcG9zc2libGUgcmFjZXMgd2l0aCB0aGUgbXV0YXRvcjoK
KyAgICAvLyAtIE11dGF0b3IgY291bGQgaW5zdGFsbCBhIGJpZ2dlciBidXR0ZXJmbHkgYW5kIHRo
ZW4gaW5zdGFsbCBhIHN0cnVjdHVyZSB0aGF0IGNsYWltcyBtb3JlCisgICAgLy8gICBwcm9wZXJ0
aWVzLiBUaGlzIHRyaXZpYWxseSB3b3Jrcy4KKyAgICAvLyAtIE11dGF0b3IgY291bGQgbXV0YXRl
IHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gSGVuY2UsIHdlIGhvbGQgdGhlIHN0cnVjdHVyZSBs
b2NrIGZvcgorICAgIC8vICAgZGljdGlvbmFyeSBzdHJ1Y3R1cmVzLgorICAgIC8vIC0gVGhlIGJ1
dHRlcmZseSBjb3VsZCBzaHJpbmssIGJ1dCB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBv
YmplY3Qgd2FzIGEgZGljdGlvbmFyeS4KKyAgICAvLyAgIFVzdWFsbHksIHRoaXMgbWVhbnMgdGhh
dCB3ZSB3b3VsZCBnZXQgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlIGFuZCBhY3F1aXJlIGEgbG9j
ay4gVGhhdAorICAgIC8vICAgdHJpdmlhbGx5IHdvcmtzLiBCdXQgd2UgY291bGQgbG9hZCB0aGUg
c3RydWN0dXJlIGJlZm9yZSB0aGUgb2JqZWN0IGJlY2FtZSBhIGRpY3Rpb25hcnkKKyAgICAvLyAg
IGFuZCB0aGVuIGxvYWQgdGhlIGJ1dHRlcmZseSB0aGF0IHdhcyBzaHJ1bmsuIFdlIHByb3RlY3Qg
YWdhaW5zdCB0aGlzIGNhc2UgYnkgY2hlY2tpbmcKKyAgICAvLyAgIHRoZSBzdHJ1Y3R1cmUgYSBz
ZWNvbmQgdGltZSBiZWZvcmUgc2Nhbm5pbmcgdGhlIGJ1dHRlcmZseS4gVGhpcyBtZWFucyB0aGF0
IHRoZSBidXR0ZXJmbHkKKyAgICAvLyAgIGlzIGF0IHdvcnN0IHRoZSBidXR0ZXJmbHkgdGhhdCB0
aGUgbXV0YXRvciBoYWQgaW5zdGFsbGVkIGp1c3QgcHJpb3IgdG8gZmxpcHBpbmcgdGhlCisgICAg
Ly8gICBzdHVyY3R1cmUuIFNvIGlmIHRoZSBzdHJ1Y3R1cmUgd2Ugc2VlIGlzIGEgbm9uLWRpY3Rp
b25hcnkgdGhlbiB0aGUgYnV0dGVyZmx5IGNhbm5vdCB5ZXQKKyAgICAvLyAgIGhhdmUgYmVlbiBz
aHJ1bmsuCisgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkg
PSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KSB7Cisg
ICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7
CisgICAgICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpID09IHN0cnVjdHVyZS0+aWQo
KSkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgc3RydWN0dXJlKTsKKyAgICB9CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAg
IHN0cnVjdHVyZS0+bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtMjA0LDE1ICsyMzksMjUg
QEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7Ci0gICAg
QnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAgICBpZiAo
YnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBi
dXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29s
IHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNE
aWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgZWxzZQor
ICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aWQoKSA9PSB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmVJRCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwg
YnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9
IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgpOwogICAgIGlmIChzdG9yYWdlU2l6ZSkKICAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBz
dG9yYWdlU2l6ZSk7Ci0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJl
LT5sb2NrKCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0
b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC02NjYsNyArNzExLDggQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwotICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAKICAg
ICByZXR1cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIH0KQEAgLTczMSw3ICs3Nzcs
OSBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRl
SW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJm
bHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3
QnV0dGVyZmx5OwogfQogCkBAIC03NDIsNyArNzkwLDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpT
T2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+
dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0lu
dDMyKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCkBAIC03NTMsNyArODAzLDkg
QEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5z
aWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5l
d0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJu
IG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC03NjQsNyArODE2LDkg
QEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5z
aWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5l
d0J1dHRlcmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1
ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFs
bG9jYXRlQ29udGlndW91cyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdT
dHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBu
ZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0K
IApAQCAtNzk3LDcgKzg1MSw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5
U3RvcmEKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFnZUJ1
dHRlcmZseSh2bSwgdGhpcywgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwgbV9idXR0
ZXJmbHkuZ2V0KCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVk
QXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODgwLDcg
KzkzNiw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICAg
ICAgc3RvcmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkp
OwogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIHN0
b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIHN0b3JhZ2U7CiB9CiAKQEAgLTkzNSw3ICs5OTMsOSBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZs
eSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5l
d1N0b3JhZ2U7CiB9CiAKQEAgLTk4MSw3ICsxMDQxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydERvdWJsZVRvQQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVj
dHVyZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwog
fQogCkBAIC0xMDA2LDcgKzEwNjgsMjIgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dENvbnRpZ3VvdQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0
aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworCisgICAgLy8gVGhpcyBoYXMgYSBjcmF6eSByYWNlIHdp
dGggdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBXaGVuIGNoYW5naW5nIHRoZSBidXR0ZXJmbHkgYW5k
IHN0cnVjdHVyZSwKKyAgICAvLyB0aGUgbXV0YXRvciBhbHdheXMgc2V0cyB0aGUgc3RydWN0dXJl
IGxhc3QuIFRoZSBjb2xsZWN0b3Igd2lsbCBhbHdheXMgcmVhZCB0aGUgc3RydWN0dXJlCisgICAg
Ly8gZmlyc3QuIFdlIHByb2JhYmx5IGhhdmUgdG8gZm9sbG93IHRoYXQgY29udmVudGlvbiBoZXJl
IGFzIHdlbGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yCisgICAgLy8gd2lsbCBzb21l
dGltZXMgc2VlIHRoZSBuZXcgYnV0dGVyZmx5ICh0aGUgb25lIHdpdGggQXJyYXlTdG9yYWdlKSB3
aXRoIHRoZSBvbmx5IHN0cnVjdHVyZSAodGhlCisgICAgLy8gb25lIHRoYXQgc2F5cyB0aGF0IHRo
ZSBidXR0ZXJmbHkgaXMgQ29udGlndW91cykuIFdoZW4gc2Nhbm5pbmcgQ29udGlndW91cywgdGhl
IGNvbGxlY3RvciB3aWxsCisgICAgLy8gbWFyayB3b3JkIGF0IGFkZHJlc3NlcyBncmVhdGVyIHRo
YW4gb3IgZXF1YWwgdG8gdGhlIGJ1dHRlcmZseSBwb2ludGVyLCB1cCB0byB0aGUgcHVibGljTGVu
Z3RoCisgICAgLy8gaW4gdGhlIGJ1dHRlcmZseS4gQnV0IGFuIEFycmF5U3RvcmFnZSBoYXMgc29t
ZSBub24tcG9pbnRlciBoZWFkZXIgZGF0YSBhdCBsb3cgcG9zaXRpdmUKKyAgICAvLyBvZmZzZXRz
IGZyb20gdGhlIGJ1dHRlcmZseSAtIHNvIHdoZW4gdGhpcyByYWNlIGhhcHBlbnMsIHRoZSBjb2xs
ZWN0b3Igd2lsbCBzdXJlbHkgY3Jhc2gKKyAgICAvLyBiZWNhdXNlIGl0IHdpbGwgZmFpbCB0byBk
ZWNvZGUgdHdvIGNvbnNlY3V0aXZlIGludDMycyBhcyBpZiBpdCB3YXMgYSBKU1ZhbHVlLgorICAg
IC8vCisgICAgLy8gRm9ydHVuYXRlbHksIHdlIGhhdmUgdGhlIEpTQ2VsbCBsb2NrIGZvciB0aGlz
IHB1cnBvc2UhCisgICAgCisgICAgSW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVy
ZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2
OCw3ICsxNTQ1LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQog
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVy
ZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFBy
b3BlcnR5T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0
LT5zZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAKQEAgLTIwMTksNyArMjA5Niw3
IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKIAogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+
bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKLQorICAgIAogICAg
IC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Q
cm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAg
IFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBp
bmRleCk7CiAgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOwpAQCAtMjcyNSw3ICsyODAyLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VW
ZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAgICAg
ICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAt
Mjc0Miw3ICsyODIwLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0m
IAogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVh
cigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5k
ZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjc2Miw2ICsyODQxLDcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhW
TSYgdm0sIAogICAgIAogICAgIHVuc2lnbmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAgICAg
IEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFj
aXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbnVs
bHB0cjsKICAgICBpZiAoYXZhaWxhYmxlT2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAv
LyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBs
ZW5ndGggdGhhdCBjYXVzZWQgaW50ZXJuYWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYg
d2UgZGlkIG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0
IHdlIHdpbGwgbWVzcwpAQCAtMjc3NiwxNyArMjg1NiwyNCBAQCBib29sIEpTT2JqZWN0OjplbnN1
cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVy
Zmx5KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1
dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFz
RG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRW
ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZs
eS0+aW5kZXhpbmdQYXlsb2FkPGRvdWJsZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigp
OworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVu
a25vd24+PigpW2ldLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKG5ld0J1dHRlcmZseSkgewor
ICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0s
IHRoaXMsIG5ld0J1dHRlcmZseSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9y
TGVuZ3RoKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MDIsMTIgKzI4ODksMTMg
QEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogCiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlT
dG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywg
bmV3QnV0dGVyZmx5KTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgp
OwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRl
cmZseSk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZN
JiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVj
dDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCkBAIC0z
MDkyLDE1ICszMTgwLDM0IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0m
IHYKICAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9p
ZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBzaXplX3Qg
b3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQor
dm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVf
dCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0g
dGhpcy0+YnV0dGVyZmx5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gdGhpcy0+YnV0dGVy
Zmx5UHJlQ2FwYWNpdHkoKTsKLSAgICB2b2lkKiBjdXJyZW50QmFzZSA9IGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7Ci0gICAgdm9pZCogbmV3QmFz
ZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUp
OworICAgIC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29t
ZSBvbGQgc3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5vbgorICAgIC8vIGRpY3Rpb25hcnkg
c3RydWN0dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJh
bnRlZWQgdG8gYmUgaG9sZGluZworICAgIC8vIHRoZSBzdHJ1Y3R1cmUncyBsb2NrIHJpZ2h0IG5v
dywgYW5kIHRoYXQgaGVscHMgYSBiaXQuCisgICAgCisgICAgQnV0dGVyZmx5KiBvbGRCdXR0ZXJm
bHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6
ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFk
ZXIgPSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRl
eGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4
aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzID0gb2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBy
ZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOwor
ICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVV
bmluaXRpYWxpemVkKHZtLCB0aGlzLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
ciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAg
IG1lbW1vdmUobmV3QmFzZSwgY3VycmVudEJhc2UsIHRoaXMtPmJ1dHRlcmZseVRvdGFsU2l6ZSgp
KTsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIEJ1dHRlcmZs
eTo6ZnJvbUJhc2UobmV3QmFzZSwgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIp
KTsKKyAgICAvLyBObyBuZWVkIHRvIGNvcHkgdGhlIHByZWNhcGFjaXR5LgorICAgIHZvaWQqIGN1
cnJlbnRCYXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIp
OworICAgIHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2Fw
YWNpdHlBZnRlcik7CisKKyAgICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVy
LCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50
MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAg
ICBib29sIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVy
dGllcyhFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jv
d091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwot
ICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVy
Zmx5Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRP
ZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAg
ICAgCisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNo
YW5nZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZv
aWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rp
b25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5
QWZ0ZXJGbGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXpl
X3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVy
RmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0CiAgICAgewpAQCAtOTkwLDkgKzk4OSw5
IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0
SW5saW5lU2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogCiAgICAgYm9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwor
ICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmls
bEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJv
cGVydHlPZmZzZXQpOwotICAgIHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CisgICAgdm9pZCBmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVk
LCBTdHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duU3RhdGlj
UHJvcGVydHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBjb25zdCBIYXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5
KFByb3BlcnR5TmFtZSkgY29uc3Q7CkBAIC0xMjA1LDE0ICsxMjA0LDYgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OmlzV2l0aFNjb3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNj
b3BlVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
LXsKLSAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hl
YWRlcih0aGlzKSkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsK
LSAgICBzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKTsKQEAgLTEyMjAsNyArMTIxMSw3IEBAIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpzZXRTdHJ1Y3R1cmUoVk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRD
aGFuZ2luZ1N0cnVjdHVyZShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZv
aWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQog
ewogICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTEyNzMs
MTYgKzEyNjQsMTYgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlwZShWTQog
CiAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIFByb3BlcnR5TmFtZSB0
aGF0IGlzIGFjdHVhbGx5IGFuIGluZGV4LAogLy8gYnV0IGlmIHNvIHdpbGwgYWx3YXlzIHJldHVy
biBmYWxzZSAoZG9lc24ndCBzZWFyY2ggaW5kZXggc3RvcmFnZSkuCi1BTFdBWVNfSU5MSU5FIGJv
b2wgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiB2bSwgU3RydWN0dXJl
JiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNs
b3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewogICAgICAgICBpZiAoIVR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKGlu
bGluZVR5cGVGbGFncygpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0
dXJuIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdCh2bSwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICB9Ci0KKyAgICAKICAgICAvLyBnZXRQcm9wZXJ0eVNsb3QgcmVsaWVzIG9uIHRoaXMgbWV0aG9k
IG5ldmVyIHJldHVybmluZyBpbmRleCBwcm9wZXJ0aWVzIQogICAgIEFTU0VSVCghcGFyc2VJbmRl
eChwcm9wZXJ0eU5hbWUpKTsKIApAQCAtMTMwNyw5ICsxMjk4LDkgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbgogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVy
dHlTbG90JiBzbG90LCBKU1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmli
dXRlcywgU3RydWN0dXJlJiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6
OmZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVl
IGN1c3RvbUdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7
CisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewogICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzLCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0
dGVyKj4oY3VzdG9tR2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTMyNSw3ICsxMzE2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpm
aWxsQ3VzdG9tRwogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKG9i
amVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKQEAgLTEzNTMsMTAgKzEzNDQs
MTAgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICAg
ICAgcmV0dXJuIG9iamVjdC0+Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQob2JqZWN0LT50eXBlKCkgIT0g
UHJveHlPYmplY3RUeXBlKTsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0
dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkp
OwogICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOwor
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7
CiAgICAgICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKQEAgLTE0MTcsMTYgKzE0MDgs
MjEgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAg
ICAgaWYgKHRoaXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkK
LSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlz
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0g
dGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgdGhpcy0+c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CisgICAgICAgIHVuc2lnbmVkIG9s
ZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAg
ICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisg
ICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgWyZd
IChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KSB7CisgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFjaXR5
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHko
dm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zm
c2V0KTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCiAgICAgICAgICAgICB0aGlzLT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKQEAgLTE0NDUsMTMgKzE0NDEsMTUgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2Nh
dGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAg
fQogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVChuZXdT
dHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFu
ZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0
cnVjdHVyZSk7CiAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ5OCwxMyArMTQ5NiwxMyBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgc2l6ZV90IG9sZENhcGFjaXR5
ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBBU1NFUlQob2xkQ2Fw
YWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0
eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwotICAgIGVsc2Ugewot
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBpZiAob2xkQ2FwYWNp
dHkgIT0gbmV3Q2FwYWNpdHkpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBh
bGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHko
dm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfQogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHNsb3Quc2V0TmV3
UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQog
ICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CkBA
IC0xNTQ5LDI0ICsxNTQ3LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYg
dm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVy
dHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAotaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5p
c0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1f
YnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxp
bmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdl
KHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dl
c3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBzdHJ1
Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91bGRP
cHRpbWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFu
c2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogQUxXQVlTX0lOTElORSBKU09iamVj
dCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFzT2JqZWN0KGpzVmFs
dWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dElubGluZXMuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMyArMTA3LDEz
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICBKU09iamVj
dCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25Q
dHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURU
YWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS5j
bGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
ICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJl
LmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3Rv
dHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0
dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUt
PnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlw
ZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEzNSwxOCArMTM1LDE4IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICBKU09iamVjdCogb2JqZWN0ID0g
dGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdl
dFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2Jq
ZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoTElL
RUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KG9iamVjdC0+aW5saW5l
VHlwZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhl
YywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQog
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUu
Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90
eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1
cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5jbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUg
fHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMTU3LDYgKzE1NywzMCBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0
dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlz
Q3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0
ZXJmbHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUo
dm0pOworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZd
IChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9s
ZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2Nh
dGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsK
KyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICB9KTsKK30KKwogLy8gRUNNQSA4LjYuMi4yCiBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRlZiBjb25zdCBj
aGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVTdGFjaywgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlvbmFsR0MsIHRy
dWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEJhcnJpZXJz
LCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRHQywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENvbnRpbnVvdXNs
eSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VGZW5jZWRCYXJy
aWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3JpYmJsZUZyZWVD
ZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBzaXplQ2xhc3NQ
cm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHJldmlzaW9u
IDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFs
dWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgU3BhcnNlQXJy
YXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKIH07CiAK
Ky8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0LgogY2xhc3MgU3BhcnNl
QXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgogICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSw2IEBACiAK
ICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNpZm5kZWYgTkRFQlVH
Ci0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxzZQotI2RlZmlu
ZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSArMTU3LDkgQEAgdm9p
ZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgeworICAg
ICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGVP
ck51bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBzOwotICAgICAg
ICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgp
LT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSB0
YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwNiw3ICszMDAs
NyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgZm9yIChz
dHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKICAgICAgICAgCi0g
ICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7CisgICAgICAg
IHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAgICAgICAgIGlmICh0
YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2NrZWQsIHNvIHRo
YXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAgICAgICAgICAg
IC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zMjEsMzAgKzMxNSwz
MSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAgICAgQVNTRVJU
KCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZN
JiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxl
KFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7
Ci0KKyAgICAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCiAgICAgVmVjdG9y
PFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAg
ICAgUHJvcGVydHlUYWJsZSogdGFibGU7CiAgICAgCiAgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBG
b3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7CiAgICAgCisg
ICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNl
dCwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0g
dGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lu
bGluZUNhcGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIGNhcGFjaXR5
KTsKICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQorICAgIH0gZWxz
ZQorICAgICAgICB0YWJsZSA9IFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgY2FwYWNpdHkpOwog
ICAgIAogICAgIC8vIE11c3QgaG9sZCB0aGUgbG9jayBvbiB0aGlzIHN0cnVjdHVyZSwgc2luY2Ug
d2Ugd2lsbCBiZSBtb2RpZnlpbmcgdGhpcyBzdHJ1Y3R1cmUncwogICAgIC8vIHByb3BlcnR5IG1h
cC4gV2UgZG9uJ3Qgd2FudCBnZXRDb25jdXJyZW50bHkoKSB0byBzZWUgdGhlIHByb3BlcnR5IG1h
cCBpbiBhIGhhbGYtYmFrZWQKICAgICAvLyBzdGF0ZS4KICAgICBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIGlmICghdGFibGUpCi0gICAgICAg
IGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0
KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7Ci0gICAgZWxzZQotICAgICAgICBwcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgaWYgKHNldFByb3BlcnR5VGFibGUp
CisgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKIAogICAgIEluZmVy
cmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdldCgpOwogCkBA
IC0zNTUsMTAgKzM1MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cChWCiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblBy
ZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJ
blByZXZpb3VzKCkpOwogICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJsZS0+Z2V0KHN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCiAgICAgICAgICAgICBlbnRyeS5oYXNJ
bmZlcnJlZFR5cGUgPSB0cnVlOwotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwg
bV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7Cisg
ICAgICAgIHRhYmxlLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKICAgICBjaGVja09mZnNldENvbnNp
c3RlbmN5KCk7CisgICAgCisgICAgcmV0dXJuIHRhYmxlOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00NzMsNyArNDcwLDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbgogICAgIHRyYW5zaXRpb24tPm1fY2FjaGVk
UHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
Y2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOwogICAgIHRyYW5zaXRpb24tPm1fbmFtZUluUHJl
dmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRl
c0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCh2bSkpOworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVj
dHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0
aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9p
bmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+
bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKQEAgLTUyMSwzNiArNTE4LDMwIEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKIAogICAg
IHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJvdG90eXBlKTsK
LQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAKKyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlv
bi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24tPnBpbigp
OwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAg
IHJldHVybiB0cmFuc2l0aW9uOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRl
Q2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7Ci0KLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOworICAgICAgICAKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5t
X29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbigp
OwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsKICAgICB9CiAKLSAg
ICBBU1NFUlQoc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpOwotICAgIFByb3BlcnR5TWFwRW50
cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUu
dWlkKCkpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5lbnN1cmVQ
cm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVu
dHJ5KTsKICAgICBlbnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAKQEAgLTU2MSwxNyAr
NTUyLDE1IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKIFN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBkZWZlcnJlZCk7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+cGlu
KHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRy
YW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9u
LT5zZXREaWN0aW9uYXJ5S2luZChraW5kKTsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICB0
cmFuc2l0aW9uLT5zZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKLQorICAgIAogICAgIHRyYW5z
aXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsK
IH0KQEAgLTYwMywzMSArNTkyLDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0
ZW5zaW9uc1QKIAogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVy
R0MpOwotICAgIAotICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0
dXJuIHByb3BlcnR5VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAx
KTsKLSAgICAKLSAgICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAt
IHNvIHRoYXQgZ2V0Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQKLSAgICAvLyB3aWxs
IGVpdGhlciBoYXZlIHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNl
IHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgIC8vIGJlZm9yZSBpdCBpcyBzdG9sZW4uCi0gICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtl
blByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgcHJvcGVydHlUYWJs
ZSgpLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsKKyAgICAvLyBUaGlz
IG11c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCByZXR1cm4gbnVs
bC4KKyAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Cisg
ICAgaWYgKHJlc3VsdCkgeworICAgICAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LT5jb3B5KHZtLCByZXN1bHQtPnNpemUoKSArIDEpOwor
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBzZXRQ
cm9wZXJ0eVRhYmxlKHZtLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQogewogICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOwotICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAg
IAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdUeXBlKHRyYW5zaXRpb25LaW5kKSkgewogICAgICAg
ICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+bV9nbG9iYWxP
YmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmlzT3JpZ2luYWxB
cnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBy
ZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5
cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CkBAIC02MzgsNyArNjI1LDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIFN0cnVjdHVyZSogZXhp
c3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiAo
ZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwg
YXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmF0dHJp
YnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmlidXRlcyk7Ci0gICAgICAgIEFTU0VSVChleGlzdGlu
Z1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5
cGUpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAg
IHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNjQ2LDcgKzYzMyw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAgICAKICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNp
dGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgIHRyYW5zaXRpb24t
Pm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlv
bktpbmQpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXREaWRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVl
KTsKQEAgLTY1NywzMiArNjQ0LDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXQKICAgICAgICAgLy8gdGFibGUsIHNpbmNlIG91ciBsb2dpYyBmb3Igd2Fsa2luZyB0
aGUgcHJvcGVydHkgdHJhbnNpdGlvbiBjaGFpbiB0byByZW1hdGVyaWFsaXplIHRoZQogICAgICAg
ICAvLyB0YWJsZSBkb2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBhY2NvdW50IHN1Y2ggd2hv
bGVzYWxlIGVkaXRzLgogICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5w
cm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5n
KHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAg
ICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRy
YW5zaXRpb24tPnBpbkZvckNhY2hpbmcoKTsKICAgICAgICAgCi0gICAgICAgIGlmICh0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAq
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkKLSAgICAgICAg
ICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwotICAgICAgICAgICAg
ICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0cmFuc2l0aW9uS2lu
ZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKQotICAgICAgICAgICAgICAgICAg
ICBlbnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICAgICAgfQorICAgICAgICBQ
cm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogKnRhYmxlKSB7CisgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRp
ZXModHJhbnNpdGlvbktpbmQpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0g
RG9udERlbGV0ZTsKKyAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJv
cGVydGllcyh0cmFuc2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
KQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0
KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlu
bmVkKHZtKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVj
dHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICBjaGVja09m
ZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgfQogICAgIAogICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGll
cyh0cmFuc2l0aW9uS2luZCkKLSAgICAgICAgJiYgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
Ci0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmlzRW1wdHkoKSkKKyAg
ICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKS0+aXNFbXB0eSgpKQog
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
cGluKHZtLCB0cmFuc2l0aW9uLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsK
ICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24p
OwpAQCAtNjk4LDEzICs2ODIsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKFZNJiB2bSkK
ICAgICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQor
ICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHko
dm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBp
dGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYg
KChpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgIT0gRG9udERlbGV0ZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MTcsMTMgKzcwMCwxMiBAQCBib29sIFN0cnVj
dHVyZTo6aXNGcm96ZW4oVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQ
cm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRh
YmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHBy
b3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAorICAg
IFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0
ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpKQpAQCAtNzM2LDIxICs3MTgsMjQgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogewogICAgIGNoZWNrT2Zmc2V0Q29u
c2lzdGVuY3koKTsKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIEdDU2Fm
ZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAKICAgICBzaXpl
X3QgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwog
ICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIEFTU0VSVChwcm9w
ZXJ0eVRhYmxlKCkpOworICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFi
bGVPck51bGwoKTsKKyAgICAgICAgQVNTRVJUKHRhYmxlKTsKIAotICAgICAgICBzaXplX3QgcHJv
cGVydHlDb3VudCA9IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpOworICAgICAgICBzaXplX3QgcHJv
cGVydHlDb3VudCA9IHRhYmxlLT5zaXplKCk7CiAKICAgICAgICAgLy8gSG9sZHMgb3VyIHZhbHVl
cyBjb21wYWN0ZWQgYnkgaW5zZXJ0aW9uIG9yZGVyLgogICAgICAgICBWZWN0b3I8SlNWYWx1ZT4g
dmFsdWVzKHByb3BlcnR5Q291bnQpOwogCiAgICAgICAgIC8vIENvcGllcyBvdXQgb3VyIHZhbHVl
cyBmcm9tIHRoZWlyIGhhc2hlZCBsb2NhdGlvbnMsIGNvbXBhY3RpbmcgcHJvcGVydHkgdGFibGUg
b2Zmc2V0cyBhcyB3ZSBnby4KICAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgICAg
IFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKICAgICAgICAgbV9v
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIs
ICsraSkgeworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJs
ZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAgICAgICB2YWx1
ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwogICAgICAgICAgICAgbV9v
ZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGlu
ZUNhcGFjaXR5KTsKICAgICAgICAgfQpAQCAtNzU5LDcgKzc0NCw3IEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByb3BlcnR5Q291bnQ7IGkrKykKICAgICAgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0KHZt
LCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KSwgdmFsdWVzW2ld
KTsKIAotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKKyAg
ICAgICAgdGFibGUtPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKICAgICAgICAgY2hlY2tPZmZzZXRD
b25zaXN0ZW5jeSgpOwogICAgIH0KIApAQCAtNzY4LDU1ICs3NTMsMzQgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogCiAgICAgc2l6ZV90IGFmdGVyT3V0T2ZMaW5l
Q2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCi0gICAgaWYgKGJlZm9yZU91
dE9mTGluZUNhcGFjaXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICBpZiAob2Jq
ZWN0LT5idXR0ZXJmbHkoKSAmJiBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBhZnRlck91dE9m
TGluZUNhcGFjaXR5KSB7CiAgICAgICAgIEFTU0VSVChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA+
IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhZCBh
IEJ1dHRlcmZseSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdlIG5vIGxvbmdlciBo
YXZlIG5lZWQgb2YgaXQsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gemVybyBpdCBvdXQgYmVjYXVz
ZSB0aGUgY29sbGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVyZSB0byBrbm93IHRoZSBzaXpl
IGZvciBjb3B5aW5nLgotICAgICAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiAhYWZ0ZXJP
dXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKLSAg
ICAgICAgICAgIG9iamVjdC0+c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLCAwKTsK
KyAgICAgICAgaWYgKCFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5oYXNJbmRleGlu
Z0hlYWRlcihvYmplY3QpKQorICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIG51
bGxwdHIpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNpemVkIHRvIHRoZSBw
b2ludCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxvbmdlciB3aXRoaW4g
dGhlIAogICAgICAgICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXplIGJ5dGVzLCB3ZSds
bCBnZXQgdGhlIHdyb25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUgYmFzZSBiYWNrIHRv
IAogICAgICAgICAvLyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2ZW50IHRoaXMgY2Fz
ZSB3ZSBuZWVkIHRvIG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgotICAgICAgICBlbHNlIGlm
IChvYmplY3QtPmJ1dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZs
eUFmdGVyRmxhdHRlbmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFmdGVyT3V0T2ZM
aW5lQ2FwYWNpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0
dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGFmdGVyT3V0T2ZMaW5lQ2Fw
YWNpdHkpOwogICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQ
aW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKLSAgICBwaW4oKTsKLQotICAgIHJldHVybiBhZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAgcGluKCk7Ci0g
ICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiB0aGlzOwogfQogCi12
b2lkIFN0cnVjdHVyZTo6cGluKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oVk0mIHZtLCBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAgICBzZXRJ
c1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFi
bGUpOwogICAgIGNsZWFyUHJldmlvdXNJRCgpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxs
cHRyOwogfQogCi12b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZygpCit2b2lkIFN0cnVjdHVy
ZTo6cGluRm9yQ2FjaGluZyhWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogewotICAgIEFT
U0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVl
KTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgbV9uYW1lSW5QcmV2aW91
cyA9IG51bGxwdHI7CiB9CiAKQEAgLTg5MSwxNyArODU1LDEzIEBAIHZvaWQgU3RydWN0dXJlOjp3
aWxsU3RvcmVWYWx1ZVNsb3coCiAgICAgfQogCiAgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGlmIHdl
J3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFi
bGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRh
YmxlKTsKLQorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0
eVRhYmxlKHZtKTsKKyAgICAKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhpcyBhZnRlciBo
YXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRoYXQgaXQgd2Fz
IHByZXNlbnQKLSAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9wZXJ0eSB0YWJs
ZSBub3cuCi0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOwotCi0gICAgLy8gLi4uIGFuZCB0aGUg
cHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIC8vIGFscmVhZHksIHNvIHRoZSBwcm9wZXJ0
eSBtdXN0IGJlIHByZXNlbnQuCiAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0
eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwotCisg
ICAgCiAgICAgaWYgKHNob3VsZE9wdGltaXplKQogICAgICAgICBlbnRyeS0+aGFzSW5mZXJyZWRU
eXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhZ2Up
OwogICAgIGVsc2UgewpAQCAtOTQzLDE4ICs5MDMsMTIgQEAgUHJvcGVydHlNYXBTdGF0aXN0aWNz
RXhpdExvZ2dlcjo6flByb3BlcgogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCi17Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwg
KnByb3BlcnR5VGFibGUoKS5nZXQoKSk7Ci19Ci0KIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBpZiAocHJvcGVydHlU
YWJsZSgpKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0
eVRhYmxlKCkuZ2V0KCkpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51
bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7Cisg
ICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpKQorICAg
ICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7CisgICAgYm9vbCBz
ZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJvcGVydHlU
YWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6Z2V0Q29uY3VycmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKQpAQCAtOTg5LDcwICs5NDMsMjQgQEAgVmVjdG9yPFByb3BlcnR5TWFwRW50cnk+IFN0
cnVjdHVyZTo6Z2V0UAogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgR0NT
YWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKLSAgICAKLSAg
ICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKLQot
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8
IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nl
c3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0
eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgY3JlYXRl
UHJvcGVydHlNYXAobG9ja2VyLCB2bSk7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQg
PSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7Ci0KLSAgICBw
cm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRy
aWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdl
KTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG5ld09mZnNldDsK
KyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIFtdIChjb25zdCBH
Q1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsK
LQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKLQotICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSBwcm9wZXJ0
eVRhYmxlKCktPmZpbmQocmVwKTsKLSAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQotICAgICAgICBy
ZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHBvc2l0
aW9uLmZpcnN0LT5vZmZzZXQ7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPnJlbW92ZShwb3NpdGlv
bik7Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7Ci0KLSAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotdm9pZCBTdHJ1
Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIm
LCBWTSYgdm0sIHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIEFTU0VSVCghcHJvcGVydHlUYWJs
ZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0
KHZtLCB0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KSk7CisgICAgcmV0
dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwg
UHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5h
bWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVz
LCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAg
ICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3Vy
ZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICBy
ZXR1cm47Ci0KKyAgICAKICAgICBib29sIGtub3duVW5pcXVlID0gcHJvcGVydHlOYW1lcy5jYW5B
ZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+
ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJv
cGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhKGl0ZXItPmF0dHJpYnV0ZXMg
JiBEb250RW51bSkpOwogICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93
ZWRGb3JFbnVtZXJhdGlvbigpIHx8ICFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwogICAgICAgICBp
ZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUuaW5jbHVkZURvbnRFbnVt
UHJvcGVydGllcygpKSB7CkBAIC0xMTE0LDYgKzEwMjIsOSBAQCB2b2lkIFN0cnVjdHVyZTo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmpl
Y3QtPm1fbG9jayk7CisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZ2xv
YmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkpCiAgICAgICAgIHRo
aXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKQEAgLTEyNzYsOTIgKzEx
ODcsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTCiAgICAgb3V0
LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwogfQogCi0jaWYgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZ
X0NIRUNLCi0KLXZvaWQgUHJvcGVydHlUYWJsZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAg
QVNTRVJUKG1faW5kZXhTaXplID49IFByb3BlcnR5VGFibGU6Ok1pbmltdW1UYWJsZVNpemUpOwot
ICAgIEFTU0VSVChtX2luZGV4TWFzayk7Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID09IG1faW5k
ZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJUKCEobV9pbmRleFNpemUgJiBtX2luZGV4TWFzaykpOwot
Ci0gICAgQVNTRVJUKG1fa2V5Q291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQo
bV9rZXlDb3VudCArIG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNT
RVJUKG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gNCk7Ci0KLSAgICB1bnNpZ25lZCBp
bmRleENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX2luZGV4U2l6ZTsgKythKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGVudHJ5SW5kZXggPSBtX2luZGV4W2FdOwotICAgICAgICBpZiAoZW50cnlJbmRleCA9
PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZEVudHJ5SW5kZXgoKSkgewotICAgICAg
ICAgICAgKytkZWxldGVkSW5kZXhDb3VudDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IDwgZGVsZXRlZEVudHJ5SW5kZXgoKSk7Ci0g
ICAgICAgIEFTU0VSVChlbnRyeUluZGV4IC0gMSA8PSB1c2VkQ291bnQoKSk7Ci0gICAgICAgICsr
aW5kZXhDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGIgPSBhICsgMTsgYiAhPSBtX2lu
ZGV4U2l6ZTsgKytiKQotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhbYl0gIT0gZW50cnlJbmRl
eCk7Ci0gICAgfQotICAgIEFTU0VSVChpbmRleENvdW50ID09IG1fa2V5Q291bnQpOwotICAgIEFT
U0VSVChkZWxldGVkSW5kZXhDb3VudCA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0KLSAgICBBU1NFUlQo
IXRhYmxlKClbZGVsZXRlZEVudHJ5SW5kZXgoKSAtIDFdLmtleSk7Ci0KLSAgICB1bnNpZ25lZCBu
b25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9IDA7IGMgPCB1c2Vk
Q291bnQoKTsgKytjKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IHRhYmxlKClbY10ua2V5
OwotICAgICAgICBpZiAocmVwID09IFBST1BFUlRZX01BUF9ERUxFVEVEX0VOVFJZX0tFWSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICArK25vbkVtcHR5RW50cnlDb3VudDsKLSAgICAg
ICAgdW5zaWduZWQgaSA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCk7Ci0gICAgICAgIHVu
c2lnbmVkIGsgPSAwOwotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4OwotICAgICAgICB3aGls
ZSAoMSkgewotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1faW5kZXhbaSAmIG1faW5kZXhNYXNr
XTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRyeUluZGV4ICE9IFByb3BlcnR5VGFibGU6OkVtcHR5
RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVwID09IHRhYmxlKClbZW50cnlJbmRleCAt
IDFdLmtleSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChrID09IDAp
Ci0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKElkZW50aWZpZXJSZXBIYXNoOjpo
YXNoKHJlcCkpOwotICAgICAgICAgICAgaSArPSBrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VS
VChlbnRyeUluZGV4ID09IGMgKyAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobm9uRW1wdHlFbnRy
eUNvdW50ID09IG1fa2V5Q291bnQpOwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0
ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc1F1aWNrUHJvcGVydHlB
Y2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgICAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGl0ZXItPmF0dHJpYnV0ZXMg
JiBEb250RW51bSkpOwotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5rZXktPmlzU3ltYm9sKCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5jaGVja0NvbnNpc3Rl
bmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0
ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotfQotCi0jZW5kaWYgLy8g
RE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KIGJvb2wgQ2xhc3NJbmZvOjpoYXNTdGF0
aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBD
bGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNzKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjA4NTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MywxNyArMTgzLDIwIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGlzU2VhbGVkKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0Zyb3pl
bihWTSYpOwogICAgIGJvb2wgaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkgY29uc3QgeyByZXR1cm4g
IWRpZFByZXZlbnRFeHRlbnNpb25zKCk7IH0KLSAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5l
U3RvcmFnZSgpOwotICAgIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNp
dHkoKTsgCiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGZsYXR0ZW5EaWN0aW9u
YXJ5U3RydWN0dXJlKFZNJiwgSlNPYmplY3QqKTsKIAogICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsK
KyAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uIFZlcnNpb25zIHRoYXQg
dGFrZSBhIGZ1bmMgd2lsbCBjYWxsIGl0IGFmdGVyIG1ha2luZyB0aGUKKyAgICAvLyBjaGFuZ2Ug
YnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2suIFRoZSBjYWxsYmFjayBpcyBub3QgY2Fs
bGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5nZQorICAgIC8vIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91
IGNhbGwgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkg
aXMgbm90CisgICAgLy8gZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQ
cm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJv
dG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlz
RGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rp
b25hcnlLaW5kOyB9CkBAIC0yMjksOCArMjMyLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5
cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAg
Ym9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQog
Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5p
bmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5
cGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQor
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAK
ICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAt
NDMzLDkgKzQzNiw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5n
VHlwZU9mZnNldCgpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwg
bV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9m
ZnNldCgpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVV
bnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0
aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1
cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTYzMyw0NCArNjM4LDQ1IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3Bl
cnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJv
cGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBj
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAg
Ly8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBETyBOT1QgY2FsbCB3aGVuIGhvbGRp
bmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVy
dHlUYWJsZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwot
ICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUq
IHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwog
ICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KFZNJiB2bSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMg
bWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRE8gTk9UIGNhbGwgd2hlbiBob2xkaW5nIHRoZSBT
dHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUo
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAg
ICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHBy
b3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkp
IHsKLSAgICAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1h
dGVyaWFsaXplUHJvcGVydHlNYXAodm0pOwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRh
YmxlKCkuZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3Vs
dCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0K
LSAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0m
IHZtLCBEZWZlckdDJikKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JO
dWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpKTsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAg
ICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXAodm0pOworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIHdpbGwgZ3JhYiB0aGUgbG9jay4gRE8gTk9UIGNhbGwgd2hl
biBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b3BlcnR5VGFibGUqIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVy
dHlUYWJsZSA9IHRydWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0s
IFByb3BlcnR5VGFibGUqIHRhYmxlKTsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMyw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4q
IGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAg
Ci0gICAgdm9pZCBwaW4oKTsKLSAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHBpbihWTSYsIFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZv
ckNhY2hpbmcoVk0mLCBQcm9wZXJ0eVRhYmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRh
KEpTQ2VsbCogY2VsbCkgY29uc3QKICAgICB7CkBAIC03MTAsNyArNzE2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAg
fQotICAgICAgICAKKwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0Owog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03
NDAsNyArNzQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBt
X3RyYW5zaXRpb25UYWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHBy
b3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0
aHJlYWQuCisgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlU
YWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4K
ICAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0
YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJs
ZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0g
MHhiYmFkYmVlZjsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbykKKyAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8pCiAgICAgewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlE
OwotICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAg
IHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwog
ICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxh
Z3MoKTsKICAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3
V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91Ymxl
V29yZDsgfQogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1
cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJ
bmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGlu
Z1R5cGUgPSBpbmRleGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7
IH0KICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAg
ICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0
dXJuIHUuZmllbGRzLmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2Is
IHUuZmllbGRzLnN0cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlu
ZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAg
ICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7
CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsK
ICAgICAgICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24g
MjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3Bl
cnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9w
ZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICgh
cHJvcGVydHlUYWJsZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwz
MSArMjE4LDYgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAg
IHJldHVybiBpc1ZhbGlkKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwogfQogCi1pbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZM
aW5lU3RvcmFnZSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNT
RVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVy
T2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQo
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJy
ZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3Rh
bFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6
ZSgpKTsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49
IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5z
aXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0
ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0g
ICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0
dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
IChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRj
aHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVj
dHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJs
ZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9w
ZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRh
YmxlKCkpOwpAQCAtMjkyLDYgKzI2NiwxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJl
OjpjaGVja09mZnNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVy
ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwor
fQorCiBpbmxpbmUgc2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1
cnJlbnRDYXBhY2l0eSkKIHsKICAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSAr
Mjc4LDYgQEAgaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJl
dHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGlu
ZSBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KQotewotICAgIHJldHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNh
cGFjaXR5KCkpOwotfQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlT
bG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBA
IC0zMTEsNCArMjg1LDg1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJp
bmcKICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlz
LCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZt
KTsKKworICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7CisgICAgCisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFT
U0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0Fs
bG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zm
c2V0KG1faW5saW5lQ2FwYWNpdHkpOworICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBF
bnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworCisgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7
CisgICAgCisgICAgLy8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJp
ZXMsIHdoaWNoIHdpbGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUg
b25seSB3YXkgZm9yIHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0
eS4KKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKwor
ICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJv
cGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7Cisg
ICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Cisg
ICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsK
KworICAgIHRhYmxlLT5yZW1vdmUocG9zaXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zm
c2V0KG9mZnNldCk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tl
ciwgb2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0
eVRhYmxlKHZtKSk7CisgICAgCisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0m
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFT
U0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAor
ICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQg
U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUp
Cit7CisgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFi
bGUpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTky
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRoZSByZWFzb24gd2h5IEkgd2VudCB0byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2Ug
V1RGOjpMb2NrIGZpdCBpbiB0d28gYml0cyBpcyB0aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkg
d291bGQgZXZlbnR1YWxseSBuZWVkIHRvIHN0dWZmIG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91
cyBiaXRzIG9mIHRoZQorICAgICAgICBKU0NlbGwgaGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUs
IGJlY2F1c2UgdGhlIGNvbmN1cnJlbnQgR0MgaGFzIG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29u
ZGl0aW9ucyBpbiB2aXNpdENoaWxkcmVuIHRoYXQgY2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBl
YWNoIG9iamVjdCBqdXN0IGhhcyBhbgorICAgICAgICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwg
dHlwZXMgbWlnaHQgdXNlIGl0IHRvIHNpbXBseSBwcm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENo
aWxkcmVuCisgICAgICAgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZp
ZWxkcyBpdCB0b3VjaGVzLCB3aGlsZSBvdGhlciBjZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVz
ZSBpdCBhcyBhICJsb2NrIG9mIGxhc3QgcmVzb3J0IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9m
IGFuIG90aGVyd2lzZSB3YWl0LWZyZWUgb3IKKyAgICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4g
UmlnaHQgbm93LCBpdCdzIHVzZWQgdG8gcHJvdGVjdCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBp
bnZvbHZpbmcKKyAgICAgICAgaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgCisgICAgICAgIFRv
IG1ha2UgdGhpcyBoYXBwZW4sIEkgZmFjdG9yZWQgdGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50
byBhIExvY2tBbGdvcml0aG0gc3RydWN0IHRoYXQKKyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24g
bG9jayB0eXBlICh1aW50OF90IGZvciBXVEY6OkxvY2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgx
IGZvcgorICAgICAgICBXVEY6OkxvY2spLCBhbmQgdGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBm
b3IgV1RGOjpMb2NrKS4gVGhpcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBhcworICAgICAgICBhIHRl
bXBsYXRpemVkIExvY2sgY2xhc3MgdGhhdCBiYXNpY2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tU
eXBlPi4gWW91IGNvdWxkIHRoZW4gbWFrZQorICAgICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sg
YnkgYml0d2lzZV9jYXN0aW5nIGl0IHRvIFRlbXBsYXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBi
aXQyPi4gQnV0CisgICAgICAgIHRoaXMgZmVsdCB0b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tB
bGdvcml0aG0gaGFzIHN0YXRpYyBtZXRob2RzIHRoYXQgdGFrZQorICAgICAgICBBdG9taWM8TG9j
a1R5cGU+JiBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMg
aXQgbW9yZSBuYXR1cmFsIHRvCisgICAgICAgIHByb2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8g
YW4gZXhpc3RpbmcgQXRvbWljPD4gZmllbGQuIFNhZGx5LCBzb21lIHBsYWNlcyBoYXZlIHRvIGNh
c3QKKyAgICAgICAgdGhlaXIgbm9uLUF0b21pYzw+IGZpZWxkIHRvIEF0b21pYzw+IGluIG9yZGVy
IGZvciB0aGlzIHRvIHdvcmsuIExpa2Ugc28gbWFueSBvdGhlciB0aGluZ3MKKyAgICAgICAgd2Ug
ZG8sIHRoaXMganVzdCBzaG93cyB0aGF0IHRoZSBDKysgc3R5bGUgb2YgbGFiZWxpbmcgZmllbGRz
IHRoYXQgYXJlIHN1YmplY3QgdG8gYXRvbWljCisgICAgICAgIG9wcyBhcyBhdG9taWMgaXMgY291
bnRlcnByb2R1Y3RpdmUuIE1heWJlIHNvbWUgZGF5IEknbGwgY2hhbmdlIExvY2tBbGdvcml0aG0g
dG8gdXNlIG91cgorICAgICAgICBvdGhlciBBdG9taWNzIEFQSSwgd2hpY2ggZG9lcyBub3QgcmVx
dWlyZSBBdG9taWM8Pi4KKyAgICAgICAgCisgICAgICAgIFdURjo6TG9jayBub3cgdXNlcyBMb2Nr
QWxnb3JpdGhtLiBUaGUgc2xvdyBwYXRocyBhcmUgc3RpbGwgb3V0bGluZWQuIEkgZG9uJ3QgZmVl
bCB0b28KKyAgICAgICAgYmFkIGFib3V0IHRoZSBMb2NrQWxnb3JpdGhtLmggaGVhZGVyIGJlaW5n
IGluY2x1ZGVkIGluIHNvIG1hbnkgcGxhY2VzIGJlY2F1c2Ugd2UgY2hhbmdlCisgICAgICAgIHRo
YXQgYWxnb3JpdGhtIHNvIGluZnJlcXVlbnRseS4KKyAgICAgICAgCisgICAgICAgIEFsc28sIEkg
YWRkZWQgYSBoYXNFbGFwc2VkKHRpbWUpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGl0
IHNvIG11Y2ggbW9yZSBuYXR1cmFsCisgICAgICAgIHRvIHdyaXRlIHRpbWVzbGljaW5nIGNvZGUs
IHdoaWNoIHRoZSBjb25jdXJyZW50IEdDIGhhcyB0byBkbyBhIGxvdCBvZi4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6
CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tC
YXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNs
b3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Mb2NrLmg6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAg
ICAgICAgKFdURjo6TG9ja0Jhc2U6OnRyeUxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
dW5sb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseSk6CisgICAgICAg
IChXVEY6OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvTG9ja0FsZ29yaXRobS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjps
b2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2spOgorICAgICAgICAo
V1RGOjpMb2NrQWxnb3JpdGhtOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06
OnVubG9ja0Zhc3QpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2spOgorICAg
ICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjppc0xvY2tlZCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06Omxv
Y2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAg
ICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHA6CisgICAgICAgIChXVEY6Omhh
c0VsYXBzZWQpOgorICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDoKKwog
MjAxNi0xMS0xMCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAg
QVNTRVJUSU9OIEZBSUxFRDogbGVuZ3RoID4gb2Zmc2V0IGVuY291bnRlcmVkIHdpdGggd2FzbS55
YW1sL3dhc20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzLmRlZmF1bHQtd2FzbQpJbmRleDogU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDg1OTIpCisrKyBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw2ICsyMiw3IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBG
MEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xv
Y2suaCAqLzsgfTsKKwkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDRERE
MUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CiAJCTBGMkI2NkE2MTdC
NkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8q
IERlZmVycmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUz
RiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJ
MEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi87IH07CkBAIC0zNzQsNiArMzc1LDcgQEAKIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBO
b0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVS
ZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlw
Qnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1
Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNl
dC5oICovLAogCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKIAkJ
CQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAorCQkJCTBGMEZDREREMURE
MTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1
QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAv
KiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYg
LyogTWFpblRocmVhZC5jcHAgKi8sCkBAIC0xMzIzLDYgKzEzMjYsNyBAQAogCQkJCUE4QTQ3MzlC
MTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNV
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMg
LyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUQxNTFBODI1QjAw
NDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RjE1MUE4
MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTExNTFB
ODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAg
ICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAgTG9jay5oCisgICAgTG9j
a0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAgIE1haW5UaHJlYWQuaApJ
bmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0
RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBMaXN0RHVtcEluQ29u
dGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Omxp
c3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RGOjpwb2ludGVy
TGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcgV1RGOjpzb3J0ZWRN
YXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2VuZGlmIC8vIExpc3RE
dW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYvd3Rm
L0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIxIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAiRGF0YUxvZy5oIgotI2lu
Y2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgotI2lu
Y2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KIG5hbWVz
cGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLU5FVkVS
X0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tCYXNlOjpsb2NrU2xv
dygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRoaXMgbWFnaWMg
bnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhw
ZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0gICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9h
ZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxu
IikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIG1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2Fu
IGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVl
ICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAg
IHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwYXJr
LiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBh
cmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24n
dCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJr
ZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVj
dCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhl
IGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtS
ZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwg
aXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5w
YXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1
bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6Ci0gICAgICAgICAg
ICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVz
IGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAgICAgICAvLyB1bmxv
Y2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNl
IEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb21t
b24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVsZWFzZWQgdGhl
IGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0
aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0Ci0gICAg
ICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQg
d2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZlIGF3
b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4g
RWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAg
ICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKIHZv
aWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKFVuZmFpcik7
CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9j
a0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2NrRmFpcmx5U2xv
dygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVSX0lOTElORSB2b2lk
IExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykKLXsKLSAgICAvLyBX
ZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQg
c3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVvbmUgcGFya2VkLiBT
bywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0
IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0
ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAgZm9yICg7Oykgewot
ICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xkQnl0ZVZhbHVlID09
IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRC
eXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVvbmUgaXMgcGFy
a2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0byB0
aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxv
Y2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCi0g
ICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0
IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAgICAgIC8vIG90
aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVlID09IChpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAot
ICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJr
UmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0
aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBo
YXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBi
b3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NFUlQobV9ieXRlLmxv
YWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09
IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRo
ZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGluZy4KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCi0gICAgICAg
ICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwotICAgICAgICAgICAg
ICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyhtX2J5
dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTG9jay5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xvY2tfaAogI2RlZmlu
ZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9D
b21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0zNyw2ICszNiw4
IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsKIAordHlwZWRlZiBM
b2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3JpdGhtOworCiAvLyBU
aGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBv
ZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29tcGV0ZXRpdmUgdG8g
YSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBpcyBqdXN0IGEg
Q0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcgYW5kIHlpZWxk
aW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gc3RkOjptdXRleCAo
aWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiBzdHJ1Y3QgTG9j
a0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkp
CisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgdHJ5TG9jaygpCiAg
ICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRl
VmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRC
eXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dHJ5TG9jayhtX2J5
dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBzdGQ6OnVuaXF1ZV9s
b2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyBndWFyYW50
ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEgZmFpciBsb2NrLgog
ICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkp
IHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja1Nsb3coKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdEFz
c3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3coKTsKICAgICB9CiAK
ICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRlZXMgdGhhdCB3ZSB1
bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAgLTEwMywxNyArOTAs
MTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZvaWQgdW5sb2NrRmFp
cmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdl
YWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAg
ICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdEFzc3VtaW5n
WmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsKICAgICB9CiAK
ICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgICAgIHJldHVy
biBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAgICB9CiAKICAgICBi
b29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHByb3RlY3RlZDoKICAg
ICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwogICAgIHN0YXRpYyBj
b25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9j
a1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tGYWlybHlTbG93KCk7
Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0gICAgICAgIFVuZmFp
cgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7Ci0gICAgCi0gICAg
ZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAgICAgICAgRGlyZWN0
SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVzdGluZyBvbmx5Lgog
ICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tB
bGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRobV9oCisjZGVmaW5l
IFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYv
QXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXJr
aW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIHRoZSBhbGdvcml0aG0g
dXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlw
ZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNzIExvY2tBbGdvcml0aG0g
eworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsKKworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxv
Y2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlz
SGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAg
ICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVl
LCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykpKQorICAgICAgICAgICAg
bG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHRyeUxvY2soQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlz
SGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0
QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1
cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHVubG9ja0Zhc3QoQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0g
bG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBpZiAoKG9sZFZh
bHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSAm
IH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICB1bmxvY2tT
bG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHVubG9ja0Zh
aXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgRmFpcik7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0IEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJ
TkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8gVGhpcyBtYWdpYyBu
dW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBl
cmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisg
ICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9
IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFy
Z2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQor
ICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhh
dmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAg
ICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNv
dW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNvdW50Kys7CisgICAgICAg
ICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBk
byB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcu
IFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qg
c2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgICAgIGlmICghKGN1cnJl
bnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAgICAgJiYgIWxvY2suY29t
cGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFz
UGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8g
V2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBh
cyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAgICAgUGFya2luZ0xvdDo6
UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQYXJraW5nTG90Ojpjb21w
YXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCB8IGhhc1Bhcmtl
ZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5kZWQgdG8gdXMgZGly
ZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAgICAgICAgICAvLyB1bmxv
Y2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5s
b2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAgICAgICAgICAvLyBhbmQg
d2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBvcHBvcnR1bml0eSB0
byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFk
cyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdl
IG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXks
IHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAgICBGYWlyLAorICAgICAg
ICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCB1bmxvY2tTbG93
KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQorICAgIHsKKyAgICAg
ICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkg
ZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgICAgLy8gc29tZW9u
ZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmlnaHQgbm93IHRoZSBs
b2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUgaGVsZCBhbmQgcGFya2Vk
IGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCisg
ICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlID0gbG9j
ay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAo
b2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAgICAgICAgICAgfHwgKG9s
ZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAg
ICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdCkg
eworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0
LCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4g
VW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0
aHJlYWQKKyAgICAgICAgICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9jayB0aGUgbG9j
ayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFyZ2luZy4KKyAg
ICAgICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQg
c2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCisgICAgICAgICAg
ICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KKyAgICAgICAgICAgIEFTU0VSVCgob2xkQnl0ZVZh
bHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAg
UGFya2luZ0xvdDo6dW5wYXJrT25lKAorICAgICAgICAgICAgICAgICZsb2NrLAorICAgICAgICAg
ICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3Qg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBj
bGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAorICAgICAgICAg
ICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmlnaHQg
bm93LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKGxvY2subG9hZCgpICYgbWFzaykgPT0g
KGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFp
ciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRo
ZSB0aHJlYWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2Nr
LmxvYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2tUeXBlIG5ld1ZhbHVlID0gb2xk
VmFsdWUgJiB+bWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2
ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlIHw9IGhh
c1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNo
YW5nZVdlYWsob2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQmFyZ2luZ09wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIFRva2Vu
IHsKKyAgICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAorICAgICAgICBEaXJlY3RIYW5kb2ZmCisg
ICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkxvY2tBbGdvcml0
aG07CisKKyNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxv
Y2suaCIKICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNs
dWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwCiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQog
Citib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQor
eworICAgIC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhT
YW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNs
b2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDggKzEzNCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChj
b25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJv
b2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNp
bmcgV1RGOjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>
<flag name="review"
          id="317204"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294613</attachid>
            <date>2016-11-12 09:15:51 -0800</date>
            <delta_ts>2016-11-12 09:41:49 -0800</delta_ts>
            <desc>possible patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>250353</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODU5MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1OCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuCisKKyAgICAgICAgKiBBUEkv
SlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAgICAgKC1bSlNWaXJ0dWFsTWFjaGluZSBpc09sZEV4
dGVybmFsT2JqZWN0Ol0pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXNoKToKKyAgICAgICAg
KEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2Vzcyk6CisgICAgICAg
IChKU0M6OklubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aCk6CisgICAgICAgICogYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpn
ZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5l
cmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5o
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjphcnJheWlmeSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpXb3JrbGlzdDo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6Oldvcmts
aXN0OjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6Om1hcmtDb2RlQmxv
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgorICAgICAg
ICAoSlNDOjpERkc6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgICogZGZnL0RGR1dvcmts
aXN0Lmg6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9z
aXRvcnkpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAg
ICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6On5K
SVRDb2RlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6aXNBcnJheVR5cGUpOgorICAg
ICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNv
bXBpbGVTdHViKToKKyAgICAgICAgKiBoZWFwL0NlbGxTdGF0ZS5oOgorICAgICAgICAqIGhlYXAv
R0NTZWdtZW50ZWRBcnJheS5oOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChK
U0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6OlJlc3VtZVRoZVdvcmxkU2NvcGUpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlOjp+UmVzdW1lVGhlV29ybGRTY29w
ZSk6CisgICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29tcGxldGVBbGxKSVRQbGFu
cyk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtUb0ZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6
SGVhcDo6Z2F0aGVyU3RhY2tSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmJlZ2luTWFya2lu
Zyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcyk6CisgICAg
ICAgIChKU0M6OkhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmVuZE1hcmtpbmcpOgorICAgICAgICAoSlNDOjpIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SW5UaHJlYWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdG9wVGhlV29ybGQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXN1bWVUaGVXb3JsZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIpOgorICAgICAgICAoSlNDOjpIZWFwOjpjYW5Db2xsZWN0KToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6SGVh
cDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3Rz
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRT
ZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRFeGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpI
ZWFwOjp2aXNpdEhhbmRsZVN0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlz
aXRTYW1wbGluZ1Byb2ZpbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRU
eXBlUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFNoYWRvd0No
aWNrZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp0cmFjZUNvZGVCbG9ja3NBbmRK
SVRTdHViUm91dGluZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdFdlYWtI
YW5kbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJ
RFRhYmxlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnN0b3BBbGxvY2F0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29s
bGVjdG9yU2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpIZWFwOjptdXRhdG9yTWFya1N0YWNr
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6c2xvdFZpc2l0b3IpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGhl
YXAvTWFya1N0YWNrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrQXJyYXk6OnRyYW5zZmVy
VG8pOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRB
bGxvY2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRl
SW4pOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6TWFya2VkQmxvY2spOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplZFN3ZWVwKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNl
bGVjdE1hcmtzTW9kZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BB
bGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxs
b2NhdGluZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3cpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QpOgor
ICAgICAgICAoSlNDOjpTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3I6OlNldE5ld2x5QWxsb2NhdGVk
RnVuY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rv
cjo6b3BlcmF0b3IoKSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgor
ICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRTcGFj
ZTo6cmVzdW1lQWxsb2NhdGluZyk6CisgICAgICAgICogaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3Bl
Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
flNsb3RWaXNpdG9yKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnJlc2V0KToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrcyk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1eGlsaWFyeSk6CisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBh
cmFsbGVsKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluKToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNp
dG9yOjpjb250YWluc09wYXF1ZVJvb3QpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZG9u
YXRlQW5kRHJhaW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290
cyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkdW1wKToKKyAgICAgICAgKEpTQzo6U2xv
dFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6Om9wYXF1ZVJvb3RDb3VudCk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9TbG90Vmlz
aXRvci5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29sbGVjdG9yTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpi
eXRlc1Zpc2l0ZWQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bWFya1N0YWNrKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmJ5dGVzQ29waWVkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZCk6CisgICAgICAgICogaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3Jl
U3RydWN0dXJlV2l0aFR5cGVJbmZvKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbCk6CisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgICogaml0L1Jl
cGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAqIGxs
aW50L0xMSW50RGF0YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNz
ZXJ0aW9ucyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1l
L0NvbmN1cnJlbnRKSVRMb2NrLmg6CisgICAgICAgIChKU0M6OkdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXI6Ok5vRGVmZXI6Ok5vRGVmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxU
eXBlPjo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisgICAgICAgIChKU0M6OkdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSW5kZXhpbmdU
eXBlLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNo
aWZ0Q291bnRXaXRoQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkludGVybmFsTG9ja2VyOjpJbnRlcm5hbExvY2tlcik6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6On5JbnRlcm5hbExvY2tlcik6Cisg
ICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1Jl
bGF4ZWQpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxT
dGF0ZVN0cm9uZyk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjpKU0NlbGwpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjKToKKyAgICAgICAgKEpTQzo6
SlNDZWxsOjppbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnNldFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Y2FsbERlc3RydWN0b3IpOgorICAgICAgICAoSlND
OjpKU0NlbGw6OmxvY2tJbnRlcm5hbExvY2spOgorICAgICAgICAoSlNDOjpKU0NlbGw6OnVubG9j
a0ludGVybmFsTG9jayk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpjcmVhdGVJbml0aWFsVW5kZWNpZGVkKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxJbnQzMik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVJbml0aWFsRG91
YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxDb250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVm
aW5lT3duSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmluY3JlYXNl
VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3cp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcmZseSk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3Bl
cnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnNldFN0
cnVjdHVyZUFuZEJ1dHRlcmZseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpz
ZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0Tm9uSW5kZXhQcm9wZXJ0
eVNsb3QpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpp
c1NlYWxlZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNGcm96ZW4pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpwaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbkZvckNhY2hp
bmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdyk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3kp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3kpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVJREJsb2IuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpTdHJ1
Y3R1cmVJREJsb2IpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OnNldElu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJs
b2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlSURCbG9iOjppbmRleGluZ1R5cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Omdl
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmUpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNldFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KTogRGVs
ZXRlZC4KKwogMjAxNi0xMS0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDg1ODQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTUxLDcgKzE1MSw3IEBAIHN0YXRpYyBpZCBnZXRJbnRlcm5hbE9iamNP
YmplY3QoaWQgb2JqZWMKIC0gKGJvb2wpaXNPbGRFeHRlcm5hbE9iamVjdDooaWQpb2JqZWN0CiB7
CiAgICAgSlNDOjpWTSogdm0gPSB0b0pTKG1fZ3JvdXApOwotICAgIHJldHVybiB2bS0+aGVhcC5z
bG90VmlzaXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOworICAgIHJldHVybiB2bS0+
aGVhcC5jb2xsZWN0b3JTbG90VmlzaXRvcigpLmNvbnRhaW5zT3BhcXVlUm9vdChvYmplY3QpOwog
fQogCiAtICh2b2lkKWFkZEV4dGVybmFsUmVtZW1iZXJlZE9iamVjdDooaWQpb2JqZWN0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTYxMyw2ICs2MTMsNyBAQAogCQkwRkE3QThFQjE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovOyB9OwogCQkwRkE3
QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZBN0E4RUUx
OENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFRDE4Q0U0RkQ4MDA1
MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLzsgfTsKKwkJMEZBREREMUQx
REQwMUVERTAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURERDFDMUREMDFFREMwMDgyNzVFOCAv
KiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi87IH07CiAJCTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmggKi87IH07CiAJCTBG
QUY3RUZEMTY1QkE5MUIwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGQUY3RUZFMTY1QkE5MUYwMDBD
ODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJs
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzAwNCw2ICszMDA1LDcgQEAKIAkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkE3QThFRDE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQURE
RDFDMUREMDFFREMwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc3VtZVRoZVdvcmxkU2NvcGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBREU2NzIxRDREMjNCQzAwNzY4NDU3IC8qIEhlYXBVdGlsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBVdGlsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklURGlzYXNz
ZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkIxNjVCQTkx
OTAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTU2ODYsNiArNTY4OCw3IEBACiAJCQkJMEZBNzYyMDMxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0
b3JTdGF0ZS5oICovLAogCQkJCUFEREIxRjYyMThENzdEQjcwMDlCNThBOCAvKiBPcGFxdWVSb290
U2V0LmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThDQzEyIC8qIFJlbGVhc2VIZWFwQWNj
ZXNzU2NvcGUuaCAqLywKKwkJCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhl
V29ybGRTY29wZS5oICovLAogCQkJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90Vmlz
aXRvci5jcHAgKi8sCiAJCQkJMTRCQTc4RjAxM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9y
LmggKi8sCiAJCQkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5l
cy5oICovLApAQCAtNzkxOCw2ICs3OTIxLDcgQEAKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1
REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkJEOTYxQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZBREREMUQxREQwMUVERTAwODI3NUU4IC8qIFJlc3VtZVRoZVdv
cmxkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDM0QyQjBBMUQzNDMxNjIwMEJBOTE4QyAv
KiBIZWFwQ2VsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJB
IC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMDgwLDcg
KzEwMDg0LDYgQEAKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJh
bFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENCMzQxMDA0QzJFQjgg
LyogRGVidWdnZXJQYXJzZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTNGRjdGOUQxREMw
MERCMTAwQTI2Q0NDIC8qIFdhc21Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEz
NTQxQjc5NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNj
ZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5s
aW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgdm9pZCBJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5kQ3JhcwogICAgICAgICBDQ2Fs
bEhlbHBlcnMgaml0KCZ2bSk7CiAKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSB2YWx1ZTsK
LSAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgdmFsdWUpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwg
dmFsdWUpOwogICAgICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNB
cnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgdmFsdWUpOwogICAgICAgICBqaXQucGF0Y2hhYmxl
QnJhbmNoMzIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCB2YWx1ZSwgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpOwpAQCAt
MTU4LDcgKzE1OCw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgbGlua0NvZGVJbmxpbmUK
IGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUFjY2VzcyhWTSYgdm0sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0KKyAgICAKICAg
ICBHUFJSZWcgYmFzZSA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guYmFzZUdQ
Uik7CiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKIApAQCAt
MTczLDcgKzE3Myw3IEBAIGJvb2wgSW5saW5lQWNjZXNzOjpnZW5lcmF0ZVNlbGZQcm9wZXJ0eUEK
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHZhbHVlLnBheWxvYWRHUFIoKSk7CiAgICAgICAgIHN0b3Jh
Z2UgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgfQotCisgICAgCiAgICAgaml0LmxvYWRWYWx1
ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZSwgb2Zmc2V0UmVsYXRp
dmVUb0Jhc2Uob2Zmc2V0KSksIHZhbHVlKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIGJvb2wgSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKFYKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9
IHN0dWJJbmZvLnZhbHVlUmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoID0gZ2V0U2NyYXRjaFJl
Z2lzdGVyKHN0dWJJbmZvKTsKIAotICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGppdC5s
b2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBqaXQuYW5kMzIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaCk7CiAgICAgYXV0
byBicmFuY2hUb1Nsb3dQYXRoID0gaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
cnJheS0+aW5kZXhpbmdUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjA4NTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjA3LDcgKzYwNyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJh
dGVXaXRoR3VhcmQoCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEFycmF5TGVuZ3Ro
OiB7CiAgICAgICAgIEFTU0VSVCghdmlhUHJveHkoKSk7Ci0gICAgICAgIGppdC5sb2FkOChDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAgICAgICAgIGZhbGxUaHJvdWdoLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2hUZXN0
MzIoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpaZXJvLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAg
cHJvdGVjdGVkOgogICAgICAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRp
bmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgogICAgICAgICAgICAg
Ly8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUu
CiAgICAgICAgICAgICBqaXQtPm1faml0LmxvYWQ4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IG1fc3RydWN0dXJlR1BSKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhtX2Jhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwKKyAgICAg
ICAgICAgICAgICBtX3N0cnVjdHVyZUdQUik7CiAgICAgICAgICAgICBtX2JhZEluZGV4aW5nVHlw
ZUp1bXAuZmlsbCgKICAgICAgICAgICAgICAgICBqaXQsIGppdC0+anVtcFNsb3dGb3JVbndhbnRl
ZEFycmF5TW9kZShtX3N0cnVjdHVyZUdQUiwgbV9hcnJheU1vZGUpKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIw
ODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODksNiArODg5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
KyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOyAvLyBUaGlzIGlzIGEgc3RvcmUtc3Rv
cmUgZmVuY2UuCiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdy
aXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9G
bGFncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3
ICsxMTksNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVy
czo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+
YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bHNoaWZ0MzIoc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMy
KHNjcmF0Y2gyLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUt
PmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsOSAr
NTA1LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIGlm
IChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICBKU0NlbGwqIGJhc2UgPSBi
YXNlVmFsdWUuYXNDZWxsKCk7CiAKLSAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpIHsK
KyAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZ2V0
QnlWYWwoZXhlYywgYmFzZSwgcHJvcGVydHkuYXNVSW50MzIoKSk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAocHJvcGVydHkuaXNEb3VibGUoKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pc0Rv
dWJsZSgpKSB7CiAgICAgICAgICAgICBkb3VibGUgcHJvcGVydHlBc0RvdWJsZSA9IHByb3BlcnR5
LmFzRG91YmxlKCk7CiAgICAgICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKHBy
b3BlcnR5QXNVSW50MzIgPT0gcHJvcGVydHlBc0RvdWJsZSAmJiBpc0luZGV4KHByb3BlcnR5QXNV
SW50MzIpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MTAsMTYgKzYxMCwzNCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXko
KQogICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1v
ZGUpOwogfQogCi12b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcygpCit2b2lkIFBsYW46Om1h
cmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsKKyAgICBpZiAoIWlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDb21w
aWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJm
b3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVz
c2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3Qg
YmUgdmlzaXRlZCBkdXJpbmcgR0MuCisKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJl
ZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2spOworICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgaWYg
KHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihwcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CisKK3ZvaWQgUGxh
bjo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2
ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICAvLyBDb21waWxhdGlvbiB3
cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCiAg
ICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMg
YW5kIGFzc3VtZSB0aGF0CiAgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRl
ZCBkdXJpbmcgR0MuCiAKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihj
b2RlQmxvY2spOwotICAgIEhlYXA6OmhlYXAoY29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2Nr
KTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwog
ICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKLSAgICAgICAgSGVhcDo6aGVhcChwcm9maWxl
ZERGR0NvZGVCbG9jayktPndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAg
ICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogdm9p
ZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNyArNjksOCBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
CiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCByZW1lbWJl
ckNvZGVCbG9ja3MoKTsKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NB
bmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVE
dXJpbmdHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzNiw3ICs4MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5
KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1w
LmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1f
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCiAgICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2VSZWcpLCAwLAogICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9k
ZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwpAQCAtOTAwLDcgKzkwMCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUqIG5vZGUKICAgICAgICAgICAgIG5vZGUtPnN0
cnVjdHVyZSgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZDgoCi0gICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIp
OwogICAgICAgICAKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VPU1JFbnRyeVRvRlRMKCkpCiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsK
LQorICAgICAgICAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAg
ICAgTmF0dXJhbExvb3BzJiBuYXR1cmFsTG9vcHMgPSAqbV9ncmFwaC5tX25hdHVyYWxMb29wczsK
ICAgICAgICAgSGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVkPiBuYXR1cmFsTG9v
cFRvTG9vcEhpbnQgPSBidWlsZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChuYXR1cmFsTG9vcHMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiREZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRl
ICJERkdTYWZlcG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpU
aHJlYWRCb2R5IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFk
Qm9keShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFk
RGF0YSYgZGF0YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b24+IGNvbmRpdGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBA
IHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFs
bFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tz
KFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKCptX2xvY2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMu
YmVnaW4oKTsgaXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiog
cGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RW
aXNpdG9yKTsKKyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhW
TSYgdm0pCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3
LDcgQEAgdm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQ
bGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAm
dm0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxv
Y2tzKCk7CisgICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQog
CkBAIC01NTMsNiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkK
ICAgICB9CiB9CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xv
dFZpc2l0b3IpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0
cygpOyBpLS07KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6
ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3Qt
Pm1hcmtDb2RlQmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVt
YmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1i
ZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1i
ZXJDb2RlQmxvY2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JW
TShWTSYpCit7Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7
Cit9CisKK3ZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw4ICsyNSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
ICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1
ZGUgPHd0Zi9BdXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZp
c2l0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNz
IFdvcmtsaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBl
bnVtIFN0YXRlIHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3
LDcgQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JW
TSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQg
bWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShW
TSYpOwpAQCAtMTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xp
c3RGb3JJbmRlCiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczLDE0ICs3MywxNCBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBS
ZXBvCiAgICAgLCBhYnNvbHV0ZSgmcm9vdCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBvdXIgZXhwbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxv
YiBtYXRjaCByZWFsaXR5LgotICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlw
ZS5vZmZzZXQoKSAmIChzaXplb2YoaW50MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJU
KEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUu
b2Zmc2V0KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0
KCkgKyAyID09IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRl
Lm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRN
aXNjLm9mZnNldCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBl
SW5mb1R5cGUub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5
cGVBbmRNaXNjLm9mZnNldCgpICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkg
KyAzID09IEpTQ2VsbF9jZWxsU3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVy
ZUlELmNoYW5nZVBhcmVudCgmSlNDZWxsX2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVz
LmNoYW5nZVBhcmVudCgmSlNDZWxsX2hlYWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5j
aGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlw
ZUFuZE1pc2MuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90
eXBlSW5mb1R5cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2Vs
bF90eXBlSW5mb0ZsYWdzLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBK
U0NlbGxfY2VsbFN0YXRlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4
LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5
QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBc
CiAgICAgbWFjcm8oSlNDZWxsX2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkg
XAogICAgIG1hY3JvKEpTQ2VsbF9oZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhp
bmdUeXBlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxs
X2luZGV4aW5nVHlwZUFuZE1pc2MsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBK
U0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5
dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpT
RnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwK
ICAgICBtYWNybyhKU0Z1bmN0aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hh
aW4oKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNl
dE9mUmFyZURhdGEoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENv
ZGUuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENvZGU6On5K
SVRDb2RlKCkKICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRhTG9nKGNv
bW1hLCBtX2IzQ29kZSk7CiAgICAgICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5
cG9pbnQpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzgwLDYgKzI3ODAsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVQdXRTdHJ1Y3R1cmUoKQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5j
b21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1fcGxhbiwg
Y29kZUJsb2NrKCksIG1fbm9kZSk7CisgICAgICAgIAorICAgICAgICBGZW5jZVZhbHVlKiBmZW5j
ZSA9IG1fb3V0LmZlbmNlKCk7CisgICAgICAgIC8vIFdlIGNvdWxkIGRlY29yYXRlIHRoaXMgd2l0
aCB0aGUgdW5pb24gb2YgYnV0dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIHdvbid0Cisg
ICAgICAgIC8vIGhlbHAgdGhhdCBtdWNoLiBQcmVjaXNlIHJlYWQgYWNjb3VudGluZyBpcyBtb3N0
bHkgZm9yIHN0b3JlIGVsaW1pbmF0aW9uIGFuZCBpZiB0aGlzCisgICAgICAgIC8vIHJlYWRzIHN0
cnVjdHVyZSB0aGVuIGl0J2xsIGJsb2NrIHRoYXQgc3RvcmUgZWxpbWluYXRpb24uIFdlIHJlYWxs
eSB3YW50IHRvIGJlIGFibGUKKyAgICAgICAgLy8gdG8gcHV0IGEgcmVsZWFzZSBmbGFnIG9uIHRo
ZSBzdG9yZSBiZWxvdy4KKyAgICAgICAgZmVuY2UtPndyaXRlID0gSGVhcFJhbmdlKCk7CiAKICAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXM7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0
aW9uKCktPm5leHQ7CkBAIC01MDM0LDYgKzUwNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFz
ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJs
b2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC01MDQxLDcgKzUwNDksMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAg
ICAgICAgIGJhc2UsIHZhcmlhbnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
LQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5
KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSk7CkBAIC01MDQ5LDcgKzUwNjEsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJh
c2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVu
dGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTExNzM5LDcgKzExNzUwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAg
ICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVh
cHMuSlNDZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBl
ID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBl
QW5kTWlzYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFy
cmF5Q2xhc3MoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRp
YyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQ
cm9maWxlID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJheVBy
b2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0
cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNl
dCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAgICAg
ICBqaXQubHNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAg
ICAgICAgICBqaXQub3IzMihHUFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRl
QWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCwxNCArNDAsOCBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8vIFRo
ZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlz
IHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2luZyB0byBz
Y2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBv
YmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBiZWxvbmdz
IHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBncmV5IGEg
c2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBzdG9y
ZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdyZXkgPSAz
CisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQuCisg
ICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQg
PSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9yQmxhY2su
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5o
CShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21l
bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsK
K3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDog
bV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRH
QygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1f
aGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAgICAgICAK
KyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAgIH5SZXN1
bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKworICAg
ICAgICBkYXRhTG9nKCJbR0M6ICIpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGVhcCYg
bV9oZWFwOworfTsKKwogbmFtZXNwYWNlIHsKIAogc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUhl
YXBTaXplID0gMzIgKiBNQjsgLy8gQWJvdXQgMS41WCB0aGUgYXZlcmFnZSB3ZWJwYWdlLgpAQCAt
MjQ0LDcgKzI3Myw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAg
ICAsIG1fZXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNp
emUoMCkKICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKLSAgICAsIG1fc2xvdFZpc2l0b3Io
KnRoaXMpCisgICAgLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xv
dFZpc2l0b3I+KCp0aGlzKSkKKyAgICAsIG1fbXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5p
cXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2Nv
ZGVCbG9ja3Moc3RkOjptYWtlX3VuaXF1ZTxDb2RlQmxvY2tTZXQ+KCkpCiAgICAgLCBtX2ppdFN0
dWJSb3V0aW5lcyhzdGQ6Om1ha2VfdW5pcXVlPEpJVFN0dWJSb3V0aW5lU2V0PigpKQpAQCAtMjY2
LDYgKzI5Niw4IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBV
U0UoRk9VTkRBVElPTikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgwKQog
I2VuZGlmCisgICAgLCBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PE1hcmtTdGFja0FycmF5PigpKQorICAgICwgbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKHN0ZDo6
bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hlbHBlckNsaWVudCgmaGVh
cEhlbHBlclBvb2woKSkKICAgICAsIG1fdGhyZWFkTG9jayhCb3g8TG9jaz46OmNyZWF0ZSgpKQog
ICAgICwgbV90aHJlYWRDb25kaXRpb24oQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjcmVhdGUo
KSkKQEAgLTQxNiwxMiArNDQ4LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCog
Y2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAgIG1f
c2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5hbGl6
ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+
ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6OndpbGxT
dGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE3ICs0NzEsMTY0IEBAIHZvaWQgSGVhcDo6Y29tcGxl
dGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5zdGFu
Y2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7
Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQor
dm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAgVGlt
aW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMiKTsK
KyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6
bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNp
dG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3Io
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5nU2Nv
cGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBiZWZv
cmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1fbXV0
YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVnaW5N
YXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChT
YW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxl
cigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxvY2sg
ZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUgU2Ft
cGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAgICAg
ICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQgaXQg
dG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3JlIHdl
IGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sgaXMg
cmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJv
ZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2VuZGlm
IC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVj
dGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci0g
ICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigKLSAg
ICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RW
aXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9y
ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zp
c2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0
b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgbV9o
ZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAg
ICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3Vmlz
aXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNp
dG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3VmlzaXRv
ci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBl
bmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9y
cy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpyZWdp
c3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6cmVn
aXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2RlRW5h
Ymxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZGlk
U3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZy
b21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVs
TW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+
ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJv
bVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZVBh
cmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAg
bV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0YXJ0
TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVyZ2Vu
Y2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwotICAg
ICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAgICAg
IAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1cnJl
bnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsKKyAg
ICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5pdGlh
bFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9mTG9v
cFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7IDsg
KytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAg
ICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0
aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9wcGVkT3Zl
ckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gKj0g
cmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJn
ZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2ZSBzY2Fu
Iik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0
aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAg
ICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAgICAgICAg
ICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAgICAg
ICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgZ2F0
aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNj
cmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2aXNpdENv
bnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVy
ZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAgICAgLy8g
YWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2NhbkV4dGVy
bmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworI2VuZGlm
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25z
ZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJl
Ci0gICAgICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBi
ZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawotICAgICAgICAg
ICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJp
ZXIuCi0gICAgICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1
dGluZyh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCk7Ci0gICAgICAgIHZpc2l0U21hbGxTdHJpbmdzKCk7Ci0gICAgICAgIHZpc2l0UHJvdGVj
dGVkT2JqZWN0cyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdEFyZ3VtZW50QnVmZmVy
cyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdEV4Y2VwdGlvbihoZWFwUm9vdFZpc2l0
b3IpOwotICAgICAgICB2aXNpdFN0cm9uZ0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRIYW5kbGVTdGFjayhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdFNhbXBs
aW5nUHJvZmlsZXIoKTsKLSAgICAgICAgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICAgICAgdmlz
aXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgICAgIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0
aW5lcygpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRv
cjo6TWFzdGVyRHJhaW4pOwotICAgIH0KLSAgICAKLSAgICBUaW1pbmdTY29wZSBwb3N0Q29udmVy
Z2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBjb252ZXJnZW5j
ZSIpOwotCi0gICAgLy8gV2VhayByZWZlcmVuY2VzIG11c3QgYmUgbWFya2VkIGxhc3QgYmVjYXVz
ZSB0aGVpciBsaXZlbmVzcyBkZXBlbmRzIG9uCi0gICAgLy8gdGhlIGxpdmVuZXNzIG9mIHRoZSBy
ZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZp
c2l0b3IpOworICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQo
Km1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNp
dFN0cm9uZ1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAg
CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQorICAgICAgICAg
ICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhoZWFwUm9vdFZpc2l0b3IsICptX21h
cmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAobV92bS0+ZXhjZXB0aW9uKCkp
CisgICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0
aW9uKCkpOworICAgICAgICBpZiAobV92bS0+bGFzdEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBS
b290VmlzaXRvcik7CisgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9y
KTsKKworI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5n
UHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsK
KyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2so
KSk7CisgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNr
VHJhY2VzKCk7CisgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmls
ZXIgZGF0YTpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgCisgICAgICAgIGlmIChtX3Zt
LT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52
aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKCptX2NvbGxlY3RvclNsb3RWaXNp
dG9yKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNl
TWFya2VkU3R1YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKworICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQorICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKKworICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoaGVhcFJvb3RWaXNp
dG9yKTsKKyAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29t
cGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIERGRzo6bWFya0NvZGVCbG9j
a3MoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgYm9vbCBzaG91bGRU
ZXJtaW5hdGUgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5pc0VtcHR5KCkgJiYgbV9tdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGRv
IHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJs
b2NrcyB0aGF0IGFyZQorICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2Ug
bmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawor
ICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEg
YmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQorICAgICAgICAvLyBm
aXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIuIEluY2lkZW50
YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKKyAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiBH
QyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0MgZ2V0cyBiYXJyaWVy
ZWQgaW4gdGhlIG5leHQKKyAgICAgICAgLy8gR0MuCisgICAgICAgIG1fY29kZUJsb2Nrcy0+d3Jp
dGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgICAgICBERkc6OnJlbWVtYmVy
Q29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgU2xvdFZpc2l0
b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3RvciB0aHJlYWQgKGku
ZS4gdGhpcyB0aHJlYWQpCisgICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRoYXQncyB3aHkgd2Ug
ZG91YmxlLWJ1ZmZlci4KKyAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNp
dG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAg
ICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JNYXJrU3RhY2soKS5z
aXplKCksICIrIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpLnNp
emUoKSwgIiAiKTsKKworICAgICAgICB7CisgICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRp
bWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2luZyIpOworICAgICAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKHRp
bWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQg
ZHJhaW5SZXN1bHQgPQorICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRy
YWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4sIHRpbWVUb1Jlc3VtZSk7Cisg
ICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVz
dWx0OjpEb25lKSB7CisgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVU
aGVXb3JsZFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVP
ZlN0b3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgY29uY3VycmVudFRpbWUgPSB0
aW1lT2ZTdG9wIC0gdGltZVRvUmVzdW1lOworICAgICAgICB0b3BPZkxvb3BUaW1lID0gdGltZU9m
U3RvcDsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2Nr
KG1fbWFya2luZ011dGV4KTsKQEAgLTU2Myw3ICs2NDIsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290
cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFy
a3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3Rz
LCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBAIC01OTAsNiArNjY4
LDcgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5NYXJraW5nIik7CiAgICAgaWYgKG1fY29sbGVjdGlvblNj
b3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV9jb2RlQmxvY2tzLT5jbGVh
ck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKKyAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJN
YXJrcygpOwogICAgIAogICAgIHsKICAgICAgICAgVGltaW5nU2NvcGUgY2xlYXJNYXJrc1RpbWlu
Z1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmciKTsKQEAgLTU5Nyw0MiAr
Njc2LDIyIEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICB9CiB9CiAKLXZvaWQgSGVh
cDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQotewotI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECi0gICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgbV9zbG90VmlzaXRvcik7
Ci0jZW5kaWYKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncygpCi17Ci0gICAgaWYg
KCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdS
ZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOwotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU21hbGwgc3RyaW5nczpcbiIsIG1f
c2xvdFZpc2l0b3IpOwotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQog
dm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290
cykKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZChyb290cyk7CisgICAgbV9jb2xsZWN0b3JT
bG90VmlzaXRvci0+YXBwZW5kKHJvb3RzKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3Rz
OlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWlu
KCk7CisgICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFr
UmVmZXJlbmNlcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4aXN0aW5n
V29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOwor
ICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVu
Y2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpc
biIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwg
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTcwNSwxMzIgKzc2NCwx
MCBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyhICiAgICAgfQogfQog
Ci12b2lkIEhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBS
b290VmlzaXRvcikKLXsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykK
LSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7Ci0KLSAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlBy
b3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9y
LmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMo
SGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICghbV9tYXJrTGlzdFNldCB8fCAh
bV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKLQotICAgIGlm
IChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxv
ZygiQXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90Vmlz
aXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhl
YXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fdm0tPmV4Y2VwdGlvbigpICYm
ICFtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpc2l0b3Iu
dmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwotICAgIHZpc2l0b3IudmlzaXQobV92
bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIs
IG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwot
fQotCi12b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0
b3IpCi17Ci0gICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwotCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJTdHJvbmcgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0SGFuZGxlU3Rh
Y2soSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU3RhY2sudmlzaXQo
dmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZp
c2l0U2FtcGxpbmdQcm9maWxlcigpCi17Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQot
ICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxp
bmdQcm9maWxlcigpKSB7Ci0gICAgICAgIEFTU0VSVChzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2Nr
KCkuaXNMb2NrZWQoKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgbV9z
bG90VmlzaXRvcik7Ci0KLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwot
ICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkudW5sb2NrKCk7Ci0gICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFR5
cGVQcm9maWxlcigpCi17Ci0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAg
IHZtKCktPnR5cGVQcm9maWxlckxvZygpLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZygiVHlwZSBQcm9maWxlciB2aXNpdCBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0g
ICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQg
SGVhcDo6dmlzaXRTaGFkb3dDaGlja2VuKCkKLXsKLSAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCku
dmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp0cmFjZUNvZGVC
bG9ja3NBbmRKSVRTdHViUm91dGluZXMoKQotewotICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFj
ZU1hcmtlZFN0dWJSb3V0aW5lcyhtX3Nsb3RWaXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29kZSBCbG9j
a3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Ns
b3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRXZWFrSGFu
ZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVGltaW5nU2NvcGUgdGltaW5n
U2NvcGUoKnRoaXMsICJIZWFwOjp2aXNpdFdlYWtIYW5kbGVzIik7Ci0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMs
ICJtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMiKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3Bh
Y2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKLSAgICAgICAgfQotICAgICAgICBoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5j
ZXMoKTsKLSAgICAgICAgaWYgKG1fc2xvdFZpc2l0b3IuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJi
b3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBtX3Nsb3RW
aXNpdG9yKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVu
YWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90
VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEhlYXA6
OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAgIHNpemVfdCB2aXNp
dENvdW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAgIHNpemVfdCB2aXNp
dENvdW50ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgpOwogICAgICAgICB2
aXNpdENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxvZ0YoIlxuTnVt
YmVyIG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CkBAIC04MzgsMTkgKzc3NSwyMiBA
QCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAgaWYgKG1fY29s
bGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV90b3RhbEJ5
dGVzVmlzaXRlZCA9IDA7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0gbV9z
bG90VmlzaXRvci5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgpOworICAgIG1f
dG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPQorICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5ieXRlc1Zpc2l0ZWQoKSArCisgICAgICAgIHRocmVhZEJ5dGVzVmlzaXRlZCgpOwogICAg
IAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNs
ZTsKIH0KIAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLnJl
c2V0KCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKIAogICAgIGZvciAo
YXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAg
cGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCi0gICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNr
LmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRhdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxs
KCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CkBAIC05ODgsMTQgKzky
OCwyMCBAQCB2b2lkIEhlYXA6OmFkZFRvUmVtZW1iZXJlZFNldChjb25zdCBKU0NlCiB7CiAgICAg
QVNTRVJUKGNlbGwpOwogICAgIEFTU0VSVCghT3B0aW9uczo6dXNlQ29uY3VycmVudEpJVCgpIHx8
ICFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9
PSBDZWxsU3RhdGU6OkFudGhyYWNpdGVPckJsYWNrKTsKLSAgICAvLyBJbmRpY2F0ZSB0aGF0IHRo
aXMgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQgaXQncyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAg
ICAvLyAtIEEgcmUtZ3JleWVkIG9iamVjdCBkdXJpbmcgYSBjb25jdXJyZW50IGNvbGxlY3Rpb24u
Ci0gICAgLy8gLSBBbiBvbGQgcmVtZW1iZXJlZCBvYmplY3QuCi0gICAgLy8gIk9sZEdyZXkiIGRv
ZXNuJ3QgdGVsbCB1cyB3aGljaCBvZiB0aGVzZSB0aGluZ3MgaXMgdHJ1ZSwgYnV0IHdlIHVzdWFs
bHkgdHJlYXQgdGhlIHR3byBjYXNlcyB0aGUKLSAgICAvLyBzYW1lLgotICAgIGNlbGwtPnNldENl
bGxTdGF0ZShDZWxsU3RhdGU6Ok9sZEdyZXkpOwotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kVG9N
YXJrU3RhY2soY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CisgICAgaWYgKCFIZWFwOjppc01h
cmtlZENvbmN1cnJlbnRseShjZWxsKSkgeworICAgICAgICAvLyBEdXJpbmcgYSBmdWxsIGNvbGxl
Y3Rpb24gYSBzdG9yZSBpbnRvIGFuIHVubWFya2VkIG9iamVjdCB0aGF0IGhhZCBzdXJpdml2ZWQg
cGFzdAorICAgICAgICAvLyBjb2xsZWN0aW9ucyB3aWxsIG1hbmlmZXN0IGFzIGEgc3RvcmUgdG8g
YW4gdW5tYXJrZWQgYmxhY2sgb2JqZWN0LiBJZiB0aGUgb2JqZWN0IGdldHMKKyAgICAgICAgLy8g
bWFya2VkIGF0IHNvbWUgdGltZSBhZnRlciB0aGlzIHRoZW4gaXQgd2lsbCBnbyBkb3duIHRoZSBu
b3JtYWwgbWFya2luZyBwYXRoLiBXZSBjYW4KKyAgICAgICAgLy8gc2FmZWx5IGlnbm9yZSB0aGVz
ZSBzdG9yZXMuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSXQgY291bGQgYmUgdGhh
dCB0aGUgb2JqZWN0IHdhcyAqanVzdCogbWFya2VkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxl
Y3RvciBtYXkgc2V0IHRoZQorICAgIC8vIHN0YXRlIHRvIEdyZXkgYW5kIHRoZW4gdG8gQW50aHJh
Y2l0ZU9yQmxhY2sgYXQgYW55IHRpbWUuIEl0J3MgT0sgZm9yIHVzIHRvIHJhY2Ugd2l0aCB0aGUK
KyAgICAvLyBjb2xsZWN0b3IgaGVyZS4gSWYgd2Ugd2luIHRoZW4gdGhpcyBpcyBhY2N1cmF0ZSBi
ZWNhdXNlIHRoZSBvYmplY3QgX3dpbGxfIGdldCBzY2FubmVkIGFnYWluLgorICAgIC8vIElmIHdl
IGxvc2UgdGhlbiBzb21lb25lIGVsc2Ugd2lsbCBiYXJyaWVyIHRoZSBvYmplY3QgYWdhaW4uIFRo
YXQgd291bGQgYmUgdW5mb3J0dW5hdGUgYnV0IG5vdAorICAgIC8vIHRoZSBlbmQgb2YgdGhlIHdv
cmxkLgorICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOworICAgIG1fbXV0
YXRvck1hcmtTdGFjay0+YXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIEhlYXA6OmNvbGxlY3RBbGxH
YXJiYWdlKCkKQEAgLTEwOTQsMjQgKzEwNDAsMTQgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJl
YWQoKQogICAgIAogICAgIHN0b3BUaGVXb3JsZCgpOwogCi0gICAgZG91YmxlIGJlZm9yZSA9IDA7
CisgICAgTW9ub3RvbmljVGltZSBiZWZvcmU7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsK
LSAgICAgICAgZGF0YUxvZygiW0dDOiAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBrYiAiKTsKLSAg
ICAgICAgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOworICAgICAgICBkYXRhTG9nKCJbR0M6IFNU
QVJUICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIpOworICAgICAgICBiZWZvcmUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKICAgICB9CiAgICAgCiAgICAgZG91YmxlIGdjU3RhcnRUaW1lOwog
ICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3
aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxl
dGVBbGxGb3JWTSgqbV92bSkpCi0gICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOwotICAgIH0KLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQotICAgIAotICAgIHZtKCktPnNoYWRvd0NoaWNrZW4oKS51cGRh
dGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7Ci0gICAgCiAgICAgQVNTRVJUKG1faXNTYWZl
VG9Db2xsZWN0KTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUpIHsKICAgICAgICAgZGF0YUxv
ZygiQ29sbGVjdGlvbiBzY29wZSBhbHJlYWR5IHNldCBkdXJpbmcgR0M6ICIsIG1fY29sbGVjdGlv
blNjb3BlLCAiXG4iKTsKQEAgLTExMzEsMTIgKzEwNjcsOSBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJ
blRocmVhZCgpCiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJp
Zmllcjo6UGhhc2U6OkJlZm9yZU1hcmtpbmcpOwogICAgIH0KICAgICAgICAgCi0gICAgZmx1c2hP
bGRTdHJ1Y3R1cmVJRFRhYmxlcygpOwotICAgIHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgcHJlcGFy
ZUZvck1hcmtpbmcoKTsKLSAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwogICAgICAgICAK
LSAgICBtYXJrUm9vdHMoZ2NTdGFydFRpbWUpOworICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRU
aW1lKTsKICAgICAgICAgCiAgICAgaWYgKG1fdmVyaWZpZXIpIHsKICAgICAgICAgbV92ZXJpZmll
ci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsK
QEAgLTExNzMsOCArMTEwNiw4IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICB9
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAgZG91YmxlIGFmdGVy
ID0gY3VycmVudFRpbWVNUygpOwotICAgICAgICBkYXRhTG9nKGFmdGVyIC0gYmVmb3JlLCAiIG1z
XVxuIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKKyAgICAgICAgZGF0YUxvZygoYWZ0ZXIgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwg
IiBtcywgY3ljbGUgIiwgKGFmdGVyIC0gYmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIiBtcyBFTkRd
XG4iKTsKICAgICB9CiAgICAgCiAgICAgewpAQCAtMTE5NiwxMCArMTEyOSwzMyBAQCB2b2lkIEhl
YXA6OnN0b3BUaGVXb3JsZCgpCiAgICAgc3RvcFRoZU11dGF0b3IoKTsKICAgICBzdXNwZW5kQ29t
cGlsZXJUaHJlYWRzKCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3Rv
cHBlZCA9IHRydWU7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHsKKyAgICAgICAgRGVmZXJHQ0Zv
ckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNl
KCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pKQorICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsK
KyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKyAgICAKKyAgICB2bSgpLT5zaGFkb3dDaGlj
a2VuKCkudXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOworICAgIAorICAgIGZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgbV9zdHJ1Y3R1cmVJRFRhYmxlLmZsdXNoT2xkVGFi
bGVzKCk7CisgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIAorICAgIG1f
c3RvcFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKIH0KIAogdm9pZCBIZWFwOjpyZXN1bWVU
aGVXb3JsZCgpCiB7CisgICAgLy8gQ2FsbGluZyByZXN1bWVBbGxvY2F0aW5nIGRvZXMgdGhlIFJp
Z2h0IFRoaW5nIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoaXMgaXMgdGhlIGVuZCBvZiBhCisgICAg
Ly8gY29sbGVjdGlvbiBjeWNsZSBvciB0aGlzIGlzIGp1c3QgYSBjb25jdXJyZW50IHBoYXNlIHdp
dGhpbiBhIGNvbGxlY3Rpb24gY3ljbGU6CisgICAgLy8gLSBBdCBlbmQgb2YgY29sbGVjdGlvbiBj
eWNsZTogaXQncyBhIG5vLW9wIGJlY2F1c2UgcHJlcGFyZUZvckFsbG9jYXRpb24gYWxyZWFkeSBj
bGVhcmVkIHRoZQorICAgIC8vICAgbGFzdCBhY3RpdmUgYmxvY2suCisgICAgLy8gLSBEdXJpbmcg
Y29sbGVjdGlvbiBjeWNsZTogaXQgcmVpbnN0YXRlcyB0aGUgbGFzdCBhY3RpdmUgYmxvY2suCisg
ICAgbV9vYmplY3RTcGFjZS5yZXN1bWVBbGxvY2F0aW5nKCk7CisgICAgCiAgICAgUkVMRUFTRV9B
U1NFUlQobV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAgICAgbV9j
b2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAgIHJlc3Vt
ZUNvbXBpbGVyVGhyZWFkcygpOwpAQCAtMTQwOCwyMyArMTM2NCwxOCBAQCB2b2lkIEhlYXA6Omhh
bmRsZU5lZWRGaW5hbGl6ZSgpCiAKIHZvaWQgSGVhcDo6c2V0R0NEaWRKSVQoKQogewotICAgIGZv
ciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIHN0b3BwZWRCaXQpOwotICAgICAg
ICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9sZFN0YXRl
IHwgZ2NEaWRKSVRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3dvcmxk
U3RhdGUudHJhbnNhY3Rpb24oCisgICAgICAgIFsmXSAodW5zaWduZWQmIHN0YXRlKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZSAmIHN0b3BwZWRCaXQpOworICAgICAgICAgICAg
c3RhdGUgfD0gZ2NEaWRKSVRCaXQ7CisgICAgICAgIH0pOwogfQogCiB2b2lkIEhlYXA6OnNldE5l
ZWRGaW5hbGl6ZSgpCiB7Ci0gICAgZm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0
ZSA9IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0gICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFy
ZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgb2xkU3RhdGUgfCBuZWVkRmluYWxpemVCaXQpKSB7Ci0g
ICAgICAgICAgICBtX3N0b3BJZk5lY2Vzc2FyeVRpbWVyLT5zY2hlZHVsZVNvb24oKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3dvcmxkU3RhdGUuZXhjaGFu
Z2VPcihuZWVkRmluYWxpemVCaXQpOworICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV93b3Js
ZFN0YXRlKTsKKyAgICBtX3N0b3BJZk5lY2Vzc2FyeVRpbWVyLT5zY2hlZHVsZVNvb24oKTsKIH0K
IAogdm9pZCBIZWFwOjp3YWl0V2hpbGVOZWVkRmluYWxpemUoKQpAQCAtMTQ0MSwyMyArMTM5Miwx
NCBAQCB2b2lkIEhlYXA6OndhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpCiAgICAgfQogfQogCi11bnNp
Z25lZCBIZWFwOjpzZXRNdXRhdG9yV2FpdGluZygpCit2b2lkIEhlYXA6OnNldE11dGF0b3JXYWl0
aW5nKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93
b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgdW5zaWduZWQgbmV3U3RhdGUgPSBvbGRTdGF0ZSB8
IG11dGF0b3JXYWl0aW5nQml0OwotICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsob2xkU3RhdGUsIG5ld1N0YXRlKSkKLSAgICAgICAgICAgIHJldHVybiBuZXdTdGF0
ZTsKLSAgICB9CisgICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobXV0YXRvcldhaXRpbmdCaXQp
OwogfQogCiB2b2lkIEhlYXA6OmNsZWFyTXV0YXRvcldhaXRpbmcoKQogewotICAgIGZvciAoOzsp
IHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwotICAg
ICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9sZFN0
YXRlICYgfm11dGF0b3JXYWl0aW5nQml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlQW5kKH5tdXRhdG9yV2FpdGluZ0JpdCk7CiB9CiAKIHZv
aWQgSGVhcDo6bm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgTG9ja0hvbGRlciYpCkBAIC0xNDY5
LDEwICsxNDExLDE1IEBAIHZvaWQgSGVhcDo6bm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgTG8K
IAogdm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiB7Ci0gICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dD
U2NvcGUoKnRoaXMpOwotICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7Ci0gICAgZGVs
ZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKLSAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsK
KyAgICB7CisgICAgICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKKyAg
ICAgICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKKyAgICAgICAgZGVsZXRlU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKKyAgICAgICAgc3dlZXBMYXJnZUFsbG9jYXRpb25zKCk7CisgICAg
fQorICAgIAorICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91c2x5KCkpCisgICAgICAg
IGNvbGxlY3RBc3luYygpOwogICAgIGlmIChIYXNPd25Qcm9wZXJ0eUNhY2hlKiBjYWNoZSA9IHZt
KCktPmhhc093blByb3BlcnR5Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPmNsZWFyKCk7CiB9CkBA
IC0xNTU0LDIzICsxNTAxLDkgQEAgdm9pZCBIZWFwOjp3aWxsU3RhcnRDb2xsZWN0aW9uKE9wdGlv
bmFsPAogICAgICAgICBvYnNlcnZlci0+d2lsbEdhcmJhZ2VDb2xsZWN0KCk7CiB9CiAKLXZvaWQg
SGVhcDo6Zmx1c2hPbGRTdHJ1Y3R1cmVJRFRhYmxlcygpCi17Ci0gICAgbV9zdHJ1Y3R1cmVJRFRh
YmxlLmZsdXNoT2xkVGFibGVzKCk7Ci19Ci0KIHZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoKQogewotICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6
OkVkZW4pIHsKLSAgICAgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLnJlc2V0KCk7Ci19
Ci0KLXZvaWQgSGVhcDo6c3RvcEFsbG9jYXRpb24oKQotewotICAgIG1fb2JqZWN0U3BhY2Uuc3Rv
cEFsbG9jYXRpbmcoKTsKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7CiB9
CiAKIHZvaWQgSGVhcDo6cHJlcGFyZUZvck1hcmtpbmcoKQpAQCAtMTk1NCw3ICsxODg3LDcgQEAg
Ym9vbCBIZWFwOjpjYW5Db2xsZWN0KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICgh
bV9pc1NhZmVUb0NvbGxlY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY29sbGVj
dGlvblNjb3BlKCkgfHwgbXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxwaW5nR0Mp
CisgICAgaWYgKG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xOTc2LDEyICsxOTA5
LDggQEAgYm9vbCBIZWFwOjppc0N1cnJlbnRUaHJlYWRCdXN5KCkKICAgICByZXR1cm4gbWF5QmVH
Q1RocmVhZCgpIHx8IG11dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKIH0K
IAotdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRl
LCBzaXplX3Qgc2l6ZSkKK3ZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVf
dCBzaXplKQogewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRy
YSBtZW1vcnkgdGhhdCB3YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAg
aWYgKGNvbGxlY3Rpb25TY29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0
ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCog
Y291bnRlciA9ICZtX2V4dHJhTWVtb3J5U2l6ZTsKICAgICAKICAgICBmb3IgKDs7KSB7CkBAIC0x
OTkyLDEyICsxOTIxLDggQEAgdm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2Vs
bAogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBIZWFwOjpyZXBvcnRFeHRl
cm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qgc2l6ZSkKK3ZvaWQg
SGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gZG91YmxlLWNvdW50IHRoZSBleHRlcm5hbCBtZW1vcnkgdGhhdCB3
YXMgcmVwb3J0ZWQgaW4gcHJldmlvdXMgY29sbGVjdGlvbnMuCi0gICAgaWYgKGNvbGxlY3Rpb25T
Y29wZSgpID09IENvbGxlY3Rpb25TY29wZTo6RWRlbiAmJiBvbGRTdGF0ZSA9PSBDZWxsU3RhdGU6
Ok9sZEdyZXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNpemVfdCogY291bnRlciA9ICZtX2V4
dGVybmFsTWVtb3J5U2l6ZTsKIAogICAgIGZvciAoOzspIHsKQEAgLTIwOTEsNCArMjAxNiwxMSBA
QCB2b2lkIEhlYXA6OnNldFJ1bkxvb3AoQ0ZSdW5Mb29wUmVmIHJ1bkxvCiB9CiAjZW5kaWYgLy8g
VVNFKENGKQogCit2b2lkIEhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpCit7CisgICAgbV9p
c1NhZmVUb0NvbGxlY3QgPSB0cnVlOworICAgIGlmIChPcHRpb25zOjpjb2xsZWN0Q29udGludW91
c2x5KCkpCisgICAgICAgIGNvbGxlY3RBc3luYygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiAr
MjIsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1
ZGUgIkNlbGxTdGF0ZS5oIgogI2luY2x1ZGUgIkNvbGxlY3Rpb25TY29wZS5oIgogI2luY2x1ZGUg
IkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0z
NSw3ICszNiw2IEBACiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKICNpbmNsdWRlICJNdXRhdG9y
U3RhdGUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVJRFRhYmxlLmgiCiAjaW5jbHVkZSAiVGlueUJsb29tRmlsdGVy
LmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtNzAsNyArNzAsOSBA
QCBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTVmFsdWU7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CitjbGFzcyBNYXJrU3RhY2tBcnJheTsKIGNs
YXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBTdG9w
SWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFZNOwogCkBAIC0xMjksNyArMTMxLDggQEAgcHVibGlj
OgogICAgIE1hcmtlZFNwYWNlJiBvYmplY3RTcGFjZSgpIHsgcmV0dXJuIG1fb2JqZWN0U3BhY2U7
IH0KICAgICBNYWNoaW5lVGhyZWFkcyYgbWFjaGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hp
bmVUaHJlYWRzOyB9CiAKLSAgICBjb25zdCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IoKSBjb25z
dCB7IHJldHVybiBtX3Nsb3RWaXNpdG9yOyB9CisgICAgU2xvdFZpc2l0b3ImIGNvbGxlY3RvclNs
b3RWaXNpdG9yKCkgeyByZXR1cm4gKm1fY29sbGVjdG9yU2xvdFZpc2l0b3I7IH0KKyAgICBNYXJr
U3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuICptX211dGF0b3JNYXJrU3Rh
Y2s7IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZnVsbEFj
dGl2aXR5Q2FsbGJhY2soKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJh
Y2sqIGVkZW5BY3Rpdml0eUNhbGxiYWNrKCk7CkBAIC0xNjgsNyArMTcxLDcgQEAgcHVibGljOgog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRmluYWxpemVyKEpTQ2VsbCosIEZpbmFsaXpl
cik7CiAgICAgdm9pZCBhZGRFeGVjdXRhYmxlKEV4ZWN1dGFibGVCYXNlKik7CiAKLSAgICB2b2lk
IG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9Cisg
ICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKTsKICAgICBib29sIGlzU2FmZVRvQ29sbGVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTYWZlVG9Db2xsZWN0OyB9CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0OwpAQCAtMjAzLDExICsyMDYs
MTEgQEAgcHVibGljOgogICAgIC8vIGNhbGwgYm90aCBvZiB0aGVzZSBmdW5jdGlvbnM6IENhbGxp
bmcgb25seSBvbmUgbWF5IHRyaWdnZXIgY2F0YXN0cm9waWMKICAgICAvLyBtZW1vcnkgZ3Jvd3Ro
LgogICAgIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZV90KTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xk
U3RhdGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICAv
LyBVc2UgdGhpcyBBUEkgdG8gcmVwb3J0IHRoZSBzdWJzZXQgb2YgZXh0cmEgbWVtb3J5IHRoYXQg
bGl2ZXMgb3V0c2lkZSB0aGlzIHByb2Nlc3MuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNp
emVfdCk7CiAgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIG1fZXh0ZXJu
YWxNZW1vcnlTaXplOyB9CiAjZW5kaWYKIApAQCAtMzkxLDYgKzM5NCw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzdG9wVGhlV29ybGQoKTsKICAgICB2b2lkIHJlc3VtZVRoZVdvcmxkKCk7CiAgICAg
CisgICAgY2xhc3MgUmVzdW1lVGhlV29ybGRTY29wZTsKKyAgICBmcmllbmQgY2xhc3MgUmVzdW1l
VGhlV29ybGRTY29wZTsKKyAgICAKICAgICB2b2lkIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgdm9p
ZCByZXN1bWVUaGVNdXRhdG9yKCk7CiAgICAgCkBAIC00MTIsNyArNDE4LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNldE5lZWRGaW5hbGl6ZSgpOwogICAgIHZvaWQgd2FpdFdoaWxlTmVlZEZpbmFs
aXplKCk7CiAgICAgCi0gICAgdW5zaWduZWQgc2V0TXV0YXRvcldhaXRpbmcoKTsKKyAgICB2b2lk
IHNldE11dGF0b3JXYWl0aW5nKCk7CiAgICAgdm9pZCBjbGVhck11dGF0b3JXYWl0aW5nKCk7CiAg
ICAgdm9pZCBub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgCkBA
IC00MjIsMzEgKzQyOCwxOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgc3VzcGVuZENvbXBp
bGVyVGhyZWFkcygpOwogICAgIHZvaWQgd2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDxDb2xs
ZWN0aW9uU2NvcGU+KTsKLSAgICB2b2lkIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKICAg
ICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7Ci0gICAgdm9pZCBzdG9wQWxsb2NhdGlv
bigpOwogICAgIHZvaWQgcHJlcGFyZUZvck1hcmtpbmcoKTsKICAgICAKLSAgICB2b2lkIG1hcmtS
b290cyhkb3VibGUgZ2NTdGFydFRpbWUpOworICAgIHZvaWQgbWFya1RvRml4cG9pbnQoZG91Ymxl
IGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9v
dHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwog
ICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAg
ICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKLSAgICB2b2lkIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVk
U2V0KCk7Ci0gICAgdm9pZCB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAgIHZvaWQgdmlzaXRDb25z
ZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgdmlzaXRDb21waWxl
cldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIHJlbW92ZURlYWRDb21waWxlcldv
cmtsaXN0RW50cmllcygpOwotICAgIHZvaWQgdmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290
VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCB2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lk
IHZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0SGFu
ZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFNhbXBsaW5nUHJvZmls
ZXIoKTsKLSAgICB2b2lkIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFNoYWRv
d0NoaWNrZW4oKTsKLSAgICB2b2lkIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygp
OwotICAgIHZvaWQgdmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImKTsKKyAgICB2b2lk
IG1hcmtUb0ZpeHBvaW50KEhlYXBSb290VmlzaXRvciYpOwogICAgIHZvaWQgdXBkYXRlT2JqZWN0
Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBlbmRNYXJraW5nKCk7CiAKQEAg
LTUxOCw3ICs1MTEsOCBAQCBwcml2YXRlOgogCiAgICAgTWFjaGluZVRocmVhZHMgbV9tYWNoaW5l
VGhyZWFkczsKICAgICAKLSAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fbXV0YXRvck1hcmtTdGFjazsKIAogICAgIC8v
IFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVh
ZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KICAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVt
LCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9m
IG1lbW9yeSBmcm9tCkBAIC01NzIsNyArNTY2LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9t
YXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwot
ICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1
bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAgICAg
dW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1bnNp
Z25lZCBtX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCB7IGZhbHNlIH07CkBAIC02MDAsNiArNTk1LDcgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAx
dSA8PCA1dTsgLy8gQWxsb3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9u
IHZhcmlhYmxlLgogICAgIEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJvb2wg
bV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAg
TW9ub3RvbmljVGltZSBtX3N0b3BUaW1lOwogICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENvbGxl
Y3Rpb25TY29wZT4+IG1fcmVxdWVzdHM7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7
IDAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2
aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJh
eTo6TWFya1N0YWNrQXJyYXkoKQogewogfQogCit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2Zl
clRvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9
ICZvdGhlcik7CisgICAgCisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0
aGUgb3RoZXIgbGlzdC4KKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFk
ID0gbV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlND
ZWxsKj4qIG90aGVySGVhZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1f
bnVtYmVyT2ZTZWdtZW50cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAg
IAorICAgIG90aGVyLm1fc2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOworICAgIAorICAgIG90
aGVyLm1fbnVtYmVyT2ZTZWdtZW50cyArPSBtX251bWJlck9mU2VnbWVudHM7CisgICAgbV9udW1i
ZXJPZlNlZ21lbnRzID0gMDsKKyAgICAKKyAgICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJh
Y2sgaW4gdGhlaXIgcGxhY2VzLgorICAgIG1fc2VnbWVudHMucHVzaChteUhlYWQpOworICAgIG90
aGVyLm1fc2VnbWVudHMucHVzaChvdGhlckhlYWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cysr
OworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIAorICAgIHdoaWxlICghaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFz
dCgpKQorICAgICAgICAgICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQorfQor
CiB2b2lkIE1hcmtTdGFja0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYg
b3RoZXIpCiB7CiAgICAgLy8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMu
IFRvIHJlZHVjZSBjb3B5aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xhc3Mg
TWFya1N0YWNrQXJyYXkgOiBwdWJsaWMgR0NTZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtTdGFj
a0FycmF5KCk7CiAKLSAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBv
dGhlcik7Ci0gICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVy
LCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKKyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNr
QXJyYXkmKTsKKyAgICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7Cisg
ICAgdm9pZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRo
cmVhZENvdW50KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxv
Y2F0ZUluKE1hcmtlZAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJU
KCFibG9jay0+aGFzQW55TmV3bHlBbGxvY2F0ZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNG
cmVlTGlzdGVkKCkpOwogICAgIAogICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDEyICs4MiwxNCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5k
bGUmCiAgICAgLCBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAo
ZmFsc2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxu
Iik7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
Y3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+
Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5
QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1h
cmtzTW9kZSBtYXJrc01vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZWVwKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBE
b2VzTm90TmVlZERlc3RydWN0aW9uICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMg
JiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOwogICAgIAogICAgIFN1cGVyU2FtcGxlclNjb3Bl
IHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIApAQCAtOTksNyArMTAxLDcgQEAgRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgIGlmIChPcHRpb25zOjp1c2VCdW1w
QWxsb2NhdG9yKCkKICAgICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkKICAgICAgICAgJiYg
bmV3bHlBbGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKLSAgICAg
ICAgQVNTRVJUKG1hcmtzTW9kZSA9PSBNYXJrc1N0YWxlKTsKKyAgICAgICAgQVNTRVJUKG1hcmtz
TW9kZSA9PSBNYXJrc1N0YWxlIHx8IGJsb2NrLm1fbWFya3MuaXNFbXB0eSgpKTsKICAgICAgICAg
CiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxs
QWxpZ24oYmxvY2suYXRvbXMoKSArIG1fZW5kQXRvbSAtIDEpKTsKICAgICAgICAgY2hhciogcGF5
bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplKCk7CkBAIC0xMTEsNiArMTEzLDgg
QEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAg
c2V0SXNGcmVlTGlzdGVkKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYWxsb2NhdG9y
LT5zZXRJc0VtcHR5KHRoaXMsIHRydWUpOworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5n
KCkpCisgICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2Fk
QmVnaW4pOwogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5
IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2Vs
bFNpemUoKSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwg
IlxuIik7CkBAIC0xMjMsMTcgKzEyNywxMSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplCiAgICAgRnJlZUNlbGwqIGhlYWQgPSAwOwogICAgIHNpemVfdCBjb3VudCA9
IDA7CiAgICAgYm9vbCBpc0VtcHR5ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAgaWYg
KGVtcHR5TW9kZSA9PSBOb3RFbXB0eQotICAgICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFy
a3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgICAgICB8fCAo
bmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0
ZWQuZ2V0KGkpKSkpIHsKLSAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIAorICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRD
ZWxsczsKKyAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2Nr
LmF0b21zKClbaV0pOwogCi0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gTmVlZHNEZXN0
cnVjdGlvbiAmJiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCisgICAgICAgIGlmIChkZXN0cnVjdGlv
bk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpLT5jYWxsRGVzdHJ1Y3Rvcigq
dm0oKSk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKQEAg
LTE0NCwxMiArMTQyLDMzIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxp
emUKICAgICAgICAgICAgIGhlYWQgPSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291bnQ7CiAg
ICAgICAgIH0KKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgICAgICBpZiAoZW1wdHlNb2RlID09
IE5vdEVtcHR5CisgICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYm
IGJsb2NrLm1fbWFya3MuZ2V0KGkpKQorICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkg
eworICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tI
YXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZykKKyAgICAgICAgICAgIGRlYWRDZWxs
cy5hcHBlbmQoaSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkp
OwogICAgIH0KLQorICAgIAogICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBuZXds
eUFsbG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCiAgICAgLy8gb3Ro
ZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2
ZS4KICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRl
ZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCiAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uID0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uOworICAgIAorICAgIGlmIChzcGFjZSgpLT5p
c01hcmtpbmcoKSkKKyAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgIAorICAgIGlm
IChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVu
bmluZykgeworICAgICAgICBmb3IgKHNpemVfdCBpIDogZGVhZENlbGxzKQorICAgICAgICAgICAg
aGFuZGxlRGVhZENlbGwoaSk7CisgICAgfQogCiAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxp
c3Q6Omxpc3QoaGVhZCwgY291bnQgKiBjZWxsU2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTE3NywxMiArMTk2LDE4IEBAIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwKFN3ZWUKICAgICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5p
c0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlv
biA9PSBOZWVkc0Rlc3RydWN0aW9uKQotICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RT
Y3JpYmJsZU1vZGU8TmVlZHNEZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKLSAgICByZXR1cm4gc3dl
ZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8RG9lc05vdE5lZWREZXN0cnVjdGlvbj4oc3dlZXBN
b2RlKTsKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrKCkubV9s
b2NrLmxvY2soKTsKKyAgICAKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pIHsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAg
ICAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVz
dHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmc+KHN3ZWVwTW9kZSk7CisgICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzPihzd2Vl
cE1vZGUpOworICAgIH0KKyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8
QmxvY2tIYXNOb0Rlc3RydWN0b3JzPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6
U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgogRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlIHN3ZWVw
TW9kZSkKIHsKICAgICBpZiAoc2NyaWJibGVGcmVlQ2VsbHMoKSkKQEAgLTE5MCw3ICsyMTUsNyBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3
ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFNjcmliYmxlPihz
d2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgordGVtcGxh
dGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25N
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgogRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGUoU3dl
ZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICAvLyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBp
cyB0aGUgb25seSB3YXkgdG8ga25vdyBpZiB0aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9u
bHkKQEAgLTIwNSw3ICsyMzAsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2Vl
cEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQ8Tm90
RW1wdHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlPihzd2VlcE1vZGUpOwogfQogCi10
ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1v
ZGUgc2NyaWJibGVNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2Rl
IGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVz
dHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVN
b2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RIYXNO
ZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChoYXNBbnlOZXds
eUFsbG9jYXRlZCgpKQpAQCAtMjEzLDcgKzIzOCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGU8
ZW1wdHlNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZD4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRs
ZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2Vl
cE1vZGUpCiB7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0yMjEs
MTAgKzI0NiwxNiBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAg
ICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlPGVtcHR5TW9kZSwgU3dlZXBPbmx5
LCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlPigpOwog
fQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUg
ZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJi
bGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxv
Y2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5
TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKQogewotICAgIGlm
IChhcmVNYXJrc1N0YWxlKCkpCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSBzcGFj
ZSgpLT5tYXJraW5nVmVyc2lvbigpOworICAgIGJvb2wgbWFya3NBcmVVc2VmdWwgPSAhYmxvY2so
KS5hcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+
aXNNYXJraW5nKCkpCisgICAgICAgIG1hcmtzQXJlVXNlZnVsIHw9IGJsb2NrKCkubWFya3NDb252
ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmICgh
bWFya3NBcmVVc2VmdWwpCiAgICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9k
ZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0
ZWRNb2RlLCBNYXJrc1N0YWxlPigpOwogICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5
TW9kZSwgc3dlZXBNb2RlLCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxv
Y2F0ZWRNb2RlLCBNYXJrc05vdFN0YWxlPigpOwogfQpAQCAtMjQxLDI0ICsyNzIsNiBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQg
PSB0cnVlOwogfQogCi1jbGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFy
a2VkQmxvY2s6OlZvaWRGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1
bmN0b3IoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9j
aykKLSAgICB7Ci0gICAgfQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENl
bGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1h
cmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAg
IG1fYmxvY2stPnNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0
aW9uU3RhdHVzOjpDb250aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6
OkhhbmRsZSogbV9ibG9jazsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFs
bG9jYXRpbmcoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAg
LTI2NiwxMiArMjc5LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRp
bmcKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBp
ZiAoIWlzRnJlZUxpc3RlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgd2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9y
IGFsbG9jYXRpb24gc2luY2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxy
ZWFkeSBkb25lIHN0b3BBbGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxp
c3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAor
ICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwg
IlxuIik7CisgICAgCiAgICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhl
YXAgaW50cm9zcGVjdGlvbi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIg
ZnJlZSBsaXN0IGFyZSBub3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAg
ICAgLy8gd2F5IHRvIHRlbGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI5Nywx
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXds
eUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVh
cCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rv
cik7CisgICAgZm9yRWFjaENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kKSAtPiBJdGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxv
Y2F0ZWQoY2VsbCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51
ZTsKKyAgICAgICAgfSk7CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0
LAogICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwp
LCAiXG4iKTsKICAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVl
ZHNEZXN0cnVjdGlvbikKICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAg
IGNsZWFyTmV3bHlBbGxvY2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMzMCwxNCBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAg
ZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVB
bGxvY2F0aW5nIVxuIik7CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhp
cykpOwogICAgIEFTU0VSVCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXds
eUFsbG9jYXRlZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IlRoZXJlIGFpbid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1l
YW5zIHdlIGhhZCBhbHJlYWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFs
bG9jYXRpb24uCiAgICAgICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICsz
ODEsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAg
ICAgaWYgKGhhbmRsZSgpLmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAg
ICAgIHx8ICFtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikp
IHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBDbGVhcmluZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsK
ICAgICAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlz
IGFscmVhZHkgcmVjb2duaXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9j
ayBkaWQgbm90IHN1cnZpdmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsg
Yml0cyB0aGUgb2xkIGZhc2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBv
c3NpYmxlIGZvciBzdWNoIGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVw
LXRvLQpAQCAtMzYyLDYgKzM5MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xv
dyhIZWFwVmUKICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAg
ICBtX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQor
ICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4i
KTsKICAgICAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+
bmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8v
IE1lcmdlIHRoZSBjb250ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2Ug
Z2V0IHRoZSBmdWxsIHNldCBvZiBiaXRzCkBAIC00MjksNyArNDYwLDcgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIo
dGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCFcbiIpOwog
ICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSBmYWxzZTsK
LSAgICBhbGxvY2F0b3IoKS0+c2V0SXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CisgICAgYWxsb2Nh
dG9yKCktPmF0b21pY1NldEFuZENoZWNrSXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CiB9CiAKIHNp
emVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDMwICsxOTAs
MzIgQEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgdm9pZCop
OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlPgorICAgICAgICBl
bnVtIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHsgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBCbG9ja0hh
c0Rlc3RydWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nIH07
CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZT4KICAgICAg
ICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlID0gU3dl
ZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAgICBlbnVtIFNjcmliYmxlTW9kZSB7IERvbnRT
Y3JpYmJsZSwgU2NyaWJibGUgfTsKICAgICAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0
cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxl
Y3RFbXB0eU1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAg
ICBlbnVtIEVtcHR5TW9kZSB7IElzRW1wdHksIE5vdEVtcHR5IH07CiAgICAgICAgIAotICAgICAg
ICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAg
ICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1v
ZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQo
U3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTmV3bHlBbGxv
Y2F0ZWRNb2RlIHsgSGFzTmV3bHlBbGxvY2F0ZWQsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQg
fTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2Rl
LCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1w
dHlNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRl
ZE1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVw
TW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVk
TW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJl
ZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGVu
dW0gTWFya3NNb2RlIHsgTWFya3NTdGFsZSwgTWFya3NOb3RTdGFsZSB9OwogICAgICAgICAKLSAg
ICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KKyAgICAgICAgdGVtcGxh
dGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1v
ZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgogICAgICAgICBGcmVlTGlzdCBzcGVj
aWFsaXplZFN3ZWVwKCk7CiAgICAgICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJ
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNw
YWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3Bh
Y2U6OnByZXBhcmVGb3JNYXJraW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2Nh
dGluZygpCiB7Ci0gICAgQVNTRVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0
b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlv
blN0YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVX
b3JsZFNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lv
biAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDcgQEAgc3RhdGljIHZvaWQgdmFsaWRhdGUoSlND
ZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFw
KQotICAgIDogbV9zdGFjaygpCi0gICAgLCBtX2J5dGVzVmlzaXRlZCgwKQotICAgICwgbV9ieXRl
c0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKICAgICAsIG1fdmlzaXRDb3VudCgw
KQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAgICwgbV9tYXJraW5nVmVyc2lv
bihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCkBAIC05MSw3ICs4OSw3IEBAIFNsb3RWaXNp
dG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQogCiBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9y
KCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygpOworICAgIGNsZWFyTWFya1N0YWNrcygpOwogfQog
CiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQpAQCAtMTA5LDE2ICsxMDcsMTcg
QEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIAogdm9pZCBTbG90VmlzaXRv
cjo6cmVzZXQoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKCFtX29wYXF1ZVJvb3RzLnNpemUoKSk7
CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fYnl0ZXNDb3BpZWQgPSAwOwogICAgIG1f
dmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyID0gbnVsbHB0cjsKLSAg
ICBBU1NFUlQoIW1fY3VycmVudENlbGwpOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX2N1cnJlbnRD
ZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2soKQordm9pZCBTbG90
VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBtX3N0YWNrLmNsZWFyKCk7CisgICAg
bV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0YXRvclN0YWNrLmNsZWFyKCk7CiB9
CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0
aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSlND
ZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgICAg
ICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogCiAgICAgICAgIGFwcGVu
ZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3ICsyMDksNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1hcmtlCiAgICAgLy8gSW5kaWNh
dGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAgICAgLy8gSW4gY2FzZSBvZiBj
b25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlzIGdyZXkgaW4gdGhpcyBHQyBj
eWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlvbjogaXQncyBhIG5ldyBvYmpl
Y3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQgcmVtZW1iZXJlZCBvYmplY3Qu
Ci0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgY2VsbC0+
c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgYXBwZW5kVG9NYXJrU3Rh
Y2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiArMjI3LDE5IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJr
ZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCghY2VsbC0+aXNaYXBwZWQoKSk7Ci0g
ICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6TmV3R3JleSB8fCBjZWxs
LT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpOworICAgIEFTU0VSVChjZWxsLT5j
ZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGNvbnRhaW5lci5ub3Rl
TWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNlICJqdXN0IHdvcmsiIGJlY2F1c2Ug
dGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuIEJ1
dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hlbiB3ZSBkbyBjb25jdXJyZW50IEdD
LgogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNpdGVkICs9IGNvbnRhaW5lci5j
ZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworICAgIG1fY29sbGVj
dG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb011
dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQoreworICAgIG1fbXV0YXRvclN0YWNr
LmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWFya0F1eGlsaWFyeShjb25z
dCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTYsMTcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNs
b3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVu
dENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAgbV9vbGRDZWxsU3RhdGUgPSBjZWxs
LT5jZWxsU3RhdGUoKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgZGF0YUxvZygiVmlzaXRp
bmcgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIGlmIChtX2lzVmlzaXRpbmdNdXRhdG9y
U3RhY2spCisgICAgICAgICAgICBkYXRhTG9nKCIgKG11dGF0b3IpIik7CisgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgfQogICAgIAotICAgIC8vIFRoZXJlIGlzIG5vIHJhY2UgaGVyZSAtIHRo
ZSBjZWxsIHN0YXRlIGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LiBHcmV5IG9iamVjdHMgY2FuIG9u
bHkgYmUKLSAgICAvLyB2aXNpdGVkIGJ5IG9uZSBtYXJraW5nIHRocmVhZC4gTmVpdGhlciB0aGUg
YmFycmllciBub3IgbWFya2luZyB3aWxsIGNoYW5nZSB0aGUgc3RhdGUgb2YgYW4KLSAgICAvLyBv
YmplY3QgdGhhdCBpcyBhbHJlYWR5IGdyZXkuCi0gICAgQVNTRVJUKG1fb2xkQ2VsbFN0YXRlID09
IENlbGxTdGF0ZTo6T2xkR3JleSB8fCBtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dy
ZXkpOworICAgIC8vIEZ1bm55IHN0b3J5OiBpdCdzIHBvc3NpYmxlIGZvciB0aGUgb2JqZWN0IHRv
IGJlIGJsYWNrIGFscmVhZHksIGlmIHdlIGJhcnJpZXIgdGhlIG9iamVjdCBhdAorICAgIC8vIGFi
b3V0IHRoZSBzYW1lIHRpbWUgdGhhdCBpdCdzIG1hcmtlZC4gVGhhdCdzIGZpbmUuIEl0J3MgYSBn
bmFybHkgYW5kIHN1cGVyLXJhcmUgcmFjZS4gSXQncworICAgIC8vIG5vdCBjbGVhciB0byBtZSB0
aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0byBiYWlsIGhlcmUgaWYgdGhl
IG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8gYmxhY2suCiAgICAgCiAgICAgY2VsbC0+c2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwogICAgIApAQCAtMzI2LDIzICsz
MzMsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIH0K
ICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RCdWlsZGVyKSkgewotICAgICAg
ICBpZiAobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KQorICAgICAgICBpZiAo
IW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKICAgICAgICAgICAgIG1faGVhcFNuYXBzaG90QnVp
bGRlci0+YXBwZW5kTm9kZShjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKICAgICB9CiB9CiAK
LXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQordm9pZCBTbG90VmlzaXRv
cjo6ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJy
YXkmIHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBjYW4g
YWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8gYXNzdW1lIHRoYXQgZG9uYXRp
bmcgaXMgbm90IHByb2ZpdGFibGUuCiAKICAgICAvLyBBdm9pZCBsb2NraW5nIHdoZW4gYSB0aHJl
YWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgaWYgKG1fc3Rh
Y2suc2l6ZSgpIDwgMikKKyAgICBpZiAoZnJvbS5zaXplKCkgPCAyKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFyZWQgd29yayBxdWV1ZWQgdXAs
IGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhhdCBkb25hdGluZyBtb3JlIGlz
IG5vdCBwcm9maXRhYmxlLgotICAgIGlmIChtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suc2l6ZSgp
KQorICAgIGlmICh0by5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIHdlJ3Jl
IGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lIHRoYXQg
YW5vdGhlcgpAQCAtMzUyLDI2ICszNTksNDMgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25v
d25QYXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE90aGVyd2lzZSwgYXNzdW1l
IHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCi0gICAgbV9zdGFj
ay5kb25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2spOworICAgIGZyb20u
ZG9uYXRlU29tZUNlbGxzVG8odG8pOwogCiAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCit2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sKKyAgICBkb25hdGVLbm93blBh
cmFsbGVsKG1fY29sbGVjdG9yU3RhY2ssICptX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3Rh
Y2spOworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9tdXRhdG9yU3RhY2ssICptX2hlYXAubV9z
aGFyZWRNdXRhdG9yTWFya1N0YWNrKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oTW9u
b3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwog
ICAgCi0gICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICBtX3N0YWNrLnJl
ZmlsbCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmlt
dW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fc3RhY2sucmVt
b3ZlTGFzdCgpKTsKKyAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSB8fCAh
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNlZCh0aW1lb3V0KSkgeworICAg
ICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2Nv
bGxlY3RvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0
YWNrID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlv
bnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX2NvbGxlY3RvclN0
YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlz
aXRDaGlsZHJlbihtX2NvbGxlY3RvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9tdXRhdG9y
U3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICAvLyBXZSBrbm93IGZvciBzdXJlIHRoYXQgd2Ug
YXJlIHZpc2l0aW5nIG9iamVjdHMgYmVjYXVzZSBvZiB0aGUgYmFycmllciwgbm90IGJlY2F1c2Ug
b2YKKyAgICAgICAgICAgIC8vIG1hcmtpbmcuIE1hcmtpbmcgd2lsbCB2aXNpdCBhbiBvYmplY3Qg
ZXhhY3RseSBvbmNlLiBUaGUgYmFycmllciB3aWxsIHZpc2l0IGl0CisgICAgICAgICAgICAvLyBw
b3NzaWJseSBtYW55IHRpbWVzLCBhbmQgYWx3YXlzIGFmdGVyIGl0IHdhcyBhbHJlYWR5IG1hcmtl
ZC4KKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IHRydWU7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNj
YW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYg
Y291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9tdXRhdG9yU3Rh
Y2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfQogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVs
KCk7CiAgICAgfQogICAgIAogICAgIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwogfQog
Ci12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJl
ZERyYWluTW9kZSkKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6
ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUsIE1vbm90b25p
Y1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAK
QEAgLTM5Miw0OCArNDE2LDYwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChT
aGFyZWQKICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVpdGhlciB0ZXJtaW5hdGlvbiBp
cyByZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsKICAgICAgICAgICAgICAgICAv
LyBmb3IgdXMgdG8gZG8uCiAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OworICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJlYWNoIHRlcm1pbmF0aW9uPwog
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNsYXZlcyBrbm93IGl0J3MgdGlt
ZSBmb3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9t
YXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsgdG8gYmUgZG9uZT8KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFj
ay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVk
TXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndp
c2Ugd2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91dCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoc2hhcmVk
RHJhaW5Nb2RlID09IFNsYXZlRHJhaW4pOworCisgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBz
ZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3Vs
dDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gRGlkIHdl
IGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFzdGVyIGtub3cuCiAgICAgICAg
ICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAg
ICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtp
bmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAgICAgICAgICAgICAgIG1faGVh
cC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KAotICAgICAgICAgICAgICAgICAgICBs
b2NrLAorICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53
YWl0VW50aWwoCisgICAgICAgICAgICAgICAgICAgIGxvY2ssIHRpbWVvdXQsCiAgICAgICAgICAg
ICAgICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVh
cC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFj
ay0+aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9oZWFwLm1fcGFy
YWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGN1cnJlbnQgcGhhc2UgZG9uZT8g
SWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgaWYgKG1f
aGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25l
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJv
bSgKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251
bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0
YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtl
cnMpOworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAg
ICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLCBtX2hlYXAubV9u
dW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJl
ck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAgICB9CiB9CiAKQEAgLTQ1Myw3
ICs0ODksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVSb290KHZvaWQqIHJvCiBib29s
IFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCogcm9vdCkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMu
aXNFbXB0eSgpKTsKICAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuY29udGFpbnMocm9v
dCk7CiB9CiAKQEAgLTQ2NywxMyArNTAyLDYgQEAgVHJpU3RhdGUgU2xvdFZpc2l0b3I6OmNvbnRh
aW5zT3BhcXVlUm9vdAogICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOwogfQogCi1pbnQgU2xvdFZp
c2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1v
ZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIG1f
aGVhcC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKLX0KLQogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VP
cGFxdWVSb290c0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9vcGFxdWVSb290cy5pc0VtcHR5
KCkpCkBAIC00OTcsMTUgKzUyNSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGUoKQogICAg
IGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5k
RHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0
aW1lb3V0KQogewogICAgIGRvbmF0ZSgpOwotICAgIGRyYWluKCk7CisgICAgZHJhaW4odGltZW91
dCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHMoKQogewotICAgIEFT
U0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQg
d2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KICAgICB7CiAgICAgICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3RzTXV0ZXgpOwogICAgICAgICBm
b3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQpAQCAtNTI2LDEwICs1NTMsOSBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGCiAgICAgICAgIG1faGVhcC5tX3Vu
Y29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Cit2
b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgZm9y
IChjb25zdCBKU0NlbGwqIGNlbGwgOiBtYXJrU3RhY2soKSkKLSAgICAgICAgZGF0YUxvZygqY2Vs
bCwgIlxuIik7CisgICAgb3V0LnByaW50KCJDb2xsZWN0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAo
Y29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0YXRvcjogWyIsIHBvaW50ZXJMaXN0RHVtcCht
dXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gMjA4NTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhhbmRsZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BhcXVlUm9vdFNldC5oIgorI2luY2x1ZGUgPHd0
Zi9Nb25vdG9uaWNUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Nyw5ICs1OCwxMSBA
QCBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoSGVhcCYpOwogICAgIH5TbG90VmlzaXRvcigpOwog
Ci0gICAgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0dXJuIG1fc3RhY2s7IH0KLSAg
ICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGFj
azsgfQotCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIHsgcmV0dXJu
IG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFj
aygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkm
IGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0K
KyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgCiAgICAgVk0mIHZtKCk7CiAgICAgY29uc3QgVk0m
IHZtKCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwpAQCAtODQsMjQgKzg3LDIzIEBA
IHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCop
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBj
b25zdDsKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RUcmlTdGF0ZSh2b2lkKikgY29u
c3Q7Ci0gICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAgYm9vbCBpc0VtcHR5KCkgeyBy
ZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBt
X2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JTdGFjay5pc0VtcHR5KCk7IH0K
IAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9pZCByZXNldCgpOwotICAgIHZv
aWQgY2xlYXJNYXJrU3RhY2soKTsKKyAgICB2b2lkIGNsZWFyTWFya1N0YWNrcygpOwogCiAgICAg
c2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNWaXNpdGVkOyB9Ci0g
ICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc0NvcGllZDsgfQog
ICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9CiAK
ICAgICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQgZHJhaW4oKTsKLSAgICB2b2lkIGRvbmF0ZUFu
ZERyYWluKCk7CisgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9u
aWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRvbmF0ZUFuZERyYWluKE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogICAgIAogICAgIGVudW0g
U2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJhaW4gfTsKLSAgICB2b2lkIGRy
YWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOworICAgIGVudW0gY2xhc3MgU2hhcmVkRHJh
aW5SZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9OworICAgIFNoYXJlZERyYWluUmVzdWx0IGRyYWlu
RnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90
b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMo
KTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKQEAgLTEyNCw2
ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAKKyAgICB2b2lkIG1lcmdlT3Bh
cXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJh
bGxlbE1vZGVFbmFibGVyOwogICAgIApAQCAtMTQxLDIxICsxNDUsMjMgQEAgcHJpdmF0ZToKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogICAgIHZvaWQgYXBwZW5kVG9NYXJr
U3RhY2soQ29udGFpbmVyVHlwZSYsIEpTQ2VsbCopOwogICAgIAorICAgIHZvaWQgYXBwZW5kVG9N
dXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCopOworICAgIAogICAgIHZvaWQgbm90ZUxpdmVB
dXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKTsKIAogICAgIHZv
aWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAKICAgICB2b2lkIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKKyAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJy
YXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSBtX3N0
YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3RhY2s7CisgICAgTWFya1N0YWNr
QXJyYXkgbV9tdXRhdG9yU3RhY2s7CiAgICAgT3BhcXVlUm9vdFNldCBtX29wYXF1ZVJvb3RzOyAv
LyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3QgdmlzaWJsZSB0byB0aGUgZ2FyYmFn
ZSBjb2xsZWN0b3IuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNWaXNpdGVkOwotICAgIHNpemVf
dCBtX2J5dGVzQ29waWVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291bnQ7CiAgICAgYm9vbCBtX2lz
SW5QYXJhbGxlbE1vZGU7CiAgICAgCkBAIC0xNjUsNyArMTcxLDcgQEAgcHJpdmF0ZToKIAogICAg
IEhlYXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNuYXBzaG90QnVpbGRlciB7IG51bGxwdHIgfTsK
ICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07Ci0gICAgQ2VsbFN0YXRlIG1f
b2xkQ2VsbFN0YXRlOworICAgIGJvb2wgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrIHsgZmFsc2Ug
fTsKIAogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTUgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6
OmFkZFVuY29uZGl0aW9uYQogCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011
dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6
ZSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiBpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhl
YXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsK
KyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRTdG9yZVN0cnVjdHVyZQogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFIU3RydWN0dXJl
SURJc1ZhbGlkKTsKICAgICAgICAgY29ycmVjdFN0cnVjdHVyZS5saW5rKCZqaXQpOwogCi0gICAg
ICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgSnVtcCBj
b3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKSk7CiAg
ICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJbmRleGluZ1R5cGVJc1ZhbGlkKTsKICAgICAg
ICAgY29ycmVjdEluZGV4aW5nVHlwZS5saW5rKCZqaXQpOwogCkBAIC00MTUsNyArNDE1LDcgQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVyZQogICAgIH0KICNlbHNlCiAg
ICAgLy8gRG8gYSAzMi1iaXQgd2lkZSBzdG9yZSB0byBpbml0aWFsaXplIHRoZSBjZWxsJ3MgZmll
bGRzLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPm9iamVjdElu
aXRpYWxpemF0aW9uQmxvYigpKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihz
dHJ1Y3R1cmVQdHItPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpKTsKICAg
ICBqaXQuc3RvcmVQdHIoc3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDg1OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzE4LDggKzEzMTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlNjQoc2NyYXRj
aCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSk7CiAjZWxzZQogICAgICAgICAvLyBTdG9yZSBhbGwgdGhlIGluZm8gZmxhZ3MgdXNpbmcg
YSBzaW5nbGUgMzItYml0IHdpZGUgbG9hZCBhbmQgc3RvcmUuCi0gICAgICAgIGxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgc3RvcmUzMihzY3JhdGNoLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSk7CisgICAgICAg
IGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVyZTo6aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgICAgIHN0
b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpKTsKIAogICAgICAgICAvLyBTdG9yZSB0aGUgU3RydWN0
dXJlSUQKICAgICAgICAgc3RvcmVQdHIoc3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTk2LDcgKzk5
Niw3IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICAgICAg
c3RvcmUzMihpbmRleGluZ1R5cGUsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1
Y3R1cmVJRCgpKTsKICAgICB9CiAKLSAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOworICAgIGxvYWQ4KEFkZHJlc3MoY2Vs
bCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOwog
fQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUlu
ZGV4V2l0aENlbGwoUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwMSw4ICsyMjAx
LDggQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1
bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0
ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwor
ICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1bHQpOwogICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjExLDggKzIyMTEsOCBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAg
ICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9i
amVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwotICAgIG9i
amVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOwor
ICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9y
YWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXpl
KTsKKyAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODU5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEwMTYsNiAr
MTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAg
ICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihy
ZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVC
bG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50
U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAg
ICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9k
ZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBh
bHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KQEAgLTEw
MzgsMTQgKzEwMzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0
aQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBv
aW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUq
Pigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2lu
dFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAg
Y2FzZSBEeW5hbWljOgpAQCAtMTE1NywxMSArMTE1NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfdG9fYXJndW1lbnRzKEluc3RyCiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwotICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwog
ICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisg
ICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiAr
MTc4LDE1IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIFNUQVRJ
Q19BU1NFUlQoRXZhbENvZGUgPT0gMSk7CiAgICAgU1RBVElDX0FTU0VSVChGdW5jdGlvbkNvZGUg
PT0gMik7CiAgICAgU1RBVElDX0FTU0VSVChNb2R1bGVDb2RlID09IDMpOworICAgIAorICAgIFNU
QVRJQ19BU1NFUlQoSXNBcnJheSA9PSAweDAxKTsKKyAgICBTVEFUSUNfQVNTRVJUKEluZGV4aW5n
U2hhcGVNYXNrID09IDB4MEUpOworICAgIFNUQVRJQ19BU1NFUlQoTm9JbmRleGluZ1NoYXBlID09
IDB4MDApOworICAgIFNUQVRJQ19BU1NFUlQoSW50MzJTaGFwZSA9PSAweDA0KTsKKyAgICBTVEFU
SUNfQVNTRVJUKERvdWJsZVNoYXBlID09IDB4MDYpOworICAgIFNUQVRJQ19BU1NFUlQoQ29udGln
dW91c1NoYXBlID09IDB4MDgpOworICAgIFNUQVRJQ19BU1NFUlQoQXJyYXlTdG9yYWdlU2hhcGUg
PT0gMHgwQSk7CisgICAgU1RBVElDX0FTU0VSVChTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPT0g
MHgwQyk7CiAKICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oKHJlaW50
ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2VsbD4qPigweDQwMDApLT5zbG90KCkpKSAtIDB4
NDAwMCkpOwogICAgIHN0YXRpY19hc3NlcnQoUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9PSAweDYs
ICJMTEludCBhc3N1bWVzIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgaXMgPT0gMHg2Iik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE1MDUsNiAr
MTUwNSw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogLm9wR2V0QnlWYWxPdXRPZkJvdW5kczoK
ICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MCkKICAgICBzdG9yZWIgMSwgQXJyYXlQcm9m
aWxlOjptX291dE9mQm91bmRzW3QwXQorICAgIGptcCAub3BHZXRCeVZhbFNsb3cKIAogLm9wR2V0
QnlWYWxOb3RJbmRleGVkU3RvcmFnZToKICAgICAjIEZpcnN0IGxldHMgY2hlY2sgaWYgd2UgZXZl
biBoYXZlIGEgdHlwZWQgYXJyYXkuIFRoaXMgbGV0cyB1cyBkbyBzb21lIGJvaWxlcnBsYXRlIHVw
IGZyb250LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsMTQgKzMzMywxNCBAQCBlbHNlCiBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFi
b3V0IGJ1dHRlcmZsaWVzLgotY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMQotY29u
c3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMzAKLWNvbnN0IE5vSW5kZXhpbmdTaGFwZSAg
ICAgICAgICA9IDAKLWNvbnN0IEludDMyU2hhcGUgICAgICAgICAgICAgICA9IDIwCi1jb25zdCBE
b3VibGVTaGFwZSAgICAgICAgICAgICAgPSAyMgotY29uc3QgQ29udGlndW91c1NoYXBlICAgICAg
ICAgID0gMjYKLWNvbnN0IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDI4Ci1jb25zdCBTbG93
UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAorY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAg
ID0gMHgwMQorY29uc3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMHgwRQorY29uc3QgTm9J
bmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMAorY29uc3QgSW50MzJTaGFwZSAgICAgICAgICAg
ICAgID0gMHgwNAorY29uc3QgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMHgwNgorY29uc3Qg
Q29udGlndW91c1NoYXBlICAgICAgICAgID0gMHgwOAorY29uc3QgQXJyYXlTdG9yYWdlU2hhcGUg
ICAgICAgID0gMHgwQQorY29uc3QgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMHgwQwogCiAj
IFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDYKQEAgLTg4Nyw3ICs4ODcsNyBA
QCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiAgICAgY29uc3QgaW5k
ZXhpbmdUeXBlID0gY2VsbEFuZEluZGV4aW5nVHlwZSAKICAgICBsb2FkaSBKU0NlbGw6Om1fc3Ry
dWN0dXJlSURbY2VsbF0sIHNjcmF0Y2gKICAgICBzdG9yZWkgc2NyYXRjaCwgQXJyYXlQcm9maWxl
OjptX2xhc3RTZWVuU3RydWN0dXJlSURbcHJvZmlsZV0KLSAgICBsb2FkYiBKU0NlbGw6Om1faW5k
ZXhpbmdUeXBlW2NlbGxdLCBpbmRleGluZ1R5cGUKKyAgICBsb2FkYiBKU0NlbGw6Om1faW5kZXhp
bmdUeXBlQW5kTWlzY1tjZWxsXSwgaW5kZXhpbmdUeXBlCiBlbmQKIAogbWFjcm8gc2tpcElmSXNS
ZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJldmlzaW9uIDIwODU5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDE1ICs5NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZh
dGU6Ci0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQogICAgIERlZmVyR0MgbV9kZWZlckdDOwot
I2Vsc2UKLSAgICBzdHJ1Y3QgTm9EZWZlciB7Ci0gICAgICAgIE5vRGVmZXIoSGVhcCYgaGVhcCkg
OiBtX2hlYXAoaGVhcCkgeyB9Ci0gICAgICAgIEhlYXAmIG1faGVhcDsKLSAgICB9OwotICAgIE5v
RGVmZXIgbV9kZWZlckdDOwotI2VuZGlmCiB9OwogCiBjbGFzcyBDb25jdXJyZW50SklUTG9ja2Vy
IDogcHVibGljIENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDEzIEBAIGJv
b2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKICAgICBUeXBlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5j
YW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhp
c09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAg
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsK
KyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCByZXN1bHQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CisgICAgYm9vbCByZXN1
bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgs
IHNsb3QpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+
CkBAIC0xMjksNyArMTMxLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUlu
ZGV4KAogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KGNlbGwpOwogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0KKyAgICAKICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNj
ZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewogICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1
aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIw
ODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTIsMjEgKzUz
LDI1IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBv
ZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBFOwotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAwOwotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBm
b3IgYXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAg
ICAgICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAg
ICAgICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hh
cGUgICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3Jh
Z2VTaGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0
QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRl
eGluZ1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgwRTsKK3N0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAgICAgICA9IDB4MDA7CitzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAgICAgICAgICAgICAgPSAweDAyOyAv
LyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQz
MlNoYXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDsKK3N0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAgICAgICA9IDB4MDY7CitzdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICAgICAgICAgPSAweDA4Owor
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgICAgICAg
ID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNo
YXBlICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdT
aGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJ
bmRleGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdT
aGFwZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51
bWJlck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdz
IGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkK
IC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICA9IDB4MTA7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAw
eDEwOworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZv
ciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVs
ZCAgICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlw
ZUxvY2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJy
YXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgyLDYgQEAgc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5j
bHVkaW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5
cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7
CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGluZ1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJ
c0hlbGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0
aG07CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDkg
QEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhC
aWFzOwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIAorICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MTA2MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0
b3JhCiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVycmVkIGFyb3VuZCB0aGUgdW5zaGlmdENv
dW50U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMgdGhlIGJ1dHRlcmZseSBpbgogICAgIC8v
IGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQgd2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6
ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKKyAgICBKU0NlbGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKICAgICAKICAg
ICBpZiAobW92ZUZyb250ICYmIHN0b3JhZ2UtPm1faW5kZXhCaWFzID49IGNvdW50KSB7CiAgICAg
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hp
ZnQoc3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50Owog
ICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOwot
ICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRl
cmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVj
dG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+
YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNs
b3dDYXNlKHZtLCBkZWZlckdDLCBtb3ZlRnJvbnQsIGNvdW50KSkKQEAgLTEwOTAsNiArMTA5NCw3
IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0
SW5kZXhdLmNsZWFyKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDggKzEwMCwzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CiAgICAgYm9v
bCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25zdDsKICAgICBib29sIGlzQVBJVmFsdWVX
cmFwcGVyKCkgY29uc3Q7CisgICAgCisgICAgLy8gRWFjaCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxv
Y2suIEN1cnJlbnRseSBpdCdzIHNpbXBseSBhdmFpbGFibGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBp
dC4gSXQncworICAgIC8vIGEgZnVsbC1ibG93biBXVEY6OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxv
Y2sgaXMgY3VycmVudGx5IHVzZWQgaW4gSlNBcnJheSBhbmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBv
cmRlcmluZyB3aXRoIHRoZSBTdHJ1Y3R1cmUgbG9jayBpcyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9j
ayBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LgorICAgIHZvaWQgbG9ja0ludGVybmFsTG9jaygpOwor
ICAgIHZvaWQgdW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgCisgICAgY2xhc3MgSW50ZXJuYWxM
b2NrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxs
KQorICAgICAgICAgICAgOiBtX2NlbGwoY2VsbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9j
ZWxsLT5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5J
bnRlcm5hbExvY2tlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+dW5sb2NrSW50
ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
SlNDZWxsKiBtX2NlbGw7CisgICAgfTsKIAogICAgIEpTVHlwZSB0eXBlKCkgY29uc3Q7CisgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdDsKICAgICBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Q7CiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUlEOyB9CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KSBjb25zdDsKQEAgLTE2Nyw2ICsxOTEsMTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxs
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0
Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhp
cyktPm1fY2VsbFN0YXRlID0gZGF0YTsgfQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4
Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUg
bmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VXZWFrUmVsYXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQor
CisgICAgQ2VsbFN0YXRlIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxs
U3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRl
LCBuZXdTdGF0ZSk7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9m
ZnNldCgpCiAgICAgewpAQCAtMTgzLDkgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBw
dHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhp
cyBmaWVsZC4gQWx3YXlzIHVzZSBhIENBUyBsb29wLCBzaW5jZSBzb21lIGJpdHMgYXJlIGZsaXBw
ZWQgdXNpbmcgQ0FTCisgICAgLy8gZnJvbSBvdGhlciB0aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJu
YWwgbG9jay4gT25lIGV4Y2VwdGlvbjogeW91IGRvbid0IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAg
ICAvLyBvYmplY3QgaGFzIG5vdCBlc2NhcGVkIHlldC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGlu
ZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgfQogCiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQpAQCAtMjI4LDcgKzI2NSw3IEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIFN0cnVj
dHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOwor
ICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0
byB0aGlzIGZpZWxkLiBBbHdheXMgQ0FTLgogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlwZUlu
Zm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgSlNDZWxs
OjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlubGluZSBKU0NlbGw6OkpTQ2VsbChWTSYs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9zdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUtPmlk
KCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAg
ICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkpCiAg
ICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSkKICAg
ICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCkBAIC03NCw3ICs3NCw3IEBAIGlu
bGluZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBpZiAoc3RydWN0dXJl
KSB7CiAjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKLSAg
ICAgICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgICAg
ICBtX2luZGV4aW5nVHlwZUFuZE1pc2MgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKTsKICAgICAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KTsKICAgICAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKQEAgLTkxLDkgKzkxLDE0IEBAIGlubGlu
ZSBKU1R5cGUgSlNDZWxsOjp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitp
bmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKK30KKwogaW5saW5lIEluZGV4aW5n
VHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW5kZXhp
bmdUeXBlOworICAgIHJldHVybiBpbmRleGluZ1R5cGVBbmRNaXNjKCkgJiBBbGxBcnJheVR5cGVz
OwogfQogCiBpbmxpbmUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHVyZSgpIGNvbnN0CkBAIC0x
OTUsMTcgKzIwMCwyNyBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzQVBJVmFsdWVXcmFwcGVyKCkg
CiAgICAgcmV0dXJuIG1fdHlwZSA9PSBBUElWYWx1ZVdyYXBwZXJUeXBlOwogfQogCi1pbmxpbmUg
dm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
QUxXQVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gdGhp
cy0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpKTsKICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVy
ZSgpCiAgICAgICAgIHx8IHRoaXMtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8IEhlYXA6OmhlYXAodGhpcyktPnN0cnVj
dHVyZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlLT5pZCgpKSA9PSBzdHJ1Y3R1cmUpOwotICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgIG1fZmxh
Z3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAgICAgbV90eXBl
ID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKLSAgICBtX2luZGV4aW5nVHlwZSA9IHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlw
ZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOworICAgIGlmICht
X2luZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5kZXhpbmdUeXBlKSB7CisgICAgICAgIEFTU0VS
VCghKG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkpOworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgb2xkVmFsdWUgPSBtX2luZGV4
aW5nVHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgbmV3VmFsdWUgPSAob2xk
VmFsdWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpIHwgc3RydWN0dXJlLT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAgICAgICBpZiAoV1RGOjphdG9taWNDb21wYXJl
RXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGluZ1R5cGVBbmRNaXNjLCBvbGRWYWx1ZSwgbmV3
VmFsdWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSBjb25zdCBN
ZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNvbnN0CkBAIC0yODQsMTEgKzI5OSwy
NiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0cnVjdG9yKFZNJiB2CiAgICAgaWYgKGlz
WmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoc3RydWN0dXJlSUQoKSk7Ci0g
ICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkKLSAgICAgICAg
c3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7Ci0g
ICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwp
IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwor
ICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNs
YXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAgICAgZGVzdHJveSh0aGlzKTsKKyAg
ICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4odGhpcyktPmNs
YXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwogICAgIHphcCgpOwogfQogCitp
bmxpbmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5hbExvY2soKQoreworICAgIEF0b21pYzxJbmRl
eGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1f
aW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6bG9j
aygqbG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKCkK
K3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8
SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlw
ZUxvY2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNp
b24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzExMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQg
SlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4K
ICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFn
ZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICAKLSAgICAvLyBNYXJrIHRoZSBh
cnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7
CisKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7
CisgICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5j
b250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAg
ICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQotICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwKTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAg
ICAgIC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHByb3RlY3QgQ29udGlndW91cy0+QXJyYXlTdG9y
YWdlIHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQgbWFrZSB0aGF0CisgICAgICAgIC8vIHJhY2Ug
d29yayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9j
a2VyKHRoaXMpOworICAgICAgICBJbmRleGluZ1R5cGUgbmV3VHlwZSA9IHRoaXMtPmluZGV4aW5n
VHlwZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICAgICAg
c3dpdGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdf
VFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVY
SU5HX1RZUEVTCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVj
dC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBXZSB3YW50IHRvIGRlZmVuZCBhZ2FpbnN0IG11
bHRpcGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhlIG11dGF0b3I6CisgICAgLy8gLSBNdXRhdG9y
IGNvdWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVyZmx5IGFuZCB0aGVuIGluc3RhbGwgYSBzdHJ1
Y3R1cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8vICAgcHJvcGVydGllcy4gVGhpcyB0cml2aWFs
bHkgd29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIG11dGF0ZSB0aGUgZGljdGlvbmFyeSBz
dHJ1Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBzdHJ1Y3R1cmUgbG9jayBmb3IKKyAgICAvLyAg
IGRpY3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAvLyAtIFRoZSBidXR0ZXJmbHkgY291bGQgc2hy
aW5rLCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgb2JqZWN0IHdhcyBhIGRpY3Rp
b25hcnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlzIG1lYW5zIHRoYXQgd2Ugd291bGQgZ2V0IHRo
ZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNxdWlyZSBhIGxvY2suIFRoYXQKKyAgICAvLyAg
IHRyaXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxkIGxvYWQgdGhlIHN0cnVjdHVyZSBiZWZvcmUg
dGhlIG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5CisgICAgLy8gICBhbmQgdGhlbiBsb2FkIHRo
ZSBidXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBXZSBwcm90ZWN0IGFnYWluc3QgdGhpcyBjYXNl
IGJ5IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3RydWN0dXJlIGEgc2Vjb25kIHRpbWUgYmVmb3Jl
IHNjYW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYnV0dGVyZmx5Cisg
ICAgLy8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVyZmx5IHRoYXQgdGhlIG11dGF0b3IgaGFkIGlu
c3RhbGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5nIHRoZQorICAgIC8vICAgc3R1cmN0dXJlLiBT
byBpZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBhIG5vbi1kaWN0aW9uYXJ5IHRoZW4gdGhlIGJ1
dHRlcmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBoYXZlIGJlZW4gc2hydW5rLgorICAgIFZNJiB2
bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkgeworICAgICAgICBzdHJ1Y3R1cmUt
PmxvY2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgp
OworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5
LmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBpZiAodGhp
c09iamVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1Y3R1cmUtPmlkKCkpCisgICAgICAgICAgICB0
aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7
CisgICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2so
KS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lz
Q2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1h
cmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwxNSArMjM5LDI1IEBAIHZvaWQgSlNGaW5hbE9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRo
aXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwotICAgIEJ1dHRlcmZseSogYnV0dGVy
Zmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAg
ICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1
cmUpOworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0g
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAg
ICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIGVsc2UKKyAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+
YnV0dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSkKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0
dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGlu
ZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwotCisg
ICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLnVubG9jaygp
OworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0Zv
ckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
bjsKICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVu
dGVyRGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4
QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVu
Z3RoKDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNl
dCh2bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1
cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBz
ZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgCiAgICAgcmV0dXJuIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03MzEsNyArNzc3LDkgQEAgQnV0dGVyZmx5KiBK
U09iamVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3Rv
cmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlVW5kZWNpZGVkKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIApA
QCAtNzQyLDcgKzc5MCw5IEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5p
dGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBp
LS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAtNzUzLDcgKzgwMyw5IEBAIENvbnRpZ3VvdXNEb3Vi
bGVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aWEKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJv
cGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtNzY0LDcgKzgxNiw5IEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMp
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTc5Nyw3ICs4NTEs
OSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMs
IHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldCgpKTsKICAg
ICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5z
aXRpb24oKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0
ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1
cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg4MCw3ICs5MzYsOSBAQCBBcnJheVN0
b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkCiAgICAgICAgIHN0b3JhZ2UtPm1fdmVj
dG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBzdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBzdG9y
YWdlOwogfQogCkBAIC05MzUsNyArOTkzLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFu
c2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBA
IC05ODEsNyArMTA0MSw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVU
b0EKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwg
bmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTAwNiw3ICsx
MDY4LDIyIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICB9
CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZs
eSgpKTsKKworICAgIC8vIFRoaXMgaGFzIGEgY3JhenkgcmFjZSB3aXRoIHRoZSBnYXJiYWdlIGNv
bGxlY3Rvci4gV2hlbiBjaGFuZ2luZyB0aGUgYnV0dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsCisgICAg
Ly8gdGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0cnVjdHVyZSBsYXN0LiBUaGUgY29sbGVj
dG9yIHdpbGwgYWx3YXlzIHJlYWQgdGhlIHN0cnVjdHVyZQorICAgIC8vIGZpcnN0LiBXZSBwcm9i
YWJseSBoYXZlIHRvIGZvbGxvdyB0aGF0IGNvbnZlbnRpb24gaGVyZSBhcyB3ZWxsLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIGNvbGxlY3RvcgorICAgIC8vIHdpbGwgc29tZXRpbWVzIHNlZSB0aGUgbmV3
IGJ1dHRlcmZseSAodGhlIG9uZSB3aXRoIEFycmF5U3RvcmFnZSkgd2l0aCB0aGUgb25seSBzdHJ1
Y3R1cmUgKHRoZQorICAgIC8vIG9uZSB0aGF0IHNheXMgdGhhdCB0aGUgYnV0dGVyZmx5IGlzIENv
bnRpZ3VvdXMpLiBXaGVuIHNjYW5uaW5nIENvbnRpZ3VvdXMsIHRoZSBjb2xsZWN0b3Igd2lsbAor
ICAgIC8vIG1hcmsgd29yZCBhdCBhZGRyZXNzZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRo
ZSBidXR0ZXJmbHkgcG9pbnRlciwgdXAgdG8gdGhlIHB1YmxpY0xlbmd0aAorICAgIC8vIGluIHRo
ZSBidXR0ZXJmbHkuIEJ1dCBhbiBBcnJheVN0b3JhZ2UgaGFzIHNvbWUgbm9uLXBvaW50ZXIgaGVh
ZGVyIGRhdGEgYXQgbG93IHBvc2l0aXZlCisgICAgLy8gb2Zmc2V0cyBmcm9tIHRoZSBidXR0ZXJm
bHkgLSBzbyB3aGVuIHRoaXMgcmFjZSBoYXBwZW5zLCB0aGUgY29sbGVjdG9yIHdpbGwgc3VyZWx5
IGNyYXNoCisgICAgLy8gYmVjYXVzZSBpdCB3aWxsIGZhaWwgdG8gZGVjb2RlIHR3byBjb25zZWN1
dGl2ZSBpbnQzMnMgYXMgaWYgaXQgd2FzIGEgSlNWYWx1ZS4KKyAgICAvLworICAgIC8vIEZvcnR1
bmF0ZWx5LCB3ZSBoYXZlIHRoZSBKU0NlbGwgbG9jayBmb3IgdGhpcyBwdXJwb3NlIQorICAgIAor
ICAgIEludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5l
d1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVy
ZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTE0NjgsNyArMTU0NSw3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2UKIAogICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIG9mZnNldCkpOwogCkBAIC0yMDE5LDcgKzIwOTYsNyBAQCBib29sIEpTT2JqZWN0
OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAKICAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBt
YXAgPSBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLmdldCgp
OwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7Ci0KKyAgICAKICAgICAvLyAxLiBMZXQgY3VycmVu
dCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHldXSBpbnRlcm5h
bCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwogICAgIFNwYXJz
ZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKQEAgLTI3
MjUsNyArMjgwMiw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3Zl
Y3RvcltpXS5jbGVhcigpOwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgc2V0QnV0dGVyZmx5V2l0
aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTI3NDIsNyArMjgyMCw4IEBA
IGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAgICAgbmV3QnV0
dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4
QmlhczsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1
dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHko
dm0sIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3NjIsNiArMjg0
MSw3IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAKICAg
ICB1bnNpZ25lZCBhdmFpbGFibGVPbGRMZW5ndGggPQogICAgICAgICBCdXR0ZXJmbHk6OmF2YWls
YWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgb2xkVmVjdG9yTGVu
Z3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG51bGxwdHI7CiAgICAgaWYgKGF2
YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2Fz
ZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0b3IgbGVuZ3RoIHRoYXQgY2F1c2Vk
IGludGVybmFsCiAgICAgICAgIC8vIGZyYWdtZW50YXRpb24uIElmIHdlIGRpZCBvdXIgam9icyBy
aWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJIGJldCB3ZSB3aWxsIG1lc3MKQEAg
LTI3NzYsMTcgKzI4NTYsMjQgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYg
dm0sIAogICAgICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSk7CiAgICAgICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CisgICAgICAgIG5l
d0J1dHRlcmZseSA9IGJ1dHRlcmZseTsKICAgICB9CiAKLSAgICBidXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotCiAgICAgaWYgKGhhc0RvdWJsZShpbmRleGluZ1R5
cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwg
bmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmluZGV4aW5nUGF5bG9h
ZDxkb3VibGU+KClbaV0gPSBQTmFOOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgIGJ1
dHRlcmZseS0+aW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxVbmtub3duPj4oKVtpXS5jbGVh
cigpOworICAgIH0KKworICAgIGlmIChuZXdCdXR0ZXJmbHkpIHsKKyAgICAgICAgYnV0dGVyZmx5
LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJm
bHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
ICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yODAyLDEyICsyODg5LDEzIEBAIHZvaWQgSlNPYmplY3Q6
OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpLT5yZXNp
emVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6c2l6ZUZvcihs
ZW5ndGgpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7CiAg
ICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJm
bHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogfQogCi1CdXR0
ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRT
aXplLCBzaXplX3QgbmV3U2l6ZSkKK0J1dHRlcmZseSogSlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCiB7
CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIApAQCAtMzA5MiwxNSArMzE4MCwzNCBA
QCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2CiAgICAgICAgIHZtLCBT
dHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAKLXZvaWQgSlNPYmplY3Q6OnNoaWZ0
QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5
QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKK3ZvaWQgSlNPYmplY3Q6OnNo
aWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNp
dHlBZnRlcikKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgp
OwotICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IHRoaXMtPmJ1dHRlcmZseVByZUNhcGFjaXR5KCk7
Ci0gICAgdm9pZCogY3VycmVudEJhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91
dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSBidXR0ZXJmbHktPmJh
c2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QmVmb3JlKTsKKyAgICAvLyBUaGlzIGNv
dWxkIGludGVybGVhdmUgdmlzaXRDaGlsZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0cnVjdHVyZSBj
b3VsZCBoYXZlIGJlZW4gYSBub24KKyAgICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVyZS4gV2UgaGF2
ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBCdXQsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGhvbGRp
bmcKKyAgICAvLyB0aGUgc3RydWN0dXJlJ3MgbG9jayByaWdodCBub3csIGFuZCB0aGF0IGhlbHBz
IGEgYml0LgorICAgIAorICAgIEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVy
Zmx5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhpcy0+aGFzSW5k
ZXhpbmdIZWFkZXIoKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFkZXIpKSB7Cisg
ICAgICAgIHByZUNhcGFjaXR5ID0gb2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5wcmVD
YXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyA9
IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0
ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVDYXBhY2l0eSA9IDA7Cisg
ICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9CisKKyAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFsaXplZCh2bSwg
dGhpcywgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVh
ZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAKLSAgICBtZW1tb3ZlKG5ld0Jhc2Us
IGN1cnJlbnRCYXNlLCB0aGlzLT5idXR0ZXJmbHlUb3RhbFNpemUoKSk7Ci0gICAgc2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBCdXR0ZXJmbHk6OmZyb21CYXNlKG5ld0Jh
c2UsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKSk7CisgICAgLy8gTm8gbmVl
ZCB0byBjb3B5IHRoZSBwcmVjYXBhY2l0eS4KKyAgICB2b2lkKiBjdXJyZW50QmFzZSA9IG9sZEJ1
dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkKiBuZXdC
YXNlID0gbmV3QnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworCisg
ICAgbWVtY3B5KG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBv
dXRPZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpKTsKKyAgICAKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIH0KIAogdWludDMyX3QgSlNPYmplY3Q6Omdl
dEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqZWN0KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyMDg1
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NDcsMTEgKzc0NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZCgpOyB9CiAgICAgdm9pZCByZWlmeUFsbFN0YXRpY1Byb3BlcnRpZXMoRXhlY1N0YXRlKik7
CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxpbmVTdG9yYWdl
KFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lkIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShWTSYsIEJ1dHRlcmZseSopOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIEJ1dHRlcmZseSogYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYs
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgICAgIAorICAgIHZvaWQgc2V0
QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5Kik7IC8vIEFsd2F5cyBjaGFuZ2UgdGhlIGJ1dHRlcmZs
eSBiZWZvcmUgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSEKICAgICB2b2lkIHNldFN0cnVjdHVyZShW
TSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiwg
U3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNv
bnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIApAQCAtNzU5LDcgKzc1OCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZt
LCB0aGlzKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhW
TSYsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGluZUNhcGFj
aXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdAogICAgIHsKQEAgLTk5MCw5ICs5ODksOSBAQCBwcml2YXRlOgogICAg
IEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNsb3coRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJv
b2wgZ2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKLSAgICBib29sIGdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiwgU3Ry
dWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdldE93bk5v
bkluZGV4UHJvcGVydHlTbG90KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNs
b3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFByb3BlcnR5T2Zmc2V0KTsKLSAg
ICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1
ZSwgdW5zaWduZWQsIFN0cnVjdHVyZSYpOworICAgIHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0dXJlKik7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdChWTSYs
IFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29u
c3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUpIGNv
bnN0OwpAQCAtMTIwNSwxNCArMTIwNCw2IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojppc1dpdGhT
Y29wZSgpIGNvbnMKICAgICByZXR1cm4gdHlwZSgpID09IFdpdGhTY29wZVR5cGU7CiB9CiAKLWlu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCi17Ci0gICAgQVNTRVJUKHN0
cnVjdHVyZSk7Ci0gICAgQVNTRVJUKCFidXR0ZXJmbHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFzSW5kZXhpbmdIZWFkZXIodGhpcykpKTsKLSAg
ICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7Ci0gICAgc2V0U3RydWN0dXJl
KHZtLCBzdHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7
CkBAIC0xMjIwLDcgKzEyMTEsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJl
KFZNJiB2CiAgICAgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
Vk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRC
dXR0ZXJmbHkoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKIHsKICAgICBtX2J1dHRlcmZs
eS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiB9CkBAIC0xMjczLDE2ICsxMjY0LDE2IEBAIGlu
bGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRQcm90b3R5cGUoVk0KIAogLy8gSXQgaXMgc2FmZSB0
byBjYWxsIHRoaXMgbWV0aG9kIHdpdGggYSBQcm9wZXJ0eU5hbWUgdGhhdCBpcyBhY3R1YWxseSBh
biBpbmRleCwKIC8vIGJ1dCBpZiBzbyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgKGRvZXNuJ3Qg
c2VhcmNoIGluZGV4IHN0b3JhZ2UpLgotQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRP
d25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0cnVjdHVyZSYgc3RydWN0dXJlLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCitBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAg
aWYgKCFUeXBlSW5mbzo6aGFzU3RhdGljUHJvcGVydHlUYWJsZShpbmxpbmVUeXBlRmxhZ3MoKSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBnZXRPd25TdGF0aWNQ
cm9wZXJ0eVNsb3Qodm0sIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgfQotCisgICAgCiAgICAg
Ly8gZ2V0UHJvcGVydHlTbG90IHJlbGllcyBvbiB0aGlzIG1ldGhvZCBuZXZlciByZXR1cm5pbmcg
aW5kZXggcHJvcGVydGllcyEKICAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7
CiAKQEAgLTEzMDcsOSArMTI5OCw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0
T3duTm9uSW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2Jq
ZWN0OjpmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNW
YWx1ZSBjdXN0b21HZXR0ZXJTZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN0cnVjdHVyZSYg
c3RydWN0dXJlKQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsQ3VzdG9tR2V0dGVy
UHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBjdXN0b21HZXR0ZXJTZXR0
ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIGlm
IChzdHJ1Y3R1cmUuaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgeworICAgIGlmIChzdHJ1Y3R1
cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgc2xvdC5zZXRDdXN0b20o
dGhpcywgYXR0cmlidXRlcywganNDYXN0PEN1c3RvbUdldHRlclNldHRlcio+KGN1c3RvbUdldHRl
clNldHRlciktPmdldHRlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEzMjUsNyAr
MTMxNiw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUcKIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgU3RydWN0dXJlJiBz
dHJ1Y3R1cmUgPSAqb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChvYmplY3QtPmdldE93bk5vbklu
ZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJz
ZUluZGV4KHByb3BlcnR5TmFtZSkpCkBAIC0xMzUzLDEwICsxMzQ0LDEwIEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICAgICAgICAgIHJldHVybiBvYmplY3Qt
PmdldE5vbkluZGV4UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKG9iamVjdC0+dHlwZSgpICE9IFByb3h5T2JqZWN0VHlwZSk7
Ci0gICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKnN0cnVjdHVyZUlEVGFibGUuZ2V0KG9i
amVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3Ry
dWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAgICAgICAgaWYgKG9i
amVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBKU1ZhbHVlIHBy
b3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgSlNWYWx1ZSBw
cm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBpZiAoIXBy
b3RvdHlwZS5pc09iamVjdCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG9iamVjdCA9
IGFzT2JqZWN0KHByb3RvdHlwZSk7CkBAIC0xMzg1LDEzMiArMTM3Niw2IEBAIGlubGluZSBKU1Zh
bHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IH0KIAotdGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KLUFMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCi17Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBBU1NFUlQodmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykp
OwotICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKLQotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkgewotICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRU
eXBlcygpKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKLSAgICAgICAgICAgIHNsb3Qu
c2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotCi0gICAgICAgICAgICBpZiAoKGF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8
IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1
c3RvbUFjY2Vzc29yKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkpOwotICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjph
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJl
RXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBi
dXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKHRoaXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091
dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhp
cy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsK
LSAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7Ci0K
LSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPnN0
cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwotICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgICAgICB0aGlz
LT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAgIHNp
emVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKLSAgICAgICAgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7Ci0gICAgaWYgKG5ld1N0cnVjdHVyZSkgewot
ICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0aW9u
KAotICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgICAgIAotICAgICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVy
Zmx5KCk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRo
aXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwot
ICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAg
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICBib29sIGhhc0luZmVy
cmVkVHlwZTsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBj
dXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKLSAgICBpZiAob2Zmc2V0ICE9IGlu
dmFsaWRPZmZzZXQpIHsKLSAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+d2ls
bFN0b3JlVmFsdWVGb3JSZXBsYWNlKAotICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7
Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKChh
dHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8
fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBD
dXN0b21BY2Nlc3NvcikpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFk
T25seSkpOwotICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0
ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24g
d2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAotICAgIC8v
IHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2ZSBp
ZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lCi0gICAgLy8gd2Ugd2FudC4KLSAgICBEZWZl
cnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRG
aXJlOwotICAgIAotICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlU
cmFuc2l0aW9uKAotICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKLSAg
ICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAg
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xv
dDo6UHV0QnlJZCk7Ci0gICAgCi0gICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICBBU1NF
UlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0
eSk7Ci0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5ld0NhcGFjaXR5KQotICAgICAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdD
YXBhY2l0eSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOwotICAgIH0KLSAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFs
dWUpOwotICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKLSAgICBpZiAoYXR0
cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBuZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJU
KHZhbHVlKTsKQEAgLTE1NDksMjQgKzE0MTQsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0KFZNJiB2bSwgCiAgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZp
bmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCi1p
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBBU1NFUlQoIXZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKLSAgICBBU1NF
UlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxs
R3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1
cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKCk7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0g
ICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICBi
b29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0gICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1
ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXpl
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotfQotCiBBTFdBWVNfSU5M
SU5FIEpTT2JqZWN0KiBSZWdpc3Rlcjo6b2JqZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXNP
YmplY3QoanNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDEzICsxMDcsMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQog
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5
cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlw
ZTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpz
dHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwotICAgICAgICBpZiAo
c3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkp
OworICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VM
WShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZh
dWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5
cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFkoc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRH
ZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6
OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9
IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMTM1LDE4ICsxMzUsMTgg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAgIEpTT2JqZWN0
KiBvYmplY3QgPSB0aGlzOwogICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0
ciBkZWZhdWx0R2V0UHJvdG90eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKICAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRh
YmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAg
ICAgIGlmIChMSUtFTFkoIVR5cGVJbmZvOjpvdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qob2Jq
ZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSkpKSB7CiAgICAgICAgICAgICBpZiAob2JqZWN0LT5nZXRP
d25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVy
dHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3Qo
b2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwog
ICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgICAgICBpZiAoTElLRUxZ
KHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1
bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKLSAgICAgICAgICAgIHByb3RvdHlw
ZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdl
dFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQorICAgICAgICAgICAgcHJvdG90eXBlID0g
c3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC0xNTcsNiArMTU3LDMwIEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICB9CiB9CiAKK2lu
bGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIEFTU0VSVCghdmFsdWUu
aXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOworICAgIEFTU0VS
VCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7CisgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAor
ICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICBidXR0ZXJm
bHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBhY2l0
eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgYnV0
dGVyZmx5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVh
ZE9ubHkpCisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJv
cGVydGllcygpOworICAgICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAg
ICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKKyAgICAgICAgICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIH0pOworfQorCiAvLyBFQ01BIDguNi4yLjIK
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0SW5saW5lKEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBAIC0yMDcsNCArMjMxLDEzNyBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3BlCiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNP
YmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmdldE93blByb3BlcnR5U2xv
dEJ5SW5kZXgoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOwogfQogCit0ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgorQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVCh2YWx1
ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOworICAgIEFT
U0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVh
cCh0aGlzKSk7CisgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOworCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJ
bmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJp
YnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCAh
PSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAg
ICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICAg
ICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisKKyAgICAgICAgICAg
IGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1
dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmli
dXRlcyAmIFJlYWRPbmx5KSk7CisgICAgICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNT
dHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisg
ICAgICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9
IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0
T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
ICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICAgICAgICAg
IHNldEJ1dHRlcmZseSh2bSwgYnV0dGVyZmx5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBzbG90
LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
UmVhZE9ubHkpCisgICAgICAgICAgICB0aGlzLT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OworICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZSgKKyAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7
CisgICAgaWYgKG5ld1N0cnVjdHVyZSkgeworICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9y
ZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Cisg
ICAgICAgIAorICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CisgICAgICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRD
YXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5l
d0J1dHRlcmZseSk7CisgICAgICAgIH0KKworICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQp
OworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwor
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXRTdHJ1Y3R1
cmUodm0sIG5ld1N0cnVjdHVyZSk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywg
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgY3Vy
cmVudEF0dHJpYnV0ZXM7CisgICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0lu
ZmVycmVkVHlwZSk7CisgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVw
bGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5
cGUpKSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgK
KyAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkg
PT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIHNsb3Qu
c2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOworCisgICAgICAgIGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAh
PSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21B
Y2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7CisgICAg
ICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAh
aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgdG8gZmlyZSBhZnRl
ciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKKyAgICAvLyBzdHJ1Y3R1cmUuIFRoaXMgYWxsb3dz
IGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5ldyBzdHJ1Y3R1cmUgaXMg
dGhlIG9uZQorICAgIC8vIHdlIHdhbnQuCisgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKKyAgICAKKyAgICBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAgdm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4
dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlLT53aWxsU3Rv
cmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgIAorICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6
ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNp
emVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAg
ICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0
eSAhPSBuZXdDYXBhY2l0eSkgeworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGFs
bG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKKyAgICB9CisgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVl
KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CisgICAgc2xvdC5zZXROZXdQ
cm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisg
ICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2
ICsxODQsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2ws
IHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihi
b29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAorICAg
IHYoYm9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAg
dihib29sLCBjb2xsZWN0Q29udGludW91c2x5LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihib29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBc
CiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQsIE5vcm1hbCwgbnVsbHB0
cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1
ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2
ICs0OSw3IEBAIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGljIFdyaXRlQmEKICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwogfTsKIAorLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gaGF2ZSBh
IGxvY2sgaW4gaXQuCiBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIGZpbmFsIDogcHVibGljIEpT
Q2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjA4NTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsMTIgKzQ1LDYgQEAKIAogI2RlZmluZSBEVU1QX1NUUlVDVFVSRV9JRF9TVEFU
SVNUSUNTIDAKIAotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09OU1RF
TkNZX0NIRUNLIDAKLSNlbHNlCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVD
SyAwCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7
CiAKQEAgLTE2Myw5ICsxNTcsOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+cHJvcGVydHlUYWJsZSgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CiAgICAgICAgICAgICArK251bWJl
cldpdGhQcm9wZXJ0eU1hcHM7Ci0gICAgICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0g
c3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPnNpemVJbk1lbW9yeSgpOworICAgICAgICAgICAg
dG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1vcnkoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMzA2LDcgKzMwMCw3IEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0
dXJlc0FuZE1hcEZvck0KICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3Ry
dWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKICAgICAgICAgc3RydWN0dXJlLT5t
X2xvY2subG9jaygpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5VGFibGUoKS5nZXQoKTsKKyAgICAgICAgdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGVPck51bGwoKTsKICAgICAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgICAgICAvLyBMZWF2ZSB0
aGUgc3RydWN0dXJlIGxvY2tlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBkbyB0aGluZ3MgdG8g
aXQgYXRvbWljYWxseQogICAgICAgICAgICAgLy8gYmVmb3JlIGl0IGxvc2VzIGl0cyBwcm9wZXJ0
eSB0YWJsZS4KQEAgLTMyMSwzMCArMzE1LDMxIEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0
dXJlc0FuZE1hcEZvck0KICAgICBBU1NFUlQoIXRhYmxlKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6
Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mIHZtKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5VGFibGUp
CiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAg
IEFTU0VSVCghcHJvcGVydHlUYWJsZSgpKTsKLQorICAgIAorICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKICAgICAK
ICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBz
dHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKKyAgICB1bnNpZ25lZCBjYXBhY2l0eSA9IG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KTsKICAgICBpZiAo
dGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUg
PSB0YWJsZS0+Y29weSh2bSwgY2FwYWNpdHkpOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51
bmxvY2soKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRhYmxlID0gUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVzdCBob2xkIHRoZSBsb2Nr
IG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlmeWluZyB0aGlzIHN0cnVj
dHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50IGdldENvbmN1cnJlbnRs
eSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtlZAogICAgIC8vIHN0YXRl
LgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7
Ci0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSwg
bnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsK
LSAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIHRhYmxlKTsK
KyAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKKyAgICAgICAgdGhpcy0+c2V0UHJvcGVydHlUYWJs
ZSh2bSwgdGFibGUpOwogCiAgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5cGVUYWJsZSA9IG1faW5m
ZXJyZWRUeXBlVGFibGUuZ2V0KCk7CiAKQEAgLTM1NSwxMCArMzUwLDEyIEBAIHZvaWQgU3RydWN0
dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBl
bnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZz
ZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIGlmICh0eXBl
VGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgp
KSkKICAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRydWU7Ci0gICAgICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgdGFibGUtPmFkZChlbnRyeSwgbV9vZmZz
ZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQog
ICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICAKKyAgICByZXR1cm4gdGFi
bGU7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKQEAg
LTQ3Myw3ICs0NzAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFu
CiAgICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0s
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CiAg
ICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAg
ICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+
c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29m
ZnNldDsKICAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxlLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRhYmxlLmdldCgpKTsKIApA
QCAtNTIxLDM2ICs1MTgsMzAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
VHJhbgogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHByb3RvdHlwZSkKIHsKKyAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KHZt
LCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBk
ZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgIAor
ICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZz
ZXQ7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKIFN0cnVj
dHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIGlmICghc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgICAgICBzdHJ1Y3R1cmUtPm1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRy
YW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAgIAorICAgICAgICB0cmFu
c2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
LSAgICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUg
PSB0cmFuc2l0aW9uOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGUoKSk7Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgUHJvcGVydHlNYXBFbnRyeSog
ZW50cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0pLT5nZXQocHJvcGVydHlO
YW1lLnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwogICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0g
YXR0cmlidXRlczsKIApAQCAtNTYxLDE3ICs1NTIsMTUgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmF0dHJpYnV0ZUNoYW5nZVRyYQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRy
YW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2lu
ZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQog
ewogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5l
Y2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNl
dCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pKTsKKyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwotICAg
IHRyYW5zaXRpb24tPnBpbigpOwogICAgIHRyYW5zaXRpb24tPnNldEhhc0JlZW5EaWN0aW9uYXJ5
KHRydWUpOwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgp
OwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQpAQCAtNjAzLDMxICs1OTIsMjkgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKLSAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAgaWYgKGlzUGlubmVkUHJv
cGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBw
cm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpOwotICAgIAotICAgIC8vIEhvbGQgdGhlIGxvY2sg
d2hpbGUgc3RlYWxpbmcgdGhlIHRhYmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBh
bm90aGVyIHRocmVhZAotICAgIC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3Ry
dWN0dXJlLCBvciB3aWxsIGdldCB0byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCi0gICAgLy8gYmVm
b3JlIGl0IGlzIHN0b2xlbi4KLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIFByb3BlcnR5VGFibGUqIHRha2VuUHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGUo
KS5nZXQoKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsKLSAgICByZXR1cm4gdGFrZW5Q
cm9wZXJ0eVRhYmxlOworICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgcmV0dXJuIGEgcHJvcGVydHkg
dGFibGUuIEl0IGNhbid0IHJldHVybiBudWxsLgorICAgIFByb3BlcnR5VGFibGUqIHJlc3VsdCA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAocmVzdWx0KSB7CisgICAgICAgIGlmIChp
c1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQtPmNvcHko
dm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIG51bGxwdHIpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBm
YWxzZTsKKyAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0
eVRhYmxlKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJh
bnNpdGlvbktpbmQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0
cmFuc2l0aW9uS2luZCk7Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IG5ld0luZGV4
aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNp
dGlvbktpbmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpLCB0cmFuc2l0aW9uS2luZCk7CiAgICAgCiAgICAgaWYgKGNoYW5nZXNJbmRleGluZ1R5cGUo
dHJhbnNpdGlvbktpbmQpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc3RydWN0dXJlLT5tX2dsb2JhbE9iamVjdC5nZXQoKSkgewogICAgICAgICAgICAgaWYg
KGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpIHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxB
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGlu
Z1R5cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9iamVj
dC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSkgewogICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAg
IH0KQEAgLTYzOCw3ICs2MjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlU
cmFuc2l0CiAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgaWYgKCFzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgQVNTRVJU
KGV4aXN0aW5nVHJhbnNpdGlvbi0+YXR0cmlidXRlc0luUHJldmlvdXMoKSA9PSBhdHRyaWJ1dGVz
KTsKLSAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1Ry
YW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAg
ICB9CiAgICAgCkBAIC02NDYsNyArNjMzLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdAogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2
bSwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhh
dHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlKGluZGV4
aW5nVHlwZSk7CisgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgCiAgICAgaWYgKHBy
ZXZlbnRzRXh0ZW5zaW9ucyh0cmFuc2l0aW9uS2luZCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNl
dERpZFByZXZlbnRFeHRlbnNpb25zKHRydWUpOwpAQCAtNjU3LDMyICs2NDQsMjkgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAgICAvLyB0YWJsZSwgc2lu
Y2Ugb3VyIGxvZ2ljIGZvciB3YWxraW5nIHRoZSBwcm9wZXJ0eSB0cmFuc2l0aW9uIGNoYWluIHRv
IHJlbWF0ZXJpYWxpemUgdGhlCiAgICAgICAgIC8vIHRhYmxlIGRvZXNuJ3Qga25vdyBob3cgdG8g
dGFrZSBpbnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAgICAgICAgIAotICAgICAg
ICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAg
IHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcodm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZygpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgewotICAgICAg
ICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRpZXMo
dHJhbnNpdGlvbktpbmQpKQotICAgICAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9
IERvbnREZWxldGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNSZWFkT25seU9uTm9uQWNjZXNz
b3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7
Ci0gICAgICAgICAgICB9CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0YWJsZSk7
CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlmIChz
ZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCisgICAgICAgICAg
ICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOworICAgICAgICAgICAgaWYgKHNl
dHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVu
dHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpCisgICAgICAgICAgICAgICAgZW50cnkuYXR0cmli
dXRlcyB8PSBSZWFkT25seTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFr
ZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFu
c2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHNldHNSZWFk
T25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKQotICAgICAgICAmJiB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkKLSAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS0+aXNFbXB0eSgpKQorICAgICAgICAmJiAhdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZU9yTnVsbCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHRyYW5zaXRpb24tPnNldEhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8odHJ1ZSk7CiAgICAgCiAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHRyYW5zaXRpb24tPnBp
bigpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4odm0sIHRyYW5zaXRpb24tPmVuc3VyZVByb3Bl
cnR5VGFibGUodm0pKTsKICAgICBlbHNlIHsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CkBAIC02OTgsMTMgKzY4MiwxMiBAQCBib29sIFN0
cnVjdHVyZTo6aXNTZWFsZWQoVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVuc2libGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0g
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1
cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0
eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAor
ICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewogICAgICAgICBpZiAoKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RGVsZXRl
KSAhPSBEb250RGVsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTcx
NywxMyArNzAwLDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihWTSYgdm0pCiAgICAgaWYg
KGlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAg
ICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
dGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRh
YmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICghKGl0ZXIt
PmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkpCkBA
IC03MzYsMjEgKzcxOCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25h
cnlTCiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIEFTU0VSVChpc0RpY3Rp
b25hcnkoKSk7CisgICAgCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9s
b2NrLCB2bS5oZWFwKTsKIAogICAgIHNpemVfdCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSA9IHRo
aXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpIHsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CisgICAgICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBBU1NFUlQodGFi
bGUpOwogCi0gICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlUYWJsZSgpLT5z
aXplKCk7CisgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFibGUtPnNpemUoKTsKIAog
ICAgICAgICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3RlZCBieSBpbnNlcnRpb24gb3JkZXIu
CiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJvcGVydHlDb3VudCk7CiAKICAgICAg
ICAgLy8gQ29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhlaXIgaGFzaGVkIGxvY2F0aW9ucywg
Y29tcGFjdGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFzIHdlIGdvLgogICAgICAgICB1bnNp
Z25lZCBpID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVy
dHlUYWJsZSgpLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
dGFibGUtPmVuZCgpOwogICAgICAgICBtX29mZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAg
IGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CisgICAgICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
LCArK2kpIHsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9iamVjdC0+Z2V0RGlyZWN0KGl0ZXIt
Pm9mZnNldCk7CiAgICAgICAgICAgICBtX29mZnNldCA9IGl0ZXItPm9mZnNldCA9IG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgICAgICB9CkBAIC03NTks
NyArNzQ0LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgaSsrKQogICAgICAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1f
aW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOwogCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS0+
Y2xlYXJEZWxldGVkT2Zmc2V0cygpOworICAgICAgICB0YWJsZS0+Y2xlYXJEZWxldGVkT2Zmc2V0
cygpOwogICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC03Njgs
NTUgKzc1MywzNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAK
ICAgICBzaXplX3QgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFj
aXR5KCk7CiAKLSAgICBpZiAoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgIT0gYWZ0ZXJPdXRPZkxp
bmVDYXBhY2l0eSkgeworICAgIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpICYmIGJlZm9yZU91dE9m
TGluZUNhcGFjaXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKICAgICAgICAgQVNTRVJU
KGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID4gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAg
ICAgIC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBhZnRlciBmbGF0dGVuaW5n
L2NvbXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwKICAgICAgICAgLy8gd2Ug
bmVlZCB0byB6ZXJvIGl0IG91dCBiZWNhdXNlIHRoZSBjb2xsZWN0b3IgZGVwZW5kcyBvbiB0aGUg
U3RydWN0dXJlIHRvIGtub3cgdGhlIHNpemUgZm9yIGNvcHlpbmcuCi0gICAgICAgIGlmIChvYmpl
Y3QtPmJ1dHRlcmZseSgpICYmICFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5oYXNJ
bmRleGluZ0hlYWRlcihvYmplY3QpKQotICAgICAgICAgICAgb2JqZWN0LT5zZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAgICAgICBpZiAoIWFmdGVyT3V0T2ZMaW5lQ2Fw
YWNpdHkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCisgICAgICAgICAgICBv
YmplY3QtPnNldEJ1dHRlcmZseSh2bSwgbnVsbHB0cik7CiAgICAgICAgIC8vIElmIHRoZSBvYmpl
Y3Qgd2FzIGRvd24tc2l6ZWQgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBCdXR0
ZXJmbHkgaXMgbm8gbG9uZ2VyIHdpdGhpbiB0aGUgCiAgICAgICAgIC8vIGZpcnN0IENvcGllZEJs
b2NrOjpibG9ja1NpemUgYnl0ZXMsIHdlJ2xsIGdldCB0aGUgd3JvbmcgYW5zd2VyIGlmIHdlIHRy
eSB0byBtYXNrIHRoZSBiYXNlIGJhY2sgdG8gCiAgICAgICAgIC8vIHRoZSBDb3BpZWRCbG9jayBo
ZWFkZXIuIFRvIHByZXZlbnQgdGhpcyBjYXNlIHdlIG5lZWQgdG8gbWVtbW92ZSB0aGUgQnV0dGVy
Zmx5IGRvd24uCi0gICAgICAgIGVsc2UgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkpCi0gICAgICAg
ICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKHZtLCBiZWZvcmVPdXRP
ZkxpbmVDYXBhY2l0eSwgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcobG9ja2VyLCB2
bSwgdGhpcywgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgfQotCi0gICAgcmV0dXJuIHRo
aXM7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAotICAg
IHBpbigpOwotCi0gICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsK
LX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQo
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwg
ZGVmZXJHQyk7Ci0KLSAgICBwaW4oKTsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSk7
CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW4oKQordm9pZCBTdHJ1
Y3R1cmU6OnBpbihWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQogewotICAgIEFTU0VSVChw
cm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlUYWJsZSh0cnVlKTsKKyAg
ICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7CiAg
ICAgbV9uYW1lSW5QcmV2aW91cyA9IG51bGxwdHI7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpwaW5G
b3JDYWNoaW5nKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKFZNJiB2bSwgUHJvcGVy
dHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0
SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUpOworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRh
YmxlKTsKICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0KIApAQCAtODkxLDE3ICs4
NTUsMTMgQEAgdm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xvdygKICAgICB9CiAKICAg
ICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVydHkgdGFibGUuCi0gICAg
UHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotCisgICAgUHJvcGVydHlUYWJsZSogcHJv
cGVydHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOworICAgIAogICAgIC8vIFdlIG11
c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRoZSBnaXZlbiBwcm9wZXJ0
eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAotICAgIC8vIGFscmVhZHksIHNvIHdl
IG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5vdy4KLSAgICBBU1NFUlQocHJvcGVydHlUYWJs
ZSk7Ci0KLSAgICAvLyAuLi4gYW5kIHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCisgICAg
Ly8gYWxyZWFkeSwgc28gdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KICAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkp
OwogICAgIEFTU0VSVChlbnRyeSk7Ci0KKyAgICAKICAgICBpZiAoc2hvdWxkT3B0aW1pemUpCiAg
ICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2lsbFN0b3JlVmFsdWUodm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7CiAgICAgZWxzZSB7CkBAIC05NDMsMTggKzkwMywx
MiBAQCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJvcGVyCiAKICNlbmRpZgog
Ci1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKFZNJiB2bSkKLXsK
LSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKLX0KLQog
UHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0m
IHZtKQogewotICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBQcm9wZXJ0
eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBw
cm9wZXJ0eVRhYmxlT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9u
ZSh2bSwgKnRhYmxlKTsKKyAgICBib29sIHNldFByb3BlcnR5VGFibGUgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxlKTsKIH0K
IAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCkBAIC05ODksNzAgKzk0MywyNCBAQCBW
ZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAKIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKIHsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2ssIHZtLmhlYXApOwotICAgIAotICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdl
dCh2bSwgcHJvcGVydHlOYW1lKSkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGlm
IChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCi0gICAg
ICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7
Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVy
dHlUYWJsZSgpKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2NrZXIsIHZtKTsKLQotICAg
IFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUoKS0+bmV4dE9mZnNldCht
X2lubGluZUNhcGFjaXR5KTsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5TWFw
RW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJs
ZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLSAgICByZXR1cm4gbmV3T2Zmc2V0OworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCkgeyB9KTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUo
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGF1dG8g
cmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0g
ICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVydHlUYWJsZTo6ZmluZF9p
dGVyYXRvciBwb3NpdGlvbiA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChyZXApOwotICAgIGlmICgh
cG9zaXRpb24uZmlyc3QpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKLQotICAgIHByb3Bl
cnR5VGFibGUoKS0+cmVtb3ZlKHBvc2l0aW9uKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZERl
bGV0ZWRPZmZzZXQob2Zmc2V0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1
cm4gb2Zmc2V0OwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoY29uc3Qg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgdW5zaWduZWQgY2FwYWNpdHkpCi17
Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0
ZSh2bSwgY2FwYWNpdHkpKTsKKyAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgW10gKGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKIH0KIAogdm9p
ZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVy
dHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgIFBy
b3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwor
ICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGJvb2wga25vd25V
bmlxdWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5pcXVlRm9yU3RydWN0dXJlKCk7Ci0K
LSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgp
OwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUo
KS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAorICAgIFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3IgKFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewog
ICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlv
bigpIHx8ICEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7CiAgICAgICAgIEFTU0VSVCgh
aXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkgfHwgIWl0ZXItPmtl
eS0+aXNTeW1ib2woKSk7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51
bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsKQEAgLTExMTQsNiArMTAy
Miw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKICAgICBKU0NlbGw6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgCisgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAgICAKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwogICAgIGlmICghdGhpc09iamVj
dC0+aXNPYmplY3QoKSkKICAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFp
bi5jbGVhcigpOwpAQCAtMTI3Niw5MiArMTE4Nyw2IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wQ29u
dGV4dEhlYWRlcihQcmludFMKICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZXM6Iik7CiB9CiAKLSNp
ZiBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKLQotdm9pZCBQcm9wZXJ0eVRhYmxlOjpj
aGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBBU1NFUlQobV9pbmRleFNpemUgPj0gUHJvcGVydHlU
YWJsZTo6TWluaW11bVRhYmxlU2l6ZSk7Ci0gICAgQVNTRVJUKG1faW5kZXhNYXNrKTsKLSAgICBB
U1NFUlQobV9pbmRleFNpemUgPT0gbV9pbmRleE1hc2sgKyAxKTsKLSAgICBBU1NFUlQoIShtX2lu
ZGV4U2l6ZSAmIG1faW5kZXhNYXNrKSk7Ci0KLSAgICBBU1NFUlQobV9rZXlDb3VudCA8PSBtX2lu
ZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVChtX2tleUNvdW50ICsgbV9kZWxldGVkQ291bnQgPD0g
bV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQobV9kZWxldGVkQ291bnQgPD0gbV9pbmRleFNp
emUgLyA0KTsKLQotICAgIHVuc2lnbmVkIGluZGV4Q291bnQgPSAwOwotICAgIHVuc2lnbmVkIGRl
bGV0ZWRJbmRleENvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGEgPSAwOyBhICE9IG1faW5k
ZXhTaXplOyArK2EpIHsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1faW5kZXhbYV07
Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IFByb3BlcnR5VGFibGU6OkVtcHR5RW50cnlJbmRl
eCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50cnlJbmRleCA9PSBkZWxl
dGVkRW50cnlJbmRleCgpKSB7Ci0gICAgICAgICAgICArK2RlbGV0ZWRJbmRleENvdW50OwotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXgg
PCBkZWxldGVkRW50cnlJbmRleCgpKTsKLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggLSAxIDw9
IHVzZWRDb3VudCgpKTsKLSAgICAgICAgKytpbmRleENvdW50OwotCi0gICAgICAgIGZvciAodW5z
aWduZWQgYiA9IGEgKyAxOyBiICE9IG1faW5kZXhTaXplOyArK2IpCi0gICAgICAgICAgICBBU1NF
UlQobV9pbmRleFtiXSAhPSBlbnRyeUluZGV4KTsKLSAgICB9Ci0gICAgQVNTRVJUKGluZGV4Q291
bnQgPT0gbV9rZXlDb3VudCk7Ci0gICAgQVNTRVJUKGRlbGV0ZWRJbmRleENvdW50ID09IG1fZGVs
ZXRlZENvdW50KTsKLQotICAgIEFTU0VSVCghdGFibGUoKVtkZWxldGVkRW50cnlJbmRleCgpIC0g
MV0ua2V5KTsKLQotICAgIHVuc2lnbmVkIG5vbkVtcHR5RW50cnlDb3VudCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBjID0gMDsgYyA8IHVzZWRDb3VudCgpOyArK2MpIHsKLSAgICAgICAgU3RyaW5n
SW1wbCogcmVwID0gdGFibGUoKVtjXS5rZXk7Ci0gICAgICAgIGlmIChyZXAgPT0gUFJPUEVSVFlf
TUFQX0RFTEVURURfRU5UUllfS0VZKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICsr
bm9uRW1wdHlFbnRyeUNvdW50OwotICAgICAgICB1bnNpZ25lZCBpID0gSWRlbnRpZmllclJlcEhh
c2g6Omhhc2gocmVwKTsKLSAgICAgICAgdW5zaWduZWQgayA9IDA7Ci0gICAgICAgIHVuc2lnbmVk
IGVudHJ5SW5kZXg7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICBlbnRyeUluZGV4
ID0gbV9pbmRleFtpICYgbV9pbmRleE1hc2tdOwotICAgICAgICAgICAgQVNTRVJUKGVudHJ5SW5k
ZXggIT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRyeUluZGV4KTsKLSAgICAgICAgICAgIGlmIChy
ZXAgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAgICBrID0gMSB8IGRvdWJs
ZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2gocmVwKSk7Ci0gICAgICAgICAgICBpICs9IGs7
Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggPT0gYyArIDEpOwotICAgIH0K
LQotICAgIEFTU0VSVChub25FbXB0eUVudHJ5Q291bnQgPT0gbV9rZXlDb3VudCk7Ci19Ci0KLXZv
aWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBjaGVja09mZnNldENvbnNp
c3RlbmN5KCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbigpKSB7
Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+
ZW5kKCk7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3Bl
cnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAg
QVNTRVJUKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7Ci0gICAgICAgICAgICBBU1NF
UlQoIWl0ZXItPmtleS0+aXNTeW1ib2woKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm9w
ZXJ0eVRhYmxlKCktPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotI2Vsc2UKLQotaW5saW5lIHZv
aWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBjaGVja09mZnNldENvbnNp
c3RlbmN5KCk7Ci19Ci0KLSNlbmRpZiAvLyBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sK
LQogYm9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkg
Y29uc3QKIHsKICAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogY2kgPSB0aGlzOyBjaTsgY2kgPSBj
aS0+cGFyZW50Q2xhc3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDE3ICsxODMsMTkgQEAgcHVi
bGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNTZWFsZWQoVk0mKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGlzRnJvemVuKFZNJik7CiAgICAgYm9vbCBpc1N0cnVjdHVyZUV4
dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhZGlkUHJldmVudEV4dGVuc2lvbnMoKTsgfQotICAg
IGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAgc2l6ZV90IHN1Z2dlc3Rl
ZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpOyAKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0mLCBKU09iamVjdCopOwog
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2Vk
IHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpOwotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5z
aXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIC8vIFZlcnNpb25zIHRoYXQgdGFrZSBhIGZ1
bmMgd2lsbCBjYWxsIGl0IGFmdGVyIG1ha2luZyB0aGUgY2hhbmdlIGJ1dCB3aGlsZSBzdGlsbCBo
b2xkaW5nCisgICAgLy8gdGhlIGxvY2suIFRoZSBjYWxsYmFjayBpcyBub3QgY2FsbGVkIGlmIHRo
ZXJlIGlzIG5vIGNoYW5nZSBiZWluZyBtYWRlLCBsaWtlIGlmIHlvdSBjYWxsCisgICAgLy8gcmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJvcGVydHkgaXMgbm90IGZv
dW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5z
aXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRo
aXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAgICAgYm9vbCBpc0RpY3Rpb25hcnkoKSBjb25z
dCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9uYXJ5S2luZDsgfQpAQCAt
MjI5LDggKzIzMSw4IEBAIHB1YmxpYzoKICAgICBUeXBlSW5mbyB0eXBlSW5mbygpIGNvbnN0IHsg
QVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOyByZXR1cm4gbV9ibG9i
LnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJvb2wgaXNPYmplY3QoKSBj
b25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAotICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlKCkgJiBB
bGxBcnJheVR5cGVzOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlKCk7IH0KKyAgICBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbEFycmF5VHlwZXM7IH0KKyAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7IH0KICAgICAgICAgCiAgICAgYm9vbCBtYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAogICAgIHsKQEAgLTQzMyw5ICs0MzUsOSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2NsYXNz
SW5mbyk7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlw
ZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0
dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ1R5cGVPZmZzZXQoKTsKKyAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1
cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKTsKICAgICB9CiAg
ICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBwcm9wZXJ0eVRhYmxlVW5zYWZlT2Zmc2V0KCkKQEAg
LTU3OSw2ICs1ODEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHZvaWQgZHVtcENvbnRl
eHRIZWFkZXIoUHJpbnRTdHJlYW0mKTsKICAgICAKKyAgICBDb25jdXJyZW50SklUTG9jayYgbG9j
aygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
IHByaXZhdGU6CkBAIC02MzMsNDQgKzYzNyw0NSBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEaWN0
aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0g
bnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zm
c2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVu
YyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZz
ZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNv
bnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0g
MCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBXcml0ZUJhcnJpZXI8UHJv
cGVydHlUYWJsZT4mIHByb3BlcnR5VGFibGUoKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQ
cm9wZXJ0eVRhYmxlKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVG
b3JQaW5uaW5nKFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwKFZNJik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIERlZmVyR0MmKQorICAgIC8vIFRoaXMgbWF5IGdyYWIg
dGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUn
cyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5
KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
LSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAg
ICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQotICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcCh2bSk7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICBpZiAoIXByZXZpb3VzSUQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIFBy
b3BlcnR5VGFibGUqJiB0YWJsZSkKKyAgICAKKyAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBsb2Nr
LCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4K
KyAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlKFZNJiB2bSkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICBBU1NFUlQoY2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0
KCk7Ci0gICAgICAgIGlmICghdGFibGUgJiYgcHJldmlvdXNJRCgpKSB7Ci0gICAgICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwKHZtKTsKLSAgICAgICAgICAgIHRhYmxlID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAg
ICAgICB9CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBtX3Byb3BlcnR5VGFi
bGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9Ci0gICAgdm9pZCBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKFZNJiB2bSwgRGVmZXJHQyYpCisg
ICAgCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZU9yTnVsbCgpIGNvbnN0CiAgICAg
ewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0g
ICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eVRh
YmxlKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAg
cmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKICAgICB9CisgICAgCisgICAgLy8g
VGhpcyB3aWxsIGdyYWIgdGhlIGxvY2suIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3Ry
dWN0dXJlJ3MgbG9jay4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eVRhYmxlKiBtYXRl
cmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mLCBib29sIHNldFByb3BlcnR5VGFibGUgPSB0cnVlKTsK
KyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5VGFibGUoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSk7CisgICAgCisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQoVk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoVk0mKTsKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKQEAgLTY5Nyw4ICs3MDIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wg
aXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVD
aGFpbikgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZUNoYWlu
KiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgICAgIAotICAgIHZvaWQgcGluKCk7
Ci0gICAgdm9pZCBwaW5Gb3JDYWNoaW5nKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBw
aW4oVk0mLCBQcm9wZXJ0eVRhYmxlKik7CisgICAgdm9pZCBwaW5Gb3JDYWNoaW5nKFZNJiwgUHJv
cGVydHlUYWJsZSopOwogICAgIAogICAgIGJvb2wgaXNSYXJlRGF0YShKU0NlbGwqIGNlbGwpIGNv
bnN0CiAgICAgewpAQCAtNzEwLDcgKzcxNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVCho
YXNSYXJlRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVE
YXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwogICAgIH0KLSAgICAgICAgCisKICAg
ICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShWTSYpOwpAQCAtNzQwLDcgKzc0NSw3IEBAIHBy
aXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7
CiAKLSAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1
cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIC8vIFNo
b3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdD
LCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgLy8gRHVyaW5nIGEg
SGVhcCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2Fm
ZSB0byB1c2UuCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJs
ZVVuc2FmZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDEwICs0
MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHUuZG91YmxlV29yZCA9IDB4YmJhZGJlZWY7CiAgICAg
fQogCi0gICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCisgICAgU3RydWN0
dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQogICAgIHsKICAg
ICAgICAgdS5maWVsZHMuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmVJRDsKLSAgICAgICAgdS5maWVs
ZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgICAgICB1LmZpZWxkcy5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAg
ICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAgICAgICAgdS5maWVsZHMu
aW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdzKCk7CiAgICAgICAgIHUu
ZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6Ok5ld1doaXRlOwpAQCAtNTIsOCAr
NTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlSURCbG9i
JiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhlci51LmRvdWJsZVdvcmQ7IH0KICAgICAKICAg
ICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnN0cnVj
dHVyZUlEOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHUuZmllbGRzLmluZGV4aW5nVHlwZTsgfQotICAgIHZvaWQgc2V0SW5kZXhpbmdUeXBlKEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdU
eXBlOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBj
b25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9Cisg
ICAgdm9pZCBzZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9CiAgICAgSlNUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50eXBlOyB9CiAgICAgVHlwZUluZm86OklubGlu
ZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmxp
bmVUeXBlRmxhZ3M7IH0KICAgICAKQEAgLTY3LDE2ICs2NywxNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5zdHJ1Y3R1
cmVJRCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQo
KQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNl
dCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxv
YiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkp
OwogICAgIH0KIAogcHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAg
ICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKLSAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGU7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeTsKICAgICAgICAgICAgIEpTVHlwZSB0eXBlOwogICAgICAgICAgICAgVHlw
ZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3M7CiAgICAgICAgICAgICBDZWxs
U3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDggKzkzLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OgogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKLSAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwg
cHJvcGVydHlUYWJsZSk7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IGVuc3Vy
ZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKICAgICBpZiAoIXByb3BlcnR5VGFibGUpCiAg
ICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC0yMTksMzEgKzIxOCw2IEBAIGlubGlu
ZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChFeGVjU3RhdGUKICAgICByZXR1cm4gaXNWYWxpZChl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlwZUNoYWluKTsKIH0KIAot
aW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQotewot
ICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIEFTU0VSVChvdXRPZkxpbmVDYXBh
Y2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkg
ewotICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5
KCkgPj0gY3VycmVudFNpemUpOwotICAgICAgICByZXR1cm4gY3VycmVudFNpemUgPT0gb3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHko
KSA+PSBwcm9wZXJ0eVRhYmxlKCktPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgaWYgKHBy
b3BlcnR5VGFibGUoKS0+aGFzRGVsZXRlZE9mZnNldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBwcm9wZXJ0eVRhYmxlKCkt
PnNpemUoKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpID09IHRvdGFsU3Rv
cmFnZUNhcGFjaXR5KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5
VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQotewotICAgIHJldHVybiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmU7Ci19Ci0KIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVBy
b3BlcnR5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAoTElLRUxZKCFoYXNSYXJl
RGF0YSgpKSkKQEAgLTI3MSw3ICsyNDUsNyBAQCBpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0
dXJlOjpwcm9wZXJ0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKSBjb25zdAogewotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUg
PSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCk7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVy
dHlUYWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKIAogICAgIGlmICghcHJvcGVydHlUYWJs
ZSkgewogICAgICAgICBBU1NFUlQoIWlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKQEAgLTI5Miw2
ICsyNjYsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZQogICAg
IHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVu
Y3koKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKK30KKwogaW5saW5lIHNpemVf
dCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KHNpemVfdCBjdXJyZW50Q2FwYWNpdHkpCiB7
CiAgICAgaWYgKCFjdXJyZW50Q2FwYWNpdHkpCkBAIC0yOTksMTEgKzI3OCw2IEBAIGlubGluZSBz
aXplX3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2kKICAgICByZXR1cm4gY3VycmVudENhcGFj
aXR5ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogfQogCi1pbmxpbmUgc2l6ZV90IFN0cnVjdHVy
ZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkKLXsKLSAgICByZXR1cm4g
bmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxpbmVDYXBhY2l0eSgpKTsKLX0KLQog
aW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBKU1N0cmluZyogdmFsdWUsIFByb3BlcnR5U2xvdCB0b1N0cmluZ1RhZ1N5
bWJvbFNsb3QpCiB7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQpAQCAtMzExLDQgKzI4NSw4NSBA
QCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nCiAgICAgcmFyZURhdGEo
KS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShleGVjLCB2bSwgdGhpcywgdmFsdWUsIHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisKKyAgICBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworICAgIAorICAgIHNl
dFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKKyAgICAKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxp
ZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJv
bCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRp
b24oZmFsc2UpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisKKyAgICBQ
cm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFj
aXR5KTsKKyAgICAKKyAgICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZz
ZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRN
YXlDaGFuZ2UpOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGZ1bmMobG9j
a2VyLCBuZXdPZmZzZXQpOworICAgIHJldHVybiBuZXdPZmZzZXQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKworICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOworICAgIAorICAgIC8vIFdl
IE9OTFkgcmVtb3ZlIGZyb20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhh
dmUgYSBwaW5uZWQgcHJvcGVydHkgdGFibGUuCisgICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVt
IG5vdCB0byBoYXZlIGEgdGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCisgICAgUHJvcGVydHlU
YWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisKKyAgICBpZiAoIXRhYmxlKQor
ICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKworICAgIFByb3BlcnR5VGFibGU6OmZpbmRf
aXRlcmF0b3IgcG9zaXRpb24gPSB0YWJsZS0+ZmluZChyZXApOworICAgIGlmICghcG9zaXRpb24u
Zmlyc3QpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworICAgIAorICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CisKKyAgICB0YWJsZS0+cmVt
b3ZlKHBvc2l0aW9uKTsKKyAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOworCisg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIsIG9mZnNldCk7CisgICAg
cmV0dXJuIG9mZnNldDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBG
dW5jJiBmdW5jKQoreworICAgIHBpbih2bSwgZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkpOworICAg
IAorICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZnVuYyk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBBU1NFUlQoaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CisgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKKyAg
ICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKKyAgICAKKyAgICByZXR1cm4gcmVtb3Zl
KHByb3BlcnR5TmFtZSwgZnVuYyk7Cit9CisKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0UHJv
cGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQoreworICAgIG1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5zZXRNYXlCZU51bGwodm0sIHRoaXMsIHRhYmxlKTsKK30KKyAgICAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTYtMTEtMTEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgR0Mgc2hvdWxkIGJl
IG9wdGlvbmFsbHkgY29uY3VycmVudCBhbmQgZGlzYWJsZWQgYnkgZGVmYXVsdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NDU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAgICAgICBUaGUgcmVhc29u
IHdoeSBJIHdlbnQgdG8gc3VjaCBncmVhdCBwYWlucyB0byBtYWtlIFdURjo6TG9jayBmaXQgaW4g
dHdvIGJpdHMgaXMgdGhhdCBJCisgICAgICAgIGtuZXcgdGhhdCBJIHdvdWxkIGV2ZW50dWFsbHkg
bmVlZCB0byBzdHVmZiBvbmUgaW50byBzb21lIG1pc2NlbGxhbmVvdXMgYml0cyBvZiB0aGUKKyAg
ICAgICAgSlNDZWxsIGhlYWRlci4gVGhhdCB0aW1lIGhhcyBjb21lLCBiZWNhdXNlIHRoZSBjb25j
dXJyZW50IEdDIGhhcyBudW1lcm91cyByYWNlCisgICAgICAgIGNvbmRpdGlvbnMgaW4gdmlzaXRD
aGlsZHJlbiB0aGF0IGNhbiBiZSB0cml2aWFsbHkgZml4ZWQgaWYgZWFjaCBvYmplY3QganVzdCBo
YXMgYW4KKyAgICAgICAgaW50ZXJuYWwgbG9jay4gU29tZSBjZWxsIHR5cGVzIG1pZ2h0IHVzZSBp
dCB0byBzaW1wbHkgcHJvdGVjdCB0aGVpciBlbnRpcmUgdmlzaXRDaGlsZHJlbgorICAgICAgICBm
dW5jdGlvbiBhbmQgYW55dGhpbmcgdGhhdCBtdXRhdGVzIHRoZSBmaWVsZHMgaXQgdG91Y2hlcywg
d2hpbGUgb3RoZXIgY2VsbCB0eXBlcyBtaWdodAorICAgICAgICB1c2UgaXQgYXMgYSAibG9jayBv
ZiBsYXN0IHJlc29ydCIgdG8gaGFuZGxlIGNvcm5lciBjYXNlcyBvZiBhbiBvdGhlcndpc2Ugd2Fp
dC1mcmVlIG9yCisgICAgICAgIGxvY2stZnJlZSBhbGdvcml0aG0uIFJpZ2h0IG5vdywgaXQncyB1
c2VkIHRvIHByb3RlY3QgY2VydGFpbiB0cmFuc2Zvcm1hdGlvbnMgaW52b2x2aW5nCisgICAgICAg
IGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgIAorICAgICAgICBUbyBtYWtlIHRoaXMgaGFwcGVu
LCBJIGZhY3RvcmVkIHRoZSBXVEY6OkxvY2sgYWxnb3JpdGhtIGludG8gYSBMb2NrQWxnb3JpdGht
IHN0cnVjdCB0aGF0CisgICAgICAgIGlzIHRlbXBsYXRpemVkIG9uIGxvY2sgdHlwZSAodWludDhf
dCBmb3IgV1RGOjpMb2NrKSwgdGhlIGlzSGVsZEJpdCB2YWx1ZSAoMSBmb3IKKyAgICAgICAgV1RG
OjpMb2NrKSwgYW5kIHRoZSBoYXNQYXJrZWRCaXQgdmFsdWUgKDIgZm9yIFdURjo6TG9jaykuIFRo
aXMgY291bGQgaGF2ZSBiZWVuIGRvbmUgYXMKKyAgICAgICAgYSB0ZW1wbGF0aXplZCBMb2NrIGNs
YXNzIHRoYXQgYmFzaWNhbGx5IGNvbnRhaW5zIEF0b21pYzxMb2NrVHlwZT4uIFlvdSBjb3VsZCB0
aGVuIG1ha2UKKyAgICAgICAgYW55IGZpZWxkIGludG8gYSBsb2NrIGJ5IGJpdHdpc2VfY2FzdGlu
ZyBpdCB0byBUZW1wbGF0ZUxvY2s8ZmllbGQgdHlwZSwgYml0MSwgYml0Mj4uIEJ1dAorICAgICAg
ICB0aGlzIGZlbHQgdG9vIGRpcnR5LCBzbyBpbnN0ZWFkLCBMb2NrQWxnb3JpdGhtIGhhcyBzdGF0
aWMgbWV0aG9kcyB0aGF0IHRha2UKKyAgICAgICAgQXRvbWljPExvY2tUeXBlPiYgYXMgdGhlaXIg
Zmlyc3QgYXJndW1lbnQuIEkgdGhpbmsgdGhhdCB0aGlzIG1ha2VzIGl0IG1vcmUgbmF0dXJhbCB0
bworICAgICAgICBwcm9qZWN0IGEgTG9ja0FsZ29yaXRobSBvbnRvIGFuIGV4aXN0aW5nIEF0b21p
Yzw+IGZpZWxkLiBTYWRseSwgc29tZSBwbGFjZXMgaGF2ZSB0byBjYXN0CisgICAgICAgIHRoZWly
IG5vbi1BdG9taWM8PiBmaWVsZCB0byBBdG9taWM8PiBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3Jr
LiBMaWtlIHNvIG1hbnkgb3RoZXIgdGhpbmdzCisgICAgICAgIHdlIGRvLCB0aGlzIGp1c3Qgc2hv
d3MgdGhhdCB0aGUgQysrIHN0eWxlIG9mIGxhYmVsaW5nIGZpZWxkcyB0aGF0IGFyZSBzdWJqZWN0
IHRvIGF0b21pYworICAgICAgICBvcHMgYXMgYXRvbWljIGlzIGNvdW50ZXJwcm9kdWN0aXZlLiBN
YXliZSBzb21lIGRheSBJJ2xsIGNoYW5nZSBMb2NrQWxnb3JpdGhtIHRvIHVzZSBvdXIKKyAgICAg
ICAgb3RoZXIgQXRvbWljcyBBUEksIHdoaWNoIGRvZXMgbm90IHJlcXVpcmUgQXRvbWljPD4uCisg
ICAgICAgIAorICAgICAgICBXVEY6OkxvY2sgbm93IHVzZXMgTG9ja0FsZ29yaXRobS4gVGhlIHNs
b3cgcGF0aHMgYXJlIHN0aWxsIG91dGxpbmVkLiBJIGRvbid0IGZlZWwgdG9vCisgICAgICAgIGJh
ZCBhYm91dCB0aGUgTG9ja0FsZ29yaXRobS5oIGhlYWRlciBiZWluZyBpbmNsdWRlZCBpbiBzbyBt
YW55IHBsYWNlcyBiZWNhdXNlIHdlIGNoYW5nZQorICAgICAgICB0aGF0IGFsZ29yaXRobSBzbyBp
bmZyZXF1ZW50bHkuCisgICAgICAgIAorICAgICAgICBBbHNvLCBJIGFkZGVkIGEgaGFzRWxhcHNl
ZCh0aW1lKSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBtYWtlcyBpdCBzbyBtdWNoIG1vcmUgbmF0
dXJhbAorICAgICAgICB0byB3cml0ZSB0aW1lc2xpY2luZyBjb2RlLCB3aGljaCB0aGUgY29uY3Vy
cmVudCBHQyBoYXMgdG8gZG8gYSBsb3Qgb2YuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
d3RmL0xpc3REdW1wLmg6CisgICAgICAgICogd3RmL0xvY2suY3BwOgorICAgICAgICAoV1RGOjpM
b2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvdyk6
CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tGYWlybHlTbG93KToKKyAgICAgICAgKFdU
Rjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3dJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTG9j
ay5oOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tC
YXNlOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9jayk6CisgICAgICAg
IChXVEY6OkxvY2tCYXNlOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
aXNIZWxkKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0xvY2tBbGdvcml0
aG0uaDogQWRkZWQuCisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1p
bmdaZXJvKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3QpOgorICAgICAg
ICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6dHJ5TG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1
bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0KToKKyAg
ICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Fs
Z29yaXRobTo6dW5sb2NrRmFpcmx5KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6aXNM
b2NrZWQpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyk6CisgICAgICAg
IChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cpOgorICAgICAgICAqIHd0Zi9UaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUuY3BwOgorICAgICAgICAoV1RGOjpoYXNFbGFwc2VkKToKKyAgICAg
ICAgKiB3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg6CisKIDIwMTYtMTEtMTAgIEpGIEJh
c3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBGQUlMRUQ6
IGxlbmd0aCA+IG9mZnNldCBlbmNvdW50ZXJlZCB3aXRoIHdhc20ueWFtbC93YXNtL2pzLWFwaS90
ZXN0X01vZHVsZS5qcy5kZWZhdWx0LXdhc20KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAog
CiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAz
MzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBG
MEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMg
LyogTG9ja0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyog
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3
QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUw
MEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICov
OyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFE
RDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3
RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0
aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJ
CQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUx
NjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5
NjAwNDAwRTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyog
TG9ja0FsZ29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2Nr
ZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxh
dG9yLmggKi8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3Bw
ICovLApAQCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYg
LyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
NTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50
VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERh
dGFMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBE
YXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsx
MDYsMzYgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlWG9y
KFUgb3BlcmFuZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9z
ZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5mZXRjaF94b3Iob3BlcmFuZCwgb3JkZXIpOyB9CiAgICAg
CiAgICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29y
ZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZXhj
aGFuZ2UobmV3VmFsdWUsIG9yZGVyKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBG
dW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKKyAgICAgICAg
ZnVuYyhuZXdWYWx1ZSk7CisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhl
ZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5j
JiBmdW5jKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2F0aW9uUmVsYXhlZChmdW5j
KSkgeyB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAg
ICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgIGZ1bmMobmV3VmFsdWUpOworICAgICAg
ICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRy
YW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICB3aGlsZSAoIXRyeVRy
YW5zYWN0aW9uKGZ1bmMpKSB7IH0KKyAgICB9CiAKICAgICBzdGQ6OmF0b21pYzxUPiB2YWx1ZTsK
IH07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAg
c2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlzdEhhc2hTZXQuaAog
ICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5oCiAgICAgTUQ1LmgK
ICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcs
MTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNvcnRlZExpc3RE
dW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsK
K3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsK
IHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7
CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIwICsy
NiwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2suaCIKIAotI2luY2x1
ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0jaW5jbHVkZSAiU3RyaW5n
UHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCi0jaW5jbHVk
ZSA8dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9z
ZSA9IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQordm9p
ZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0K
LSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBv
biBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1p
dCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1
cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMg
dG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQp
Ci0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNw
dW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3Bpbkxp
bWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0
IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAotICAgICAgICAvLyBpZiB0
aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAg
ICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNv
IGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KLSAgICAgICAgUGFya2luZ0xv
dDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBh
cmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7Ci0gICAgICAgIGlm
IChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAgICAgICAgY2FzZSBEaXJlY3RI
YW5kb2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZlciByZWxlYXNlZC4g
SXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRoYXQgZGlkCi0gICAg
ICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2Nr
KCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZl
IGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIg
dGhlIGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdl
LCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBi
eXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKLSAgICAgICAgLy8gYXJvdW5k
IGFuZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xv
dyhtX2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKIHsKLSAgICB1bmxv
Y2tTbG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93
KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7CiB9CiAKIHZvaWQgTG9ja0Jh
c2U6OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKEZhaXIpOwotfQot
Ci1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MgZmFp
cm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMg
aW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAv
LyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBu
b3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJlIGhlbGQgYW5kIHBh
cmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5n
LgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0
IHx8IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCkgewotICAgICAgICAgICAg
aWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5
IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdl
IHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFs
bG93IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZl
IHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBz
dGlsbAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KLSAgICAgICAgQVNTRVJUKG9s
ZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIFBhcmtp
bmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUsCi0gICAgICAgICAgICBbJl0g
KFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKLSAgICAgICAg
ICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhl
IGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdl
IHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhy
ZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2Ug
aGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0gICAgICAgICAgICAgICAgICAg
IC8vIHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1v
cmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUuc3RvcmUoaGFzUGFya2VkQml0
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9y
ZSgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0
aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6RmFpcik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVm
IFdURl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5jbHVkZSA8d3RmL0F0b21pY3Mu
aD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRo
bS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KIApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3BlY3RvcjsKIAogbmFtZXNwYWNl
IFdURiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90LCAxLCAyPiBEZWZhdWx0TG9j
a0FsZ29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgb25s
eSByZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUK
IC8vIGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVuZGVkIGxvY2tpbmcgaXMgaW5s
aW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCiAvLyBoYW5kbGVkIGJ5
IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0IGlzIGNvbXBldGV0
aXZlIHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMgKzU0LDEzIEBAIG5hbWVzcGFj
ZSBXVEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAg
ICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJl
ZCEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvY2tTbG93KCk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNz
dW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsKICAgICB9CiAKICAg
ICBib29sIHRyeUxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAg
dWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgICAgIGlm
IChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50
Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdv
cml0aG06OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAKICAgICAvLyBOZWVkIHRoaXMgdmVyc2lv
biBmb3Igc3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4IEBAIHN0cnVjdCBMb2NrQmFz
ZSB7CiAgICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2VjdGlvbnMgYWx3YXlz
IGdldCBhIGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9jaygpCiAgICAgewotICAgICAgICBpZiAo
TElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBu
b2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB1bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdv
cml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxv
Y2tTbG93KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyBsaWtlIHVubG9jaygpIGJ1dCBpdCBn
dWFyYW50ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2NrIGZhaXJseS4gRm9yIHNob3J0IGNyaXRp
Y2FsCkBAIC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gd2FudC4K
ICAgICB2b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
ZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdh
aXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tG
YWlybHlTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06
OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tGYWly
bHlTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxk
Qml0OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OmlzTG9ja2VkKG1fYnl0
ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CkBAIC0xMjYsMjEgKzEwOSwx
MCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0
ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQgPSAyOwotCisgICAg
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
dW5sb2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0gRmFpcm5lc3MgewotICAgICAgICBG
YWlyLAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZvaWQgdW5sb2NrU2xvd0ltcGwoRmFp
cm5lc3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAgICAgICBCYXJnaW5nT3Bwb3J0dW5p
dHksCi0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9OwogCiAgICAgLy8gTWV0aG9kIHVzZWQg
Zm9yIHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlSZXNldCgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tB
bGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tB
bGdvcml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRobV9oCisKKyNpbmNsdWRlIDx0aHJl
YWQ+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhp
cyBpcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2NrLgorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+Citj
bGFzcyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBpc0hlbGRCaXQgfCBoYXNQYXJr
ZWRCaXQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdEFzc3VtaW5nWmVybyhB
dG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRWYWx1ZSAmIGlzSGVsZEJpdCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4
Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29y
ZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxM
b2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWxvY2tGYXN0KGxv
Y2spKSkKKyAgICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgYm9vbCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxv
YWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEJ5
dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQs
IDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBM
b2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
KyAgICAgICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRWYWx1ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQor
ICAgICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZhaXIpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICB1bmxv
Y2tTbG93KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2tl
ZChjb25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxv
Y2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICB9Cisg
ICAgCisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGxvY2tTbG93KEF0b21pYzxMb2NrVHlw
ZT4mIGxvY2spCisgICAgeworICAgICAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAg
ICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9u
IHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5M
aW1pdCA9IDQwOworICAgIAorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90
IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKworICAgICAgICAgICAgLy8gV2UgYWxs
b3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVW
YWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2Jv
ZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0
byBzcGluIGFyb3VuZC4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQ
YXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAgICAgICAgIHNw
aW5Db3VudCsrOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0
LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAgICAgLy8gaWYgdGhl
IHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQuCisgICAg
ICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAg
ICAgICAgICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3Vy
cmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxo
YXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAg
ICAgICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9CisgICAgICAgICAgICAg
ICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRCeXRlVmFsdWUgfCBp
c0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2Fz
VW5wYXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihw
YXJrUmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3
YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhy
ZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBn
ZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAgICAgICAgICAgICAg
ICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBk
byBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdl
IGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBj
aGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBhcm91bmQgYW5kIHRy
eSBhZ2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZhaXJuZXNzIHsKKyAg
ICAgICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZFUl9JTkxJTkUgc3Rh
dGljIHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWly
bmVzcykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdl
YWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlz
CisgICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVu
IGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCisgICAgICAgIC8v
IGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3
ZSBhcmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90
IG9sZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
CisgICAgICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdAorICAg
ICAgICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFz
UGFya2VkQml0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKChvbGRCeXRlVmFsdWUgJiBt
YXNrKSA9PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFj
dGx5IG9uZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQgdGhyZWFkCisgICAg
ICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNh
bWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCisgICAgICAgICAgICAv
LyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVy
ZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAorICAgICAgICAgICAgLy8gb3RoZXIg
dGhyZWFkcyBwYXJrZWQuCisgICAgICAgICAgICBBU1NFUlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2sp
ID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya09uZSgKKyAgICAgICAgICAgICAgICAmbG9jaywKKyAgICAgICAgICAgICAgICBbJl0g
KFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVy
IHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKKyAgICAgICAgICAgICAgICAgICAg
Ly8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKChsb2NrLmxvYWQoKSAmIG1hc2spID09IChpc0hlbGRCaXQg
fCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0
LnRpbWVUb0JlRmFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVu
bG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRo
YXQgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rp
b24oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1
bml0eTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZW51bSBUb2tlbiB7CisgICAgICAgIEJhcmdp
bmdPcHBvcnR1bml0eSwKKyAgICAgICAgRGlyZWN0SGFuZG9mZgorICAgIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpMb2NrQWxnb3JpdGhtOworCisjZW5kaWYgLy8g
V1RGX0xvY2tBbGdvcml0aG1faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFt
aWNDbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHlu
YW1pY0Nsb2NrVHlwZS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkg
QEAKICNpbmNsdWRlICJDb25kaXRpb24uaCIKICNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVkZSAi
UHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlIDxjZmxvYXQ+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEyOCw2ICsxMzEs
MTcgQEAgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cAogICAgIGZha2VD
b25kaXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCB0aW1lKTsKIH0KIAorYm9vbCBoYXNFbGFwc2Vk
KGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZSkKK3sKKyAgICAvLyBBdm9pZCBk
b2luZyBub3coKS4KKyAgICBpZiAoISh0aW1lID4gdGltZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vj
b25kcygwKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiB0aW1lIDw9IHRpbWUubm93V2l0aFNhbWVDbG9jaygpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJp
dmF0ZToKIAogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlJik7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhc0VsYXBzZWQoY29u
c3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1
c2luZyBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNl
ZDsKK3VzaW5nIFdURjo6c2xlZXA7CiAKICNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294616</attachid>
            <date>2016-11-12 09:41:49 -0800</date>
            <delta_ts>2016-11-12 11:35:57 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>251561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODU5MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTExICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwODU4NC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0J
KHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFs
TWFjaGluZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTEsNyArMTUxLDcgQEAgc3RhdGljIGlk
IGdldEludGVybmFsT2JqY09iamVjdChpZCBvYmplYwogLSAoYm9vbClpc09sZEV4dGVybmFsT2Jq
ZWN0OihpZClvYmplY3QKIHsKICAgICBKU0M6OlZNKiB2bSA9IHRvSlMobV9ncm91cCk7Ci0gICAg
cmV0dXJuIHZtLT5oZWFwLnNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFxdWVSb290KG9iamVjdCk7
CisgICAgcmV0dXJuIHZtLT5oZWFwLmNvbGxlY3RvclNsb3RWaXNpdG9yKCkuY29udGFpbnNPcGFx
dWVSb290KG9iamVjdCk7CiB9CiAKIC0gKHZvaWQpYWRkRXh0ZXJuYWxSZW1lbWJlcmVkT2JqZWN0
OihpZClvYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjEzLDYgKzYxMyw3IEBACiAJCTBG
QTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgKi87IH07CiAJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkE3QThFRTE4Q0U0RkQ4MDA1MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICov
OyB9OworCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBREREMUMx
REQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLzsgfTsKIAkJMEZBREU2
NzMxRDREMjNCRTAwNzY4NDU3IC8qIEhlYXBVdGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFERTY3MjFENEQyM0JDMDA3Njg0NTcgLyogSGVhcFV0
aWwuaCAqLzsgfTsKIAkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFG
N0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZB
RjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBRjdFRkIxNjVCQTkxOTAwMEM4NDU1
IC8qIEpJVERpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0zMDA0LDYgKzMwMDUsNyBAQAogCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVBMThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVEMThDRTRGRDgwMDUyMzcxRCAvKiBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZBREREMUMxREQwMUVEQzAwODI3NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdW1lVGhlV29ybGRTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFERTY3MjFENEQyM0JDMDA3Njg0
NTcgLyogSGVhcFV0aWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFV0
aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBRjdFRkExNjVCQTkxOTAwMEM4
NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVREaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTY4Niw2ICs1Njg4LDcgQEAKIAkJCQkwRkE3NjIwMzFEQjkyNDIz
MDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRjdDRjk0RTFEQkVFRTg2MDA5OENDMTIg
LyogUmVsZWFzZUhlYXBBY2Nlc3NTY29wZS5oICovLAorCQkJCTBGQURERDFDMUREMDFFREMwMDgy
NzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAw
NjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdD
MkMgLyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyog
U2xvdFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC03OTE4LDYgKzc5MjEsNyBAQAogCQkJCTBGRkI5
MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFy
c2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkFEREQxRDFERDAxRURFMDA4Mjc1
RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMzRDJCMEEx
RDM0MzE2MjAwQkE5MThDIC8qIEhlYXBDZWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAwODAsNyArMTAwODQsNiBAQAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlG
RiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QTFBMDk1
MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1M0ZGN0Y5RDFEQzAwREIxMDBBMjZDQ0MgLyogV2FzbUZvcm1hdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRD
cmFzCiAgICAgICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGpp
dC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAg
ICAgIGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIHZhbHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9v
bCBsaW5rQ29kZUlubGluZQogYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKFZNJiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIENDYWxsSGVscGVycyBqaXQo
JnZtKTsKLQorICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHVi
SW5mby5wYXRjaC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZh
bHVlUmVncygpOwogCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVy
YXRlU2VsZlByb3BlcnR5QQogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigp
KTsKICAgICAgICAgc3RvcmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICB9Ci0KKyAgICAK
ICAgICBqaXQubG9hZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgdmFsdWUpOwogCkBAIC0yNjUsNyAr
MjY1LDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoVgogICAgIEpT
VmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2ggPSBnZXRTY3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8pOwogCi0gICAgaml0LmxvYWQ4KENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2Ny
YXRjaCk7CisgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGppdC5hbmQzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBz
Y3JhdGNoKTsKICAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxlQnJhbmNo
MzIoCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGFycmF5LT5pbmRleGluZ1R5cGUoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1v
cnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAg
IGNhc2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAg
ICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAg
ICAgaml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8s
IHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xv
d1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAvLyBieXRlY29kZSBvcGVy
YXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJlaW5nIHJlZXhlY3V0
ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlpZmljYXRpb24gaXMg
bm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGppdC0+bV9qaXQubG9hZDgoCi0gICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIpOworICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNj
T2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlR1BSKTsKICAgICAgICAgICAg
IG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAgICAgICAgICAgICAgIGppdCwgaml0LT5q
dW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3RydWN0dXJlR1BSLCBtX2FycmF5TW9kZSkp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKIAogICAgIGNh
c2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7IC8vIFRo
aXMgaXMgYSBzdG9yZS1zdG9yZSBmZW5jZS4KICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvVHlwZSk7CiAgICAgICAgIHdyaXRl
KEpTQ2VsbF90eXBlSW5mb0ZsYWdzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOwor
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhzY3Jh
dGNoMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkpLCBz
Y3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQub3IzMihzY3JhdGNo
MiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNz
T2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNz
ZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihzY3JhdGNoMSwgYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAg
ICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
QW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5sc2hpZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAg
IG1faml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwNSw5ICs1MDUsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIEpTQ2Vs
bCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKIAotICAgICAgICBpZiAocHJvcGVydHkuaXNV
SW50MzIoKSkgeworICAgICAgICBpZiAocHJvcGVydHkuaXNVSW50MzIoKSkKICAgICAgICAgICAg
IHJldHVybiBnZXRCeVZhbChleGVjLCBiYXNlLCBwcm9wZXJ0eS5hc1VJbnQzMigpKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CisgICAgICAgIGVsc2UgaWYgKHBy
b3BlcnR5LmlzRG91YmxlKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBwcm9wZXJ0eUFzRG91Ymxl
ID0gcHJvcGVydHkuYXNEb3VibGUoKTsKICAgICAgICAgICAgIHVpbnQzMl90IHByb3BlcnR5QXNV
SW50MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlBc0RvdWJsZSk7CiAgICAgICAg
ICAgICBpZiAocHJvcGVydHlBc1VJbnQzMiA9PSBwcm9wZXJ0eUFzRG91YmxlICYmIGlzSW5kZXgo
cHJvcGVydHlBc1VJbnQzMikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCwxNiArNjEwLDM0IEBAIENvbXBpbGF0aW9uS2V5
IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tzKCkKK3Zv
aWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQogeworICAg
IGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3
aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVl
ZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKKyAgICAvLyBhbGwgb3VyIENvZGVC
bG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKworICAgIHNsb3RWaXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jayk7CisgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIHNsb3RWaXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKK30K
Kwordm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQoreworICAgIGlmICghaXNL
bm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAogICAgIC8vIENv
bXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9jayB3aXRob3V0IHBl
cmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2UgbmVlZCB0byBiZSBw
ZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAgICAvLyBhbGwgb3VyIENvZGVCbG9ja3MgbXVz
dCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAgIEhlYXA6OmhlYXAoY29kZUJsb2NrKS0+d3Jp
dGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJh
cnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmll
cihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CiAgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAgICAgICBIZWFwOjpo
ZWFwKHByb2ZpbGVkREZHQ29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJs
b2NrKTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2sp
OwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsKICAgICAKLSAgICB2
b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgIHZvaWQgbWFya0NvZGVCbG9ja3MoU2xvdFZp
c2l0b3ImKTsKKyAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogICAgIHZvaWQgY2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAgICBib29sIGlzS25v
d25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODM2LDcgKzgzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJyYXkoTm9kZSogbm8KICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OiB7CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIDAsCiAgICAgICAgICAgICBqdW1wU2xvd0ZvclVud2Fu
dGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CkBAIC05MDAsNyArOTAw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSogbm9kZQogICAgICAgICAg
ICAgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2Fk
OCgKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgp
KSwgdGVtcEdQUik7CiAgICAgICAgIAogICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dG
b3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBpZiAo
IU9wdGlvbnM6OnVzZU9TUkVudHJ5VG9GVEwoKSkKICAgICAgICAgICAgIGxldmVsID0gRlRMOjpD
YW5Db21waWxlOwotCisgICAgICAgIAogICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29w
cygpOwogICAgICAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcyA9ICptX2dyYXBoLm1fbmF0
dXJhbExvb3BzOwogICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+
IG5hdHVyYWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKG5h
dHVyYWxMb29wcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
b3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci0KICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5o
IgogI2luY2x1ZGUgIkRGR1NhZmVwb2ludC5oIgpAQCAtMzgsNiArMzYsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwogY2xhc3Mg
V29ya2xpc3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKIHB1YmxpYzoK
ICAgICBUaHJlYWRCb2R5KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmts
aXN0LCBUaHJlYWREYXRhJiBkYXRhLCBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbj4gY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKQEAgLTM0OSw2
ICszNDksMTcgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogICAg
IGNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAordm9pZCBXb3JrbGlzdDo6bWFy
a0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmIChwbGFuLT52
bSAhPSAmdm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcGxhbi0+bWFya0NvZGVC
bG9ja3Moc2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJD
b2RlQmxvY2tzKFZNJiB2bSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKQEAg
LTM1Niw3ICszNjcsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZt
CiAgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBs
YW4tPnZtICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5yZW1l
bWJlckNvZGVCbG9ja3MoKTsKKyAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsK
ICAgICB9CiB9CiAKQEAgLTU1Myw2ICs1NjQsMTQgQEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9y
Vk0oVk0mIHZtKQogICAgIH0KIH0KIAordm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RW
aXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJl
ck9mV29ya2xpc3RzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmts
aXN0ID0gREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCisgICAgICAgICAg
ICB3b3JrbGlzdC0+bWFya0NvZGVCbG9ja3Modm0sIHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisK
IHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKQEAgLTU2MSw3ICs1ODAsMjIgQEAg
dm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogICAgIH0KIH0KIAotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3ZvaWQgY29tcGxldGVB
bGxQbGFuc0ZvclZNKFZNJikKK3sKK30KKwordm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RW
aXNpdG9yJikKK3sKK30KKwordm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKQoreworfQogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDggKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUo
REZHX0pJVCkKLQogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHJlYWREYXRh
LmgiCiAjaW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgpAQCAtNDIsNiArNDAsOCBAQCBj
bGFzcyBTbG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKwogY2xhc3MgV29ya2xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrbGlzdD4gewogcHVi
bGljOgogICAgIGVudW0gU3RhdGUgeyBOb3RLbm93biwgQ29tcGlsaW5nLCBDb21waWxlZCB9OwpA
QCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVh
ZHlQbGFuc0ZvclZNKHZtKTsKICAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwog
CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCBy
ZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JW
TUFyZVJlYWR5KFZNJik7CkBAIC0xNjMsOSArMTY0LDExIEBAIGlubGluZSBXb3JrbGlzdCYgZXhp
c3RpbmdXb3JrbGlzdEZvckluZGUKICAgICByZXR1cm4gKnJlc3VsdDsKIH0KIAorI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwordm9p
ZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJik7CiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTQgKzczLDE0IEBAIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFi
c3RyYWN0SGVhcFJlcG8KICAgICAsIGFic29sdXRlKCZyb290LCAiYWJzb2x1dGUiKQogewogICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IG91ciBleHBsaWNpdCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgU3Ry
dWN0dXJlSURCbG9iIG1hdGNoIHJlYWxpdHkuCi0gICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxf
aW5kZXhpbmdUeXBlLm9mZnNldCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5
cGVJbmZvVHlwZS5vZmZzZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5n
VHlwZS5vZmZzZXQoKSArIDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOwotICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAzID09IEpTQ2Vs
bF9jZWxsU3RhdGUub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4
aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSArIDEgPT0g
SlNDZWxsX3R5cGVJbmZvVHlwZS5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxs
X2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5mb0ZsYWdz
Lm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlz
Yy5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CiAKICAgICBKU0Nl
bGxfc3RydWN0dXJlSUQuY2hhbmdlUGFyZW50KCZKU0NlbGxfaGVhZGVyKTsKICAgICBKU0NlbGxf
dXNlZnVsQnl0ZXMuY2hhbmdlUGFyZW50KCZKU0NlbGxfaGVhZGVyKTsKLSAgICBKU0NlbGxfaW5k
ZXhpbmdUeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICBKU0NlbGxf
aW5kZXhpbmdUeXBlQW5kTWlzYy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAg
ICAgSlNDZWxsX3R5cGVJbmZvVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7
CiAgICAgSlNDZWxsX3R5cGVJbmZvRmxhZ3MuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0
ZXMpOwogICAgIEpTQ2VsbF9jZWxsU3RhdGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0
ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OCwxMSArNTgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1h
Y3JvKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvciwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9m
VmVjdG9yKCkpIFwKICAgICBtYWNybyhKU0NlbGxfY2VsbFN0YXRlLCBKU0NlbGw6OmNlbGxTdGF0
ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2hlYWRlciwgMCkgXAotICAgIG1hY3JvKEpT
Q2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKKyAgICBt
YWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBKU0Nl
bGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb1R5
cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0NlbGxfdXNl
ZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU0Nl
bGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAg
ICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1
dGFibGUoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGUsIEpTRnVuY3Rpb246Om9mZnNl
dE9mU2NvcGVDaGFpbigpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9yYXJlRGF0YSwgSlNGdW5j
dGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAg
SklUQ29kZTo6fkpJVENvZGUoKQogICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAgICAgICAg
IGRhdGFMb2coY29tbWEsIG1fYjNDb2RlKTsKICAgICAgICAgZGF0YUxvZyhjb21tYSwgbV9hcml0
eUNoZWNrRW50cnlwb2ludCk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShy
ZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3ODAsNiArMjc4MCwxMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3Jh
cGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIEZlbmNl
VmFsdWUqIGZlbmNlID0gbV9vdXQuZmVuY2UoKTsKKyAgICAgICAgLy8gV2UgY291bGQgZGVjb3Jh
dGUgdGhpcyB3aXRoIHRoZSB1bmlvbiBvZiBidXR0ZXJmbHkgYW5kIHN0cnVjdHVyZSwgYnV0IHRo
aXMgd29uJ3QKKyAgICAgICAgLy8gaGVscCB0aGF0IG11Y2guIFByZWNpc2UgcmVhZCBhY2NvdW50
aW5nIGlzIG1vc3RseSBmb3Igc3RvcmUgZWxpbWluYXRpb24gYW5kIGlmIHRoaXMKKyAgICAgICAg
Ly8gcmVhZHMgc3RydWN0dXJlIHRoZW4gaXQnbGwgYmxvY2sgdGhhdCBzdG9yZSBlbGltaW5hdGlv
bi4gV2UgcmVhbGx5IHdhbnQgdG8gYmUgYWJsZQorICAgICAgICAvLyB0byBwdXQgYSByZWxlYXNl
IGZsYWcgb24gdGhlIHN0b3JlIGJlbG93LgorICAgICAgICBmZW5jZS0+d3JpdGUgPSBIZWFwUmFu
Z2UoKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91czsKICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX25v
ZGUtPnRyYW5zaXRpb24oKS0+bmV4dDsKQEAgLTUwMzQsNiArNTA0MSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQu
bG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CiAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAogICAgICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2soKSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVy
KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKQEAgLTUwNDEsNyArNTA0OSwxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKICAg
ICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFudC5vZmZzZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOwotCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0
b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0g
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5p
bmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlu
bGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKQEAgLTUwNDksNyArNTA2MSw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50Lm5ld1N0cnVj
dHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdl
LCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE3Mzks
NyArMTE3NTAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAg
ICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgICAgIExWYWx1ZSBp
bmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9p
bmRleGluZ1R5cGVBbmRNaXNjKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUuYXJyYXlDbGFzcygpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5h
bEFycmF5OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNyArMjc3
LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgICAgICBpZiAoQXJyYXlQcm9m
aWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbikt
PmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CiAgICAgICAgICAg
ICAgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NP
Zkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIGppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
ICAgICAgICAgICAgIGppdC5sc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDIp
OwogICAgICAgICAgICAgICAgIGppdC5vcjMyKEdQUkluZm86OnJlZ1QyLCBNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDE0ICs0MCw4IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7
CiAgICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhh
dCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwK
IAotICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0g
YW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8v
IGdvaW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5z
IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8g
VGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0
aGVyIGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0
IGlzIGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25j
dXJyZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAg
T2xkR3JleSA9IDMKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUg
c2Nhbm5lZC4KKyAgICBHcmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFj
a1RocmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFj
aXRlT3JCbGFjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21l
bnRlZEFycmF5LmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2
YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdv
cmxkU2NvcGUgeworcHVibGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkK
KyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNl
Q29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6
Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7
CisgICAgICAgIAorICAgICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAg
CisgICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25z
Ojp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgbV9oZWFwLnN0b3BUaGVXb3Js
ZCgpOworCisgICAgICAgIGRhdGFMb2coIltHQzogIik7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBIZWFwJiBtX2hlYXA7Cit9OworCiBuYW1lc3BhY2UgewogCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IGxhcmdlSGVhcFNpemUgPSAzMiAqIE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVyYWdlIHdl
YnBhZ2UuCkBAIC0yNDQsNyArMjczLDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhl
YXBUeXBlKQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4
dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9z
bG90VmlzaXRvcigqdGhpcykKKyAgICAsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtl
X3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQorICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0
ZDo6bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkK
ICAgICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkKICAg
ICAsIG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVTZXQ+
KCkpCkBAIC0yNjYsNiArMjk2LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBU
eXBlKQogI2lmIFVTRShGT1VOREFUSU9OKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lv
bkNvdW50KDApCiAjZW5kaWYKKyAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6
bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJr
U3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVy
Q2xpZW50KCZoZWFwSGVscGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6
Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNyZWF0ZSgpKQpAQCAtNDE2LDEyICs0NDgsMTIgQEAgdm9pZCBIZWFwOjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcgogCiB2b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygp
CiB7Ci0gICAgbV9zbG90VmlzaXRvci5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICBtX2Nv
bGxlY3RvclNsb3RWaXNpdG9yLT5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIH0KIAogdm9pZCBI
ZWFwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCkKIHsKLSAgICBtX3Nsb3RWaXNp
dG9yLmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKKyAgICBtX2NvbGxlY3RvclNs
b3RWaXNpdG9yLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CiB9CiAKIHZvaWQg
SGVhcDo6d2lsbFN0YXJ0SXRlcmF0aW5nKCkKQEAgLTQzOSwxMTcgKzQ3MSwxNjQgQEAgdm9pZCBI
ZWFwOjpjb21wbGV0ZUFsbEpJVFBsYW5zKCkKICNpZiBFTkFCTEUoSklUKQogICAgIEpJVFdvcmts
aXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQotI2lmIEVOQUJMRShERkdfSklUKQogICAgIERGRzo6Y29tcGxldGVBbGxQbGFuc0Zv
clZNKCptX3ZtKTsKLSNlbmRpZgogfQogCi12b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NT
dGFydFRpbWUpCit2b2lkIEhlYXA6Om1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSkK
IHsKLSAgICBUaW1pbmdTY29wZSBtYXJrUm9vdHNUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtSb290cyIpOworICAgIFRpbWluZ1Njb3BlIG1hcmtUb0ZpeHBvaW50VGltaW5nU2NvcGUoKnRo
aXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCIpOwogICAgIAotICAgIEhlYXBSb290VmlzaXRvciBo
ZWFwUm9vdFZpc2l0b3IobV9zbG90VmlzaXRvcik7CisgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBS
b290VmlzaXRvcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAgICAgCi0gICAgewotICAgICAg
ICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFy
a1Jvb3RzIGJlZm9yZSBjb252ZXJnZW5jZSIpOworICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpIHsKKyAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigp
OworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKKyAg
ICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT5jbGVhcigpOworICAgIH0KIAotI2lmIEVOQUJMRShE
RkdfSklUKQotICAgICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7Ci0jZW5kaWYK
KyAgICBiZWdpbk1hcmtpbmcoKTsKIAotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAg
ICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1w
bGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIG93
biB0aGUgbG9jayBmcm9tIG5vdyB1bnRpbCB3ZSdyZSBkb25lCi0gICAgICAgICAgICAvLyBtYXJr
aW5nIHRoZSBTYW1wbGluZ1Byb2ZpbGVyJ3MgZGF0YSBiZWNhdXNlIG9uY2Ugd2UgdmVyaWZ5IHRo
ZQotICAgICAgICAgICAgLy8gU2FtcGxpbmdQcm9maWxlcidzIHN0YWNrIHRyYWNlcywgd2UgZG9u
J3Qgd2FudCBpdCB0byBhY2N1bXVsYXRlCi0gICAgICAgICAgICAvLyBtb3JlIHN0YWNrIHRyYWNl
cyBiZWZvcmUgd2UgZ2V0IHRoZSBjaGFuY2UgdG8gbWFyayBpdC4KLSAgICAgICAgICAgIC8vIFRo
aXMgbG9jayBpcyByZWxlYXNlZCBpbnNpZGUgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkuCi0gICAg
ICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkubG9jaygpOwotICAgICAgICAgICAg
c2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOwotICAgICAg
ICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgIG1fcGFyYWxsZWxN
YXJrZXJzU2hvdWxkRXhpdCA9IGZhbHNlOwogCi0gICAgICAgIGlmIChtX2NvbGxlY3Rpb25TY29w
ZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpIHsKLSAgICAgICAgICAgIG1fb3BhcXVlUm9vdHMu
Y2xlYXIoKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJrU3RhY2soKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJlZ2luTWFya2luZygpOwotCi0gICAgICAgIG1fcGFyYWxsZWxN
YXJrZXJzU2hvdWxkRXhpdCA9IGZhbHNlOwotCi0gICAgICAgIG1faGVscGVyQ2xpZW50LnNldEZ1
bmN0aW9uKAotICAgICAgICAgICAgW3RoaXNdICgpIHsKLSAgICAgICAgICAgICAgICBTbG90Vmlz
aXRvciogc2xvdFZpc2l0b3I7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+
IG5ld1Zpc2l0b3IgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlx
dWU8U2xvdFZpc2l0b3I+KCp0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yID0gbmV3VmlzaXRvci5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9h
dmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAg
IH0KKyAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigKKyAgICAgICAgW3RoaXNdICgpIHsK
KyAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNp
dG9yPiBuZXdWaXNpdG9yID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlx
dWU8U2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3Ig
PSBuZXdWaXNpdG9yLmdldCgpOworICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVs
U2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NUaHJlYWRUeXBlOjpIZWxwZXIpOworICAgICAgICAg
ICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKIAotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJh
bGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RW
aXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJs
ZXIgcGFyYWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNs
b3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAg
ICAgICAgICAgICBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90Vmlz
aXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwogCi0gICAgICAgIG1fc2xvdFZpc2l0
b3IuZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgfQotICAgIAotICAgIHsKLSAgICAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwotICAgICAgICBUaW1pbmdTY29w
ZSBjb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnZlcmdl
bmNlIik7Ci0gICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9y
KTsKLSAgICAgICAgCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKIAorICAgIFNlY29u
ZHMgY29uY3VycmVudFRpbWU7CisgICAgZG91YmxlIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlv
ID0gMC4xOworICAgIGNvbnN0IGRvdWJsZSByYXRpb1N0ZXAgPSAxLjM7CisgICAgTW9ub3Rvbmlj
VGltZSBpbml0aWFsVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIE1vbm90b25pY1Rp
bWUgdG9wT2ZMb29wVGltZSA9IGluaXRpYWxUaW1lOworICAgIGZvciAodW5zaWduZWQgaXRlcmF0
aW9uID0gMTsgOyArK2l0ZXJhdGlvbikgeworICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgICAgIGRhdGFMb2coImkjIiwgaXRlcmF0aW9uLCAiICIpOworICAgICAgICBNb25v
dG9uaWNUaW1lIHRpbWVUb1Jlc3VtZSA9IHRvcE9mTG9vcFRpbWUgKyBjb25jdXJyZW50VGltZSAq
IHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvOworICAgICAgICBzdG9wcGVkT3ZlckNvbmN1cnJl
bnRSYXRpbyAqPSByYXRpb1N0ZXA7CiAgICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3Bl
IHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29uc2Vy
dmF0aXZlIHNjYW4iKTsKKyAgICAgICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGlt
aW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCBjb25zZXJ2YXRpdmUgc2NhbiIp
OwogICAgICAgICAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoKnRoaXMp
OwogICAgICAgICAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2Up
OwogICAgICAgICAgICAgZ2F0aGVyU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAg
ICAgICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAg
ICAgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAg
ICAgIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIHZpc2l0IHJvb3RzIHRoYXQgZG9uJ3Qg
Z2V0IGJhcnJpZXJlZCwgc28gZWFjaCBmaXhwb2ludCBpdGVyYXRpb24ganVzdCByZXZpc2l0cwor
ICAgICAgICAvLyBhbGwgb2YgdGhlbS4KKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorICAgICAg
ICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CisjZW5kaWYKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0
aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9j
a3MgdGhhdCBhcmUKLSAgICAgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBIb3dldmVyLCB3
ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBjb2RlIGJsb2Nr
Ci0gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5l
ZWRzIGEgYmFycmllci4KLSAgICAgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3Vy
cmVudGx5RXhlY3V0aW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmlzaXRFeHRlcm5h
bFJlbWVtYmVyZWRTZXQoKTsKLSAgICAgICAgdmlzaXRTbWFsbFN0cmluZ3MoKTsKLSAgICAgICAg
dmlzaXRQcm90ZWN0ZWRPYmplY3RzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0QXJn
dW1lbnRCdWZmZXJzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0RXhjZXB0aW9uKGhl
YXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0
b3IpOwotICAgICAgICB2aXNpdEhhbmRsZVN0YWNrKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAg
IHZpc2l0U2FtcGxpbmdQcm9maWxlcigpOwotICAgICAgICB2aXNpdFR5cGVQcm9maWxlcigpOwot
ICAgICAgICB2aXNpdFNoYWRvd0NoaWNrZW4oKTsKLSAgICAgICAgdHJhY2VDb2RlQmxvY2tzQW5k
SklUU3R1YlJvdXRpbmVzKCk7Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9tU2hhcmVk
KFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgfQotICAgIAotICAgIFRpbWluZ1Njb3Bl
IHBvc3RDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGFmdGVy
IGNvbnZlcmdlbmNlIik7Ci0KLSAgICAvLyBXZWFrIHJlZmVyZW5jZXMgbXVzdCBiZSBtYXJrZWQg
bGFzdCBiZWNhdXNlIHRoZWlyIGxpdmVuZXNzIGRlcGVuZHMgb24KLSAgICAvLyB0aGUgbGl2ZW5l
c3Mgb2YgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCBncmFwaC4KLSAgICB2aXNpdFdlYWtIYW5kbGVz
KGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGlmIChtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNU
b0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQorICAgICAgICAgICAgbV92bS0+c21hbGxT
dHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMp
CisgICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAobV9tYXJrTGlzdFNldCAmJiBtX21hcmtMaXN0U2V0LT5zaXplKCkp
CisgICAgICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKGhlYXBSb290Vmlz
aXRvciwgKm1fbWFya0xpc3RTZXQpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLT5l
eGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRy
ZXNzT2ZFeGNlcHRpb24oKSk7CisgICAgICAgIGlmIChtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCisg
ICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hh
bmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFw
Um9vdFZpc2l0b3IpOworCisjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICBp
ZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJv
ZmlsZXIoKSkgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoc2FtcGxpbmdQcm9maWxl
ci0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZl
cmlmaWVkU3RhY2tUcmFjZXMoKTsKKyAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0
KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJTYW1w
bGluZyBQcm9maWxlciBkYXRhOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAg
ICB9CisjZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQorICAgICAgICAKKyAgICAg
ICAgaWYgKG1fdm0tPnR5cGVQcm9maWxlcigpKQorICAgICAgICAgICAgbV92bS0+dHlwZVByb2Zp
bGVyTG9nKCktPnZpc2l0KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4oKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX2ppdFN0dWJSb3V0
aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwor
CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vz
c2FyeSgpOworICAgICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxT
bG90VmlzaXRvcnMpCisgICAgICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPm1lcmdlT3BhcXVlUm9v
dHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyho
ZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAg
ICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgREZHOjpt
YXJrQ29kZUJsb2NrcygqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICBi
b29sIHNob3VsZFRlcm1pbmF0ZSA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmlzRW1wdHkoKSAm
JiBtX211dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdl
IHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4g
YW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCisgICAgICAgIC8vIHJ1bm5pbmcgcmlnaHQgbm93LiBI
b3dldmVyLCB3ZSBuZWVkIHRvIGJlIHN1cmUgdG8gZG8gaXQgKmFmdGVyKiB3ZSBtYXJrIHRoZSBj
b2RlIGJsb2NrCisgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFs
bHkgbmVlZHMgYSBiYXJyaWVyLiBBbHNvLCB0aGlzIGhhcyB0byBoYXBwZW4gYWZ0ZXIgdGhlCisg
ICAgICAgIC8vIGZpeHBvaW50IGNoZWNrIC0gb3RoZXJ3aXNlIHdlIG1pZ2h0IGxvb3AgZm9yZXZl
ci4gSW5jaWRlbnRhbGx5LCB3ZSBhbHNvIHdhbnQgdG8gZG8gdGhpcworICAgICAgICAvLyBhdCB0
aGUgZW5kIG9mIEdDIHNvIHRoYXQgYW55dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBHQyBn
ZXRzIGJhcnJpZXJlZCBpbiB0aGUgbmV4dAorICAgICAgICAvLyBHQy4KKyAgICAgICAgbV9jb2Rl
QmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7CisgICAgICAgIERG
Rzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzaG91
bGRUZXJtaW5hdGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
ZSBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzIGFyZSBhY2Nlc3NlZCBieSB0aGUgY29sbGVjdG9y
IHRocmVhZCAoaS5lLiB0aGlzIHRocmVhZCkKKyAgICAgICAgLy8gd2l0aG91dCBsb2Nrcy4gVGhh
dCdzIHdoeSB3ZSBkb3VibGUtYnVmZmVyLgorICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPnRy
YW5zZmVyVG8obV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBkYXRhTG9nKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNvbGxlY3Rvck1h
cmtTdGFjaygpLnNpemUoKSwgIisiLCBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9yTWFy
a1N0YWNrKCkuc2l6ZSgpLCAiICIpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIFRpbWluZ1Nj
b3BlIHRyYWNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrVG9GaXhwb2ludCB0cmFjaW5n
Iik7CisgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fY29sbGVjdG9y
U2xvdFZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRl
QW5kRHJhaW4odGltZVRvUmVzdW1lKTsKKyAgICAgICAgICAgIFNsb3RWaXNpdG9yOjpTaGFyZWRE
cmFpblJlc3VsdCBkcmFpblJlc3VsdCA9CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbiwgdGltZVRv
UmVzdW1lKTsKKyAgICAgICAgICAgIGlmIChkcmFpblJlc3VsdCAhPSBTbG90VmlzaXRvcjo6U2hh
cmVkRHJhaW5SZXN1bHQ6OkRvbmUpIHsKKyAgICAgICAgICAgICAgICBSZXN1bWVUaGVXb3JsZFNj
b3BlIHJlc3VtZVRoZVdvcmxkU2NvcGUoKnRoaXMpOworICAgICAgICAgICAgICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgICAgICAgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFp
bik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1vbm90b25p
Y1RpbWUgdGltZU9mU3RvcCA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBjb25jdXJy
ZW50VGltZSA9IHRpbWVPZlN0b3AgLSB0aW1lVG9SZXN1bWU7CisgICAgICAgIHRvcE9mTG9vcFRp
bWUgPSB0aW1lT2ZTdG9wOworICAgIH0KIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwpAQCAtNTYzLDcgKzY0Miw2IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIAogdm9pZCBIZWFwOjpnYXRoZXJTdGFj
a1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX2ppdFN0dWJSb3V0aW5l
cy0+Y2xlYXJNYXJrcygpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMocm9vdHMsICptX2ppdFN0dWJSb3V0aW5lcywgKm1fY29kZUJsb2Nrcyk7CiB9CiAKQEAg
LTU5MCw2ICs2NjgsNyBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1hcmtpbmciKTsKICAgICBpZiAobV9j
b2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX2NvZGVC
bG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOworICAgIG1faml0U3R1YlJvdXRp
bmVzLT5jbGVhck1hcmtzKCk7CiAgICAgCiAgICAgewogICAgICAgICBUaW1pbmdTY29wZSBjbGVh
ck1hcmtzVGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNwYWNlLmJlZ2luTWFya2luZyIpOwpA
QCAtNTk3LDQyICs2NzYsMjIgQEAgdm9pZCBIZWFwOjpiZWdpbk1hcmtpbmcoKQogICAgIH0KIH0K
IAotdm9pZCBIZWFwOjp2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpCi17Ci0jaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKLSAgICBzY2FuRXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCptX3ZtLCBtX3Ns
b3RWaXNpdG9yKTsKLSNlbmRpZgotfQotCi12b2lkIEhlYXA6OnZpc2l0U21hbGxTdHJpbmdzKCkK
LXsKLSAgICBpZiAoIW1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxl
Y3Rpb25TY29wZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXMobV9zbG90VmlzaXRvcik7Ci0gICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTbWFsbCBzdHJp
bmdzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCiB2b2lkIEhlYXA6OnZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmIHJvb3RzKQogewotICAgIG1fc2xvdFZpc2l0b3IuYXBwZW5kKHJvb3RzKTsKKyAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5hcHBlbmQocm9vdHMpOwogCiAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJDb25zZXJ2
YXRpdmUgUm9vdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKKyAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwg
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogfQogCiB2b2lkIEhlYXA6OnZpc2l0Q29tcGlsZXJX
b3JrbGlzdFdlYWtSZWZlcmVuY2VzKCkKIHsKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspCi0gICAgICAgIERG
Rzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0V2Vha1JlZmVyZW5jZXMobV9zbG90
VmlzaXRvcik7CisgICAgICAgIERGRzo6ZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KGkpLnZpc2l0
V2Vha1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogCiAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJERkcg
V29ya2xpc3RzOlxuIiwgbV9zbG90VmlzaXRvcik7CisgICAgICAgIGRhdGFMb2coIkRGRyBXb3Jr
bGlzdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAjZW5kaWYKIH0KIApAQCAtNzA1
LDEzMiArNzY0LDEwIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEgK
ICAgICB9CiB9CiAKLXZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290Vmlz
aXRvciYgaGVhcFJvb3RWaXNpdG9yKQotewotICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVj
dGVkVmFsdWVzKQotICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJnBhaXIua2V5KTsKLQot
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiUHJvdGVjdGVkIE9iamVjdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1f
c2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEFyZ3Vt
ZW50QnVmZmVycyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX21hcmtM
aXN0U2V0IHx8ICFtX21hcmtMaXN0U2V0LT5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHModmlzaXRvciwgKm1fbWFya0xpc3RTZXQp
OwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJBcmd1bWVudCBCdWZmZXJzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRF
eGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICghbV92bS0+ZXhj
ZXB0aW9uKCkgJiYgIW1fdm0tPmxhc3RFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZFeGNlcHRpb24oKSk7Ci0gICAgdmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOwotCi0gICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJFeGNl
cHRpb25zOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVNldC52aXNpdFN0cm9uZ0hhbmRsZXModmlz
aXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIlN0cm9uZyBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0K
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVT
dGFjay52aXNpdCh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9n
Z2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiSGFuZGxlIFN0YWNrOlxuIiwgbV9zbG90
VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZv
aWQgSGVhcDo6dmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCkKLXsKLSNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCi0gICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBt
X3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgQVNTRVJUKHNhbXBsaW5nUHJvZmls
ZXItPmdldExvY2soKS5pc0xvY2tlZCgpKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlz
aXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9n
Z2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRh
dGE6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS51bmxvY2soKTsK
LSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotfQotCi12b2lkIEhl
YXA6OnZpc2l0VHlwZVByb2ZpbGVyKCkKLXsKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkp
IHsKLSAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnZpc2l0KG1fc2xvdFZpc2l0b3Ip
OwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJUeXBlIFByb2ZpbGVyIHZpc2l0IGRhdGE6XG4iLCBtX3Nsb3RW
aXNpdG9yKTsKLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgIH0K
LX0KLQotdm9pZCBIZWFwOjp2aXNpdFNoYWRvd0NoaWNrZW4oKQotewotICAgIG1fdm0tPnNoYWRv
d0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKG1fc2xvdFZpc2l0b3IpOwotfQotCi12b2lkIEhlYXA6
OnRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpCi17Ci0gICAgbV9qaXRTdHViUm91
dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKG1fc2xvdFZpc2l0b3IpOwotCi0gICAgaWYg
KE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9n
KCJDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2
aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBUaW1pbmdT
Y29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMiKTsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSB0aW1pbmdT
Y29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyIpOwotICAgICAgICAgICAg
bV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKHZpc2l0b3IpOwotICAgICAgICB9Ci0gICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwotICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpOwotICAgICAgICBpZiAobV9zbG90VmlzaXRvci5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpc
biIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBhcmFsbGVsTW9k
ZUVuYWJsZXIgZW5hYmxlcihtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgICAgIG1fc2xvdFZpc2l0b3IuZHJhaW5Gcm9t
U2hhcmVkKFNsb3RWaXNpdG9yOjpNYXN0ZXJEcmFpbik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
IHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSkKIHsKICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpIHsKLSAgICAgICAg
c2l6ZV90IHZpc2l0Q291bnQgPSBtX3Nsb3RWaXNpdG9yLnZpc2l0Q291bnQoKTsKKyAgICAgICAg
c2l6ZV90IHZpc2l0Q291bnQgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT52aXNpdENvdW50KCk7
CiAgICAgICAgIHZpc2l0Q291bnQgKz0gdGhyZWFkVmlzaXRDb3VudCgpOwogICAgICAgICBkYXRh
TG9nRigiXG5OdW1iZXIgb2YgbGl2ZSBPYmplY3RzIGFmdGVyIEdDICVsdSwgdG9vayAlLjZmIHNl
Y3NcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHZpc2l0Q291bnQpLCBXVEY6Om1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0gZ2NTdGFydFRpbWUpOwogICAgIH0KQEAgLTgzOCwx
OSArNzc1LDIyIEBAIHZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1MKICAg
ICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAg
ICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gMDsKIAotICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlz
Q3ljbGUgPSBtX3Nsb3RWaXNpdG9yLmJ5dGVzVmlzaXRlZCgpICsgdGhyZWFkQnl0ZXNWaXNpdGVk
KCk7CisgICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9CisgICAgICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpICsKKyAgICAgICAgdGhyZWFkQnl0ZXNWaXNp
dGVkKCk7CiAgICAgCiAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCArPSBtX3RvdGFsQnl0ZXNWaXNp
dGVkVGhpc0N5Y2xlOwogfQogCiB2b2lkIEhlYXA6OmVuZE1hcmtpbmcoKQogewotICAgIG1fc2xv
dFZpc2l0b3IucmVzZXQoKTsKKyAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5yZXNldCgpOwog
CiAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3Jz
KQogICAgICAgICBwYXJhbGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKLSAgICBBU1NFUlQobV9zaGFy
ZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZE11
dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVy
cy5yZW1vdmVBbGwoKTsKICAgICAKICAgICBtX29iamVjdFNwYWNlLmVuZE1hcmtpbmcoKTsKQEAg
LTk4OCwxNCArOTI4LDIwIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpT
Q2UKIHsKICAgICBBU1NFUlQoY2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJy
ZW50SklUKCkgfHwgIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNl
bGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwotICAgIC8vIEluZGlj
YXRlIHRoYXQgdGhpcyBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9s
bG93aW5nOgotICAgIC8vIC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQg
Y29sbGVjdGlvbi4KLSAgICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICAvLyAi
T2xkR3JleSIgZG9lc24ndCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBi
dXQgd2UgdXN1YWxseSB0cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQotICAgIC8vIHNhbWUuCi0gICAg
Y2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0gICAgbV9zbG90VmlzaXRv
ci5hcHBlbmRUb01hcmtTdGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICBpZiAo
IUhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIC8vIER1cmluZyBh
IGZ1bGwgY29sbGVjdGlvbiBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFk
IHN1cml2aXZlZCBwYXN0CisgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMg
YSBzdG9yZSB0byBhbiB1bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cwor
ICAgICAgICAvLyBtYXJrZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdv
IGRvd24gdGhlIG5vcm1hbCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAgICAgICAvLyBzYWZlbHkg
aWdub3JlIHRoZXNlIHN0b3Jlcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJdCBj
b3VsZCBiZSB0aGF0IHRoZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhh
dCB0aGUgY29sbGVjdG9yIG1heSBzZXQgdGhlCisgICAgLy8gc3RhdGUgdG8gR3JleSBhbmQgdGhl
biB0byBBbnRocmFjaXRlT3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8gcmFj
ZSB3aXRoIHRoZQorICAgIC8vIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlz
IGFjY3VyYXRlIGJlY2F1c2UgdGhlIG9iamVjdCBfd2lsbF8gZ2V0IHNjYW5uZWQgYWdhaW4uCisg
ICAgLy8gSWYgd2UgbG9zZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVj
dCBhZ2Fpbi4gVGhhdCB3b3VsZCBiZSB1bmZvcnR1bmF0ZSBidXQgbm90CisgICAgLy8gdGhlIGVu
ZCBvZiB0aGUgd29ybGQuCisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7
CisgICAgbV9tdXRhdG9yTWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6
Y29sbGVjdEFsbEdhcmJhZ2UoKQpAQCAtMTA5NCwyNCArMTA0MCwxNCBAQCB2b2lkIEhlYXA6OmNv
bGxlY3RJblRocmVhZCgpCiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUg
YmVmb3JlID0gMDsKKyAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkgewotICAgICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAi
IGtiICIpOwotICAgICAgICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGRhdGFM
b2coIltHQzogU1RBUlQgIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7CisgICAgICAgIGJl
Zm9yZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NT
dGFydFRpbWU7CiAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NG
b3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5j
ZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7
Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hp
Y2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NF
UlQobV9pc1NhZmVUb0NvbGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAg
ICAgICBkYXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwg
bV9jb2xsZWN0aW9uU2NvcGUsICJcbiIpOwpAQCAtMTEzMSwxMiArMTA2Nyw5IEBAIHZvaWQgSGVh
cDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVj
dHMoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQogICAgICAgICAK
LSAgICBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7Ci0gICAgc3RvcEFsbG9jYXRpb24oKTsK
ICAgICBwcmVwYXJlRm9yTWFya2luZygpOwotICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7
CiAgICAgICAgIAotICAgIG1hcmtSb290cyhnY1N0YXJ0VGltZSk7CisgICAgbWFya1RvRml4cG9p
bnQoZ2NTdGFydFRpbWUpOwogICAgICAgICAKICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAg
ICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRl
ck1hcmtpbmcpOwpAQCAtMTE3Myw4ICsxMTA2LDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJl
YWQoKQogICAgIH0KICAgICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBk
b3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBi
ZWZvcmUsICIgbXNdXG4iKTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBhZnRlciA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOworICAgICAgICBkYXRhTG9nKChhZnRlciAtIG1fc3RvcFRpbWUpLm1pbGxp
c2Vjb25kcygpLCAiIG1zLCBjeWNsZSAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygp
LCAiIG1zIEVORF1cbiIpOwogICAgIH0KICAgICAKICAgICB7CkBAIC0xMTk2LDEwICsxMTI5LDMz
IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAg
IHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRo
ZVdvcmxkSXNTdG9wcGVkID0gdHJ1ZTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgeworICAgICAg
ICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIGlmIChKSVRXb3JrbGlz
dDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCisgICAgICAgICAgICBzZXRH
Q0RpZEpJVCgpOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorICAgIAorICAgIHZtKCkt
PnNoYWRvd0NoaWNrZW4oKS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAg
CisgICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICBtX3N0cnVjdHVyZUlEVGFibGUu
Zmx1c2hPbGRUYWJsZXMoKTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7Cisg
ICAgCisgICAgbV9zdG9wVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiB2b2lkIEhl
YXA6OnJlc3VtZVRoZVdvcmxkKCkKIHsKKyAgICAvLyBDYWxsaW5nIHJlc3VtZUFsbG9jYXRpbmcg
ZG9lcyB0aGUgUmlnaHQgVGhpbmcgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyB0aGUgZW5k
IG9mIGEKKyAgICAvLyBjb2xsZWN0aW9uIGN5Y2xlIG9yIHRoaXMgaXMganVzdCBhIGNvbmN1cnJl
bnQgcGhhc2Ugd2l0aGluIGEgY29sbGVjdGlvbiBjeWNsZToKKyAgICAvLyAtIEF0IGVuZCBvZiBj
b2xsZWN0aW9uIGN5Y2xlOiBpdCdzIGEgbm8tb3AgYmVjYXVzZSBwcmVwYXJlRm9yQWxsb2NhdGlv
biBhbHJlYWR5IGNsZWFyZWQgdGhlCisgICAgLy8gICBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICAv
LyAtIER1cmluZyBjb2xsZWN0aW9uIGN5Y2xlOiBpdCByZWluc3RhdGVzIHRoZSBsYXN0IGFjdGl2
ZSBibG9jay4KKyAgICBtX29iamVjdFNwYWNlLnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKICAg
ICBSRUxFQVNFX0FTU0VSVChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
KTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7
CiAgICAgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CkBAIC0xNDA4LDIzICsxMzY0LDE4IEBAIHZv
aWQgSGVhcDo6aGFuZGxlTmVlZEZpbmFsaXplKCkKIAogdm9pZCBIZWFwOjpzZXRHQ0RpZEpJVCgp
CiB7Ci0gICAgZm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRT
dGF0ZS5sb2FkKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgc3RvcHBlZEJp
dCk7Ci0gICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0
ZSwgb2xkU3RhdGUgfCBnY0RpZEpJVEJpdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIG1fd29ybGRTdGF0ZS50cmFuc2FjdGlvbigKKyAgICAgICAgWyZdICh1bnNpZ25lZCYgc3Rh
dGUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlICYgc3RvcHBlZEJpdCk7Cisg
ICAgICAgICAgICBzdGF0ZSB8PSBnY0RpZEpJVEJpdDsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQg
SGVhcDo6c2V0TmVlZEZpbmFsaXplKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2ln
bmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29ybGRT
dGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSB8IG5lZWRGaW5hbGl6
ZUJpdCkpIHsKLSAgICAgICAgICAgIG1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29v
bigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fd29ybGRT
dGF0ZS5leGNoYW5nZU9yKG5lZWRGaW5hbGl6ZUJpdCk7CisgICAgUGFya2luZ0xvdDo6dW5wYXJr
QWxsKCZtX3dvcmxkU3RhdGUpOworICAgIG1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxl
U29vbigpOwogfQogCiB2b2lkIEhlYXA6OndhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpCkBAIC0xNDQx
LDIzICsxMzkyLDE0IEBAIHZvaWQgSGVhcDo6d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKICAgICB9
CiB9CiAKLXVuc2lnbmVkIEhlYXA6OnNldE11dGF0b3JXYWl0aW5nKCkKK3ZvaWQgSGVhcDo6c2V0
TXV0YXRvcldhaXRpbmcoKQogewotICAgIGZvciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xk
U3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwotICAgICAgICB1bnNpZ25lZCBuZXdTdGF0ZSA9
IG9sZFN0YXRlIHwgbXV0YXRvcldhaXRpbmdCaXQ7Ci0gICAgICAgIGlmIChtX3dvcmxkU3RhdGUu
Y29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgbmV3U3RhdGUpKQotICAgICAgICAgICAgcmV0
dXJuIG5ld1N0YXRlOwotICAgIH0KKyAgICBtX3dvcmxkU3RhdGUuZXhjaGFuZ2VPcihtdXRhdG9y
V2FpdGluZ0JpdCk7CiB9CiAKIHZvaWQgSGVhcDo6Y2xlYXJNdXRhdG9yV2FpdGluZygpCiB7Ci0g
ICAgZm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5s
b2FkKCk7Ci0gICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRT
dGF0ZSwgb2xkU3RhdGUgJiB+bXV0YXRvcldhaXRpbmdCaXQpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBtX3dvcmxkU3RhdGUuZXhjaGFuZ2VBbmQofm11dGF0b3JXYWl0aW5nQml0
KTsKIH0KIAogdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMb2NrSG9sZGVy
JikKQEAgLTE0NjksMTAgKzE0MTEsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGlu
Zyhjb25zdCBMbwogCiB2b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NTY29w
ZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUo
KTsKLSAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VBbGxv
Y2F0aW9ucygpOworICAgIHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUo
KnRoaXMpOworICAgICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAgICBk
ZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2NhdGlv
bnMoKTsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHko
KSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7CiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUq
IGNhY2hlID0gdm0oKS0+aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xl
YXIoKTsKIH0KQEAgLTE1NTQsMjMgKzE1MDEsOSBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENvbGxl
Y3Rpb24oT3B0aW9uYWw8CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxlY3QoKTsK
IH0KIAotdm9pZCBIZWFwOjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsKLSAgICBtX3N0
cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFwOjpmbHVzaFdy
aXRlQmFycmllckJ1ZmZlcigpCiB7Ci0gICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxl
Y3Rpb25TY29wZTo6RWRlbikgewotICAgICAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgq
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZmZXIu
cmVzZXQoKTsKLX0KLQotdm9pZCBIZWFwOjpzdG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9vYmpl
Y3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNo
KCp0aGlzKTsKIH0KIAogdm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xOTU0LDcg
KzE4ODcsNyBAQCBib29sIEhlYXA6OmNhbkNvbGxlY3QoKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChjb2xsZWN0aW9uU2NvcGUoKSB8fCBtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6
OkhlbHBpbmdHQykKKyAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0YXRlOjpIZWxw
aW5nR0MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE5
NzYsMTIgKzE5MDksOCBAQCBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3koKQogICAgIHJl
dHVybiBtYXlCZUdDVGhyZWFkKCkgfHwgbXV0YXRvclN0YXRlKCkgIT0gTXV0YXRvclN0YXRlOjpS
dW5uaW5nOwogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChDZWxsU3Rh
dGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291
bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0
aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVu
ICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0cmFNZW1vcnlTaXplOwogICAgIAogICAgIGZvciAo
OzspIHsKQEAgLTE5OTIsMTIgKzE5MjEsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChDZWxsCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIEhlYXA6
OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCBz
aXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUp
CiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4dGVybmFsIG1l
bW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAo
Y29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9sZFN0YXRlID09
IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6ZV90KiBjb3Vu
dGVyID0gJm1fZXh0ZXJuYWxNZW1vcnlTaXplOwogCiAgICAgZm9yICg7OykgewpAQCAtMjA5MSw0
ICsyMDE2LDExIEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYgcnVuTG8KIH0K
ICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkK
K3sKKyAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CisgICAgaWYgKE9wdGlvbnM6OmNvbGxl
Y3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjA4
NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw2ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVy
LmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlvblNjb3BlLmgi
CiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVT
ZXQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgogI2luY2x1
ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJTbG90
VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNsdWRlICJUaW55
Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBAIC03
MCw3ICs3MCw5IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlNDZWxsOwogY2xh
c3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNzIE1hcmtTdGFj
a0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBTbG90VmlzaXRvcjsK
IGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTEyOSw3ICsxMzEs
OCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyByZXR1cm4gbV9v
YmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFkcygpIHsgcmV0
dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIGNvbnN0IFNsb3RWaXNpdG9yJiBzbG90Vmlz
aXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdFZpc2l0b3I7IH0KKyAgICBTbG90VmlzaXRvciYg
Y29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsg
fQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gKm1fbXV0
YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxi
YWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEdDQWN0
aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTE2OCw3ICsxNzEsNyBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6ZXIoSlNDZWxs
KiwgRmluYWxpemVyKTsKICAgICB2b2lkIGFkZEV4ZWN1dGFibGUoRXhlY3V0YWJsZUJhc2UqKTsK
IAotICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRvQ29sbGVjdCA9
IHRydWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAgIGJvb2wgaXNT
YWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0KIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3Q7CkBAIC0y
MDMsMTEgKzIwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRoZXNlIGZ1bmN0
aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwogICAgIC8vIG1l
bW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplX3Qp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENl
bGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBvZiBleHRyYSBt
ZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUs
IHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRlcm5hbE1lbW9y
eVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlTaXplKCkgeyByZXR1
cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNlbmRpZgogCkBAIC0zOTEsNiArMzk0LDkgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhlV29y
bGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIGZyaWVuZCBj
bGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0b3Io
KTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQxMiw3ICs0MTgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZEZpbmFsaXplKCk7CiAgICAgdm9pZCB3YWl0V2hp
bGVOZWVkRmluYWxpemUoKTsKICAgICAKLSAgICB1bnNpZ25lZCBzZXRNdXRhdG9yV2FpdGluZygp
OworICAgIHZvaWQgc2V0TXV0YXRvcldhaXRpbmcoKTsKICAgICB2b2lkIGNsZWFyTXV0YXRvcldh
aXRpbmcoKTsKICAgICB2b2lkIG5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xkZXIm
KTsKICAgICAKQEAgLTQyMiwzMSArNDI4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBz
dXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKE9w
dGlvbmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJRFRh
YmxlcygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lkIHN0
b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAotICAg
IHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCBtYXJrVG9GaXhw
b2ludChkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZhdGl2
ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0aXZl
Um9vdHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRFeHRlcm5h
bFJlbWVtYmVyZWRTZXQoKTsKLSAgICB2b2lkIHZpc2l0U21hbGxTdHJpbmdzKCk7CiAgICAgdm9p
ZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCB2
aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3ZlRGVh
ZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7Ci0gICAgdm9pZCB2aXNpdFByb3RlY3RlZE9iamVj
dHMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhIZWFw
Um9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYp
OwotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZv
aWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U2Ft
cGxpbmdQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICB2b2lk
IHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRvciYp
OworICAgIHZvaWQgbWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9pZCB1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1hcmtp
bmcoKTsKIApAQCAtNTE4LDcgKzUxMSw4IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhyZWFk
cyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNpdG9y
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0YWNr
OwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1h
cmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1lcmF0
ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFs
bCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTU3Miw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAg
ICAgTG9jayBtX21hcmtpbmdNdXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9u
VmFyaWFibGU7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtT
dGFjazsKICAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9Owog
ICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTYwMCw2
ICs1OTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2Fp
dGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMg
YSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7
CiAgICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFs
c2UgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0
aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4gbV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2Vy
dmVkVGlja2V0IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1h
cmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJy
YXk6OnRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHRoaXMgIT0gJm90aGVyKTsKKyAgICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRo
ZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2Vs
bCo+KiBteUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVu
dDxjb25zdCBKU0NlbGwqPiogb3RoZXJIZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFk
KCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21l
bnRzLS07CisgICAgCisgICAgb3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7Cisg
ICAgCisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsK
KyAgICBtX251bWJlck9mU2VnbWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2lu
YWwgaGVhZHMgYmFjayBpbiB0aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVh
ZCk7CisgICAgb3RoZXIubV9zZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJP
ZlNlZ21lbnRzKys7CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAg
d2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChj
YW5SZW1vdmVMYXN0KCkpCisgICAgICAgICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsK
KyAgICB9Cit9CisKIHZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtT
dGFja0FycmF5JiBvdGhlcikKIHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9m
IG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUs
OSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJheSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAg
ICAgTWFya1N0YWNrQXJyYXkoKTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0
YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tB
cnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJU
byhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNr
QXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNp
emVfdCBpZGxlVGhyZWFkQ291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxv
Y2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsK
LSAgICBBU1NFUlQoIWJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQo
IWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBi
bG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIw
ODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDE0IEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhW
TSYgdm0sIEhhbmRsZSYKICAgICAsIG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQog
eworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBB
bGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlN
b2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwg
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2Ny
aWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0
ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2Rl
IG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0
eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnNwZWNpYWxpemVkU3dlZXAoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rp
b25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25s
eSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzTm9E
ZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CiAgICAgCiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCkBAIC05OSw3ICsxMDEsNyBA
QCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgaWYgKE9wdGlv
bnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQog
ICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRl
ZCkgewotICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUpOworICAgICAgICBB
U1NFUlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUgfHwgYmxvY2subV9tYXJrcy5pc0VtcHR5KCkp
OwogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwogICAgICAg
ICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKQEAgLTEx
MSw2ICsxMTMsOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAg
ICAgICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV9hbGxvY2F0b3ItPnNldElzRW1wdHkodGhpcywgdHJ1ZSk7CisgICAgICAgIGlmIChzcGFjZSgp
LT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKICAgICAg
ICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVu
ZCAtIHBheWxvYWRCZWdpbik7CiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFM
b2coIlF1aWNrbHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwg
c2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjog
IiwgcmVzdWx0LCAiXG4iKTsKQEAgLTEyMywxNyArMTI3LDExIEBAIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7CiAgICAgc2l6
ZV90IGNvdW50ID0gMDsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90
IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewot
ICAgICAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtz
TW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGJsb2NrLm1fbWFya3MuZ2V0KGkpKQotICAgICAgICAg
ICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9u
ZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgVmVjdG9yPHNp
emVfdD4gZGVhZENlbGxzOworICAgIGF1dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBp
KSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENl
bGwqPigmYmxvY2suYXRvbXMoKVtpXSk7CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9
PSBOZWVkc0Rlc3RydWN0aW9uICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYg
KGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09
IE5vdEVtcHR5KQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCktPmNhbGxE
ZXN0cnVjdG9yKCp2bSgpKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdCkgewpAQCAtMTQ0LDEyICsxNDIsMzMgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAg
Kytjb3VudDsKICAgICAgICAgfQorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmIChl
bXB0eU1vZGUgPT0gTm90RW1wdHkKKyAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtz
Tm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAgICAgICAgfHwgKG5l
d2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVk
LmdldChpKSkpKSB7CisgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9k
ZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKQorICAgICAgICAg
ICAgZGVhZENlbGxzLmFwcGVuZChpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxl
RGVhZENlbGwoaSk7CiAgICAgfQotCisgICAgCiAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRpc2Nh
cmQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMgaWYgd2UncmUgY3JlYXRpbmcgYSBGcmVlTGlzdCwK
ICAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgbG9zZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgY3Vy
cmVudGx5IGFsaXZlLgogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0ICYmIG5l
d2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKICAgICAgICAgbV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CisgICAgCisgICAgaWYg
KHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Cisg
ICAgCisgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29s
bGVjdG9ySXNSdW5uaW5nKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgOiBkZWFkQ2VsbHMpCisg
ICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKKyAgICB9CiAKICAgICBGcmVlTGlzdCByZXN1
bHQgPSBGcmVlTGlzdDo6bGlzdChoZWFkLCBjb3VudCAqIGNlbGxTaXplKCkpOwogICAgIGlmIChz
d2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMTc3LDEyICsxOTYsMTggQEAgRnJlZUxp
c3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIAogICAgIEFTU0VSVCghbV9h
bGxvY2F0b3ItPmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVz
LmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzd2VlcEhl
bHBlclNlbGVjdFNjcmliYmxlTW9kZTxOZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1vZGUpOwotICAg
IHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxEb2VzTm90TmVlZERlc3RydWN0
aW9uPihzd2VlcE1vZGUpOworICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAg
YmxvY2soKS5tX2xvY2subG9jaygpOworICAgIAorICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1
Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJr
aW5nKCkpCisgICAgICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8
QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZz4oc3dlZXBNb2RlKTsKKyAg
ICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1
Y3RvcnM+KHN3ZWVwTW9kZSk7CisgICAgfQorICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNj
cmliYmxlTW9kZTxCbG9ja0hhc05vRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBs
YXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CiBGcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2Vl
cE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChzY3JpYmJsZUZyZWVDZWxscygpKQpAQCAtMTkw
LDcgKzIxNSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAg
ICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBEb250
U2NyaWJibGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1v
ZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBk
ZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJs
ZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEVt
cHR5TW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIC8vIEl0J3Mgbm90IG9idmlvdXMs
IGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBrbm93IGlmIHRoZSBibG9jayBpcyBlbXB0eS4g
SXQncyB0aGUgb25seQpAQCAtMjA1LDcgKzIzMCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFs
bG9jYXRlZDxOb3RFbXB0eSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGU+KHN3ZWVwTW9k
ZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1v
ZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxl
OjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9k
ZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBl
clNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYg
KGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpCkBAIC0yMTMsNyArMjM4LDcgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dFN3ZWVwTW9kZTxlbXB0eU1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBEb2Vz
Tm90SGF2ZU5ld2x5QWxsb2NhdGVkPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRC
bG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRN
b2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dl
ZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dCkKQEAgLTIyMSwxMCArMjQ2LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGU8ZW1wdHlNb2Rl
LCBTd2VlcE9ubHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRl
ZE1vZGU+KCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBl
bXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3Ry
dWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxl
TW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9k
ZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgp
CiB7Ci0gICAgaWYgKGFyZU1hcmtzU3RhbGUoKSkKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbiA9IHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCk7CisgICAgYm9vbCBtYXJrc0FyZVVzZWZ1
bCA9ICFibG9jaygpLmFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgbWFya3NBcmVVc2VmdWwgfD0gYmxvY2so
KS5tYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbik7CisgICAg
CisgICAgaWYgKCFtYXJrc0FyZVVzZWZ1bCkKICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dl
ZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBu
ZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzU3RhbGU+KCk7CiAgICAgcmV0dXJuIHNwZWNpYWxpemVk
U3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2Rl
LCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTm90U3RhbGU+KCk7CiB9CkBAIC0yNDEsMjQgKzI3
Miw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lz
RnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6
IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5
QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBt
X2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0
b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygp
KTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYg
KGZhbHNlKQpAQCAtMjY2LDEyICsyNzksMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMp
KTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAg
ICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2Nr
IGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21l
b25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFT
U0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIs
IGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBz
dGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRl
ZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVk
IGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3
OSwxMiArMjk3LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcK
ICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZl
cnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAK
LSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNo
Q2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCog
Y2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBz
ZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAg
ICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAg
IGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1Bv
aW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVj
dGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwog
ICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzMwLDE0
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0Fs
bG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAo
IWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAg
ICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAg
IC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdl
IHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpA
QCAtMzU0LDYgKzM4MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFw
VmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5k
bGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtp
bmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcg
ZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMg
ZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAg
ICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4g
Y2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0
aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVk
IHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzkxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0
ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBp
ZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5n
IHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAg
ICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2Nh
dGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKQEAgLTQyOSw3ICs0NjAsNyBAQCB2
b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlCiAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVM
aXN0IVxuIik7CiAgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKICAgICBtX2lzRnJlZUxpc3Rl
ZCA9IGZhbHNlOwotICAgIGFsbG9jYXRvcigpLT5zZXRJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsK
KyAgICBhbGxvY2F0b3IoKS0+YXRvbWljU2V0QW5kQ2hlY2tJc0FsbG9jYXRlZCh0aGlzLCB0cnVl
KTsKIH0KIAogc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTAsMzAgKzE5MCwzMiBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFuZGxlKEhl
YXAmLCB2b2lkKik7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGU+
CisgICAgICAgIGVudW0gU3dlZXBEZXN0cnVjdGlvbk1vZGUgeyBCbG9ja0hhc05vRGVzdHJ1Y3Rv
cnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJ
c1J1bm5pbmcgfTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25N
b2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2Vl
cE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gU2NyaWJibGVN
b2RlIHsgRG9udFNjcmliYmxlLCBTY3JpYmJsZSB9OwogICAgICAgICAgICAgCi0gICAgICAgIHRl
bXBsYXRlPERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxT
d2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2Vl
cEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAg
ICAgCiAgICAgICAgIGVudW0gRW1wdHlNb2RlIHsgSXNFbXB0eSwgTm90RW1wdHkgfTsKICAgICAg
ICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJs
ZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUs
IFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXds
eUFsbG9jYXRlZChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAKICAgICAgICAgZW51
bSBOZXdseUFsbG9jYXRlZE1vZGUgeyBIYXNOZXdseUFsbG9jYXRlZCwgRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0
cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0
ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5l
d2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTd2Vl
cE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwg
U3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgog
ICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpOwogICAgICAgICAK
ICAgICAgICAgZW51bSBNYXJrc01vZGUgeyBNYXJrc1N0YWxlLCBNYXJrc05vdFN0YWxlIH07CiAg
ICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rp
b25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgorICAg
ICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUs
IFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CiAgICAgICAgIEZy
ZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKICAgICAgICAgICAgIAogICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
U3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDYgQEAgdm9p
ZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvck1hcmtpbmcoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpy
ZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7CiAgICAgZm9y
RWFjaEFsbG9jYXRvcigKICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikg
LT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0
aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhl
V29ybGRTY29wZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2
YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9y
KEhlYXAmIGhlYXApCi0gICAgOiBtX3N0YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0g
ICAgLCBtX2J5dGVzQ29waWVkKDApCisgICAgOiBtX2J5dGVzVmlzaXRlZCgwKQogICAgICwgbV92
aXNpdENvdW50KDApCiAgICAgLCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21h
cmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjppbml0aWFsVmVyc2lvbikKQEAgLTkxLDcgKzg5LDcg
QEAgU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+
U2xvdFZpc2l0b3IoKQogewotICAgIGNsZWFyTWFya1N0YWNrKCk7CisgICAgY2xlYXJNYXJrU3Rh
Y2tzKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCkBAIC0xMDks
MTYgKzEwNywxNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lk
IFNsb3RWaXNpdG9yOjpyZXNldCgpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9v
dHMuc2l6ZSgpKTsKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV9ieXRlc0NvcGllZCA9
IDA7CiAgICAgbV92aXNpdENvdW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBu
dWxscHRyOwotICAgIEFTU0VSVCghbV9jdXJyZW50Q2VsbCk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IW1fY3VycmVudENlbGwpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygp
Cit2b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFja3MoKQogewotICAgIG1fc3RhY2suY2xl
YXIoKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmNsZWFyKCk7CisgICAgbV9tdXRhdG9yU3RhY2su
Y2xlYXIoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3Rz
JiBjb25zZXJ2YXRpdmVSb290cykKQEAgLTE0OCw3ICsxNDcsNyBAQCB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRKU0NlbGxPckF1eGlsaWFyCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3Jl
eSk7CisgICAgICAgIGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAKICAg
ICAgICAgYXBwZW5kVG9NYXJrU3RhY2soanNDZWxsKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjEw
LDcgKzIwOSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2UKICAg
ICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdDoKICAgICAvLyBJ
biBjYXNlIG9mIGNvbmN1cnJlbnQgR0M6IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQgaXMgZ3JleSBp
biB0aGlzIEdDIGN5Y2xlLgogICAgIC8vIEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0aW9uOiBpdCdz
IGEgbmV3IG9iamVjdCB0aGF0IGJlY2FtZSBncmV5IHJhdGhlciB0aGFuIGFuIG9sZCByZW1lbWJl
cmVkIG9iamVjdC4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsK
KyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBhcHBl
bmRUb01hcmtTdGFjayhjb250YWluZXIsIGNlbGwpOwogfQpAQCAtMjI4LDE2ICsyMjcsMTkgQEAg
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUbwogewogICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZENvbmN1cnJlbnRseShjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1ph
cHBlZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpOZXdH
cmV5IHx8IGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6T2xkR3JleSk7CisgICAgQVNT
RVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgY29u
dGFpbmVyLm5vdGVNYXJrZWQoKTsKICAgICAKLSAgICAvLyBGSVhNRTogVGhlc2UgImp1c3Qgd29y
ayIgYmVjYXVzZSB0aGUgR0MgcmVzZXRzIHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9pbmcgYW55dGhp
bmcgZWxzZS4gQnV0Ci0gICAgLy8gdGhhdCB3b24ndCBiZSB0aGUgY2FzZSB3aGVuIHdlIGRvIGNv
bmN1cnJlbnQgR0MuCiAgICAgbV92aXNpdENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0g
Y29udGFpbmVyLmNlbGxTaXplKCk7CiAgICAgCi0gICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7Cisg
ICAgbV9jb2xsZWN0b3JTdGFjay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6
OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9t
dXRhdG9yU3RhY2suYXBwZW5kKGNlbGwpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4
aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpCkBAIC0yOTQsMTIgKzI5NiwxNyBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxT
Y29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKICAgICAKLSAgICBtX29sZENlbGxT
dGF0ZSA9IGNlbGwtPmNlbGxTdGF0ZSgpOworICAgIGlmIChmYWxzZSkgeworICAgICAgICBkYXRh
TG9nKCJWaXNpdGluZyAiLCBSYXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgaWYgKG1faXNWaXNp
dGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgICAgIGRhdGFMb2coIiAobXV0YXRvcikiKTsKKyAg
ICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CiAgICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFj
ZSBoZXJlIC0gdGhlIGNlbGwgc3RhdGUgY2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2Jq
ZWN0cyBjYW4gb25seSBiZQotICAgIC8vIHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBO
ZWl0aGVyIHRoZSBiYXJyaWVyIG5vciBtYXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBh
bgotICAgIC8vIG9iamVjdCB0aGF0IGlzIGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRD
ZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxT
dGF0ZTo6TmV3R3JleSk7CisgICAgLy8gRnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9yIHRo
ZSBvYmplY3QgdG8gYmUgYmxhY2sgYWxyZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0IGF0
CisgICAgLy8gYWJvdXQgdGhlIHNhbWUgdGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3MgZmlu
ZS4gSXQncyBhIGduYXJseSBhbmQgc3VwZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90IGNs
ZWFyIHRvIG1lIHRoYXQgaXQgd291bGQgYmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJhaWwg
aGVyZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAgCkBA
IC0zMjYsMjMgKzMzMywyMyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0
Q2hpCiAgICAgfQogICAgIAogICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIp
KSB7Ci0gICAgICAgIGlmIChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkpCisg
ICAgICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9oZWFw
U25hcHNob3RCdWlsZGVyLT5hcHBlbmROb2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwog
ICAgIH0KIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2b2lk
IFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBN
YXJrU3RhY2tBcnJheSYgdG8pCiB7CiAgICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkgb2Z0
ZW4sIHdlIGNhbiBhZmZvcmQgdG8gYmUgY29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1bWUg
dGhhdCBkb25hdGluZyBpcyBub3QgcHJvZml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tpbmcg
d2hlbiBhIHRocmVhZCByZWFjaGVzIGEgZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4KLSAg
ICBpZiAobV9zdGFjay5zaXplKCkgPCAyKQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3Jr
IHF1ZXVlZCB1cCwgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0
aW5nIG1vcmUgaXMgbm90IHByb2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtT
dGFjay5zaXplKCkpCisgICAgaWYgKHRvLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gSWYgd2UncmUgY29udGVuZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFuZCBh
c3N1bWUgdGhhdCBhbm90aGVyCkBAIC0zNTIsMjYgKzM1OSw0MyBAQCB2b2lkIFNsb3RWaXNpdG9y
Ojpkb25hdGVLbm93blBhcmFsbGVsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3
aXNlLCBhc3N1bWUgdGhhdCBhIHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4K
LSAgICBtX3N0YWNrLmRvbmF0ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7
CisgICAgZnJvbS5kb25hdGVTb21lQ2VsbHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRy
YWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIGRv
bmF0ZUtub3duUGFyYWxsZWwobV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjayk7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywg
Km1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNpdG9y
OjpkcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFs
bGVsTW9kZSk7CiAgICAKLSAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fc3RhY2sucmVmaWxsKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0
aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2Fu
UmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4o
bV9zdGFjay5yZW1vdmVMYXN0KCkpOworICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNF
bXB0eSgpIHx8ICFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVv
dXQpKSB7CisgICAgICAgIGlmICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1fY29sbGVjdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlzaXRp
bmdNdXRhdG9yU3RhY2sgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRk
b3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1f
Y29sbGVjdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAg
ICAgICAgICB2aXNpdENoaWxkcmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBtX211dGF0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1
cmUgdGhhdCB3ZSBhcmUgdmlzaXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBu
b3QgYmVjYXVzZSBvZgorICAgICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0
IGFuIG9iamVjdCBleGFjdGx5IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAgICAg
ICAgICAgIC8vIHBvc3NpYmx5IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFs
cmVhZHkgbWFya2VkLgorICAgICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1
ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11
bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92
ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiht
X211dGF0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0ZUtu
b3duUGFyYWxsZWwoKTsKICAgICB9CiAgICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNz
YXJ5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFp
bk1vZGUgc2hhcmVkRHJhaW5Nb2RlKQorU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9k
ZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1v
ZGUpOwogICAgIApAQCAtMzkyLDQ4ICs0MTYsNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5G
cm9tU2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVyIHRl
cm1pbmF0aW9uIGlzIHJlYWNoZWQsIG9yIHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAgICAg
ICAgICAgICAgIC8vIGZvciB1cyB0byBkby4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVy
bWluYXRpb24/CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3No
YXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1f
aGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtu
b3cgaXQncyB0aW1lIGZvciB0aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBT
aGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBk
b25lPwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVj
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hl
YXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IC8vIE90aGVyd2lzZSB3YWl0LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFw
Lm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFT
U0VSVChzaGFyZWREcmFpbk1vZGUgPT0gU2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAvLyBEaWQgd2UgZGV0ZWN0IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25v
dy4KICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rv
ck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgbV9o
ZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAg
ICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAgICAg
ICAgICAgICAgIGxvY2ssCisgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLndhaXRVbnRpbCgKKyAgICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91dCwK
ICAgICAgICAgICAgICAgICAgICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBt
X2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVudCBw
aGFzZSBkb25lPyBJZiBzbywgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAg
ICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5S
ZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxT
b21lQ2VsbHNGcm9tKAotICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywg
bV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1f
Y29sbGVjdG9yU3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hl
YXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1Bh
cmFsbGVsTWFya2Vycyk7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxs
c0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ss
IG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBt
X2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9o
ZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGRyYWluKCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0K
IApAQCAtNDUzLDcgKzQ4OSw2IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9p
ZCogcm8KIGJvb2wgU2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBj
b25zdAogewogICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9v
cGFxdWVSb290cy5pc0VtcHR5KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5j
b250YWlucyhyb290KTsKIH0KIApAQCAtNDY3LDEzICs1MDIsNiBAQCBUcmlTdGF0ZSBTbG90Vmlz
aXRvcjo6Y29udGFpbnNPcGFxdWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAK
LWludCBTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJ
blBhcmFsbGVsTW9kZSk7Ci0gICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAg
ICByZXR1cm4gbV9oZWFwLm1fb3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNp
dG9yOjptZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSkKQEAgLTQ5NywxNSArNTI1LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRv
bmF0ZSgpCiAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9y
Ojpkb25hdGVBbmREcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25v
dG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBk
cmFpbih0aW1lb3V0KTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygp
CiB7Ci0gICAgQVNTRVJUKCFtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCB3aGVuIG9wYXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7
CiAgICAgICAgIGZvciAoYXV0byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU1
Myw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAg
bV9oZWFwLm1fdW5jb25kaXRpb25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFt
JikgY29uc3QKK3ZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKLSAgICBmb3IgKGNvbnN0IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBk
YXRhTG9nKCpjZWxsLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50
ZXJMaXN0RHVtcChjb2xsZWN0b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRl
ckxpc3REdW1wKG11dGF0b3JNYXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZp
c2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMu
aCIKICNpbmNsdWRlICJNYXJrU3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisj
aW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3
LDkgKzU4LDExIEBAIHB1YmxpYzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RW
aXNpdG9yKCk7CiAKLSAgICBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9z
dGFjazsgfQotICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrOyB9Ci0KKyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNr
KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRh
dG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJr
U3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0
b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAg
ICBjb25zdCBWTSYgdm0oKSBjb25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwy
NCArODcsMjMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVl
Um9vdCh2b2lkKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJv
b3Qodm9pZCopIGNvbnN0OwogICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRl
KHZvaWQqKSBjb25zdDsKLSAgICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiBtX3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgp
IHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlz
RW1wdHkoKTsgfQogCiAgICAgdm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0
KCk7Ci0gICAgdm9pZCBjbGVhck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tz
KCk7CiAKICAgICBzaXplX3QgYnl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zp
c2l0ZWQ7IH0KLSAgICBzaXplX3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVz
Q29waWVkOyB9CiAgICAgc2l6ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0
Q291bnQ7IH0KIAogICAgIHZvaWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZv
aWQgZG9uYXRlQW5kRHJhaW4oKTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91
dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4o
TW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAg
CiAgICAgZW51bSBTaGFyZWREcmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9Owot
ICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFz
cyBTaGFyZWREcmFpblJlc3VsdCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5S
ZXN1bHQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpOwogICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygp
OwpAQCAtMTI0LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZv
aWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBh
cHBlbmRUb01hcmtTdGFjayhDb250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9p
ZCBhcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9p
ZCBub3RlTGl2ZUF1eGlsaWFyeUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIG1lcmdlT3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9v
dHNJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgp
OwogCiAgICAgdm9pZCB2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZv
aWQgZG9uYXRlS25vd25QYXJhbGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChN
YXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFj
a0FycmF5IG1fc3RhY2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAg
ICBNYXJrU3RhY2tBcnJheSBtX211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3Bh
cXVlUm9vdHM7IC8vIEhhbmRsZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRv
IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7
Ci0gICAgc2l6ZV90IG1fYnl0ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAg
ICBib29sIG1faXNJblBhcmFsbGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2
YXRlOgogCiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsg
bnVsbHB0ciB9OwogICAgIEpTQ2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBD
ZWxsU3RhdGUgbV9vbGRDZWxsU3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3Rh
Y2sgeyBmYWxzZSB9OwogCiBwdWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBT
bG90VmlzaXRvcjo6YWRkVW5jb25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpy
ZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplKTsKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUp
CiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3Rh
dGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBo
ZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShy
ZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIEFzc2VtYmx5
SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24o
QUhTdHJ1Y3R1cmVJRElzVmFsaWQpOwogICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmpp
dCk7CiAKLSAgICAgICAgSnVtcCBjb3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGUoKSkpOworICAg
ICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KCkpKTsKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSEluZGV4aW5nVHlwZUlzVmFs
aWQpOwogICAgICAgICBjb3JyZWN0SW5kZXhpbmdUeXBlLmxpbmsoJmppdCk7CiAKQEAgLTQxNSw3
ICs0MTUsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAgICAg
fQogI2Vsc2UKICAgICAvLyBEbyBhIDMyLWJpdCB3aWRlIHN0b3JlIHRvIGluaXRpYWxpemUgdGhl
IGNlbGwncyBmaWVsZHMuCi0gICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0
ci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhk
ZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSk7CisgICAgaml0LnN0b3JlMzIoVHJ1
c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZz
ZXQoKSkpOwogICAgIGppdC5zdG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2VuZGlmCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9u
IDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMTgsOCArMTMxOCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3Rv
cmU2NChzY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpKTsKICNlbHNlCiAgICAgICAgIC8vIFN0b3JlIGFsbCB0aGUgaW5mbyBm
bGFncyB1c2luZyBhIHNpbmdsZSAzMi1iaXQgd2lkZSBsb2FkIGFuZCBzdG9yZS4KLSAgICAgICAg
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZSwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkp
KTsKKyAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZSwgU3Ry
dWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICAgICAgc3RvcmUzMihzY3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBK
U0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkpOwogCiAgICAgICAgIC8vIFN0b3Jl
IHRoZSBTdHJ1Y3R1cmVJRAogICAgICAgICBzdG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
VwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CisgICAgbG9hZDgo
QWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4
aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZv
ckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhp
bmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjAxLDggKzIyMDEsOCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmpl
Y3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKQEAgLTIyMTEsOCArMjIx
MSw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKIAotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3Rv
cmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6
ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0s
IHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIG5ld1NpemUpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1bHQpOwogICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNp
b24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkg
ewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJl
U2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICAgICAgICAgIApA
QCAtMTAxNiw2ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aQogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgICAgICAg
ICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0x
MDI0LDcgKzEwMjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rp
CiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
ICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlh
bGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewog
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNl
IHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNh
bGx5LgpAQCAtMTAzOCwxNCArMTAzNywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2Nv
cGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJl
Y3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgYml0d2lzZV9j
YXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlvbls1XSkpOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nh
c3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0u
dS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRT
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihzY29w
ZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2lu
dFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0xMTU3LDExICsxMTU3LDExIEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHIKICAgICBpbnQgaW5kZXggPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMs
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMSk7CiAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1l
bnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3OCw2ICsxNzgsMTUgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0p
CiAgICAgU1RBVElDX0FTU0VSVChFdmFsQ29kZSA9PSAxKTsKICAgICBTVEFUSUNfQVNTRVJUKEZ1
bmN0aW9uQ29kZSA9PSAyKTsKICAgICBTVEFUSUNfQVNTRVJUKE1vZHVsZUNvZGUgPT0gMyk7Cisg
ICAgCisgICAgU1RBVElDX0FTU0VSVChJc0FycmF5ID09IDB4MDEpOworICAgIFNUQVRJQ19BU1NF
UlQoSW5kZXhpbmdTaGFwZU1hc2sgPT0gMHgwRSk7CisgICAgU1RBVElDX0FTU0VSVChOb0luZGV4
aW5nU2hhcGUgPT0gMHgwMCk7CisgICAgU1RBVElDX0FTU0VSVChJbnQzMlNoYXBlID09IDB4MDQp
OworICAgIFNUQVRJQ19BU1NFUlQoRG91YmxlU2hhcGUgPT0gMHgwNik7CisgICAgU1RBVElDX0FT
U0VSVChDb250aWd1b3VzU2hhcGUgPT0gMHgwOCk7CisgICAgU1RBVElDX0FTU0VSVChBcnJheVN0
b3JhZ2VTaGFwZSA9PSAweDBBKTsKKyAgICBTVEFUSUNfQVNTRVJUKFNsb3dQdXRBcnJheVN0b3Jh
Z2VTaGFwZSA9PSAweDBDKTsKIAogICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlm
Zl90PigocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8SlNDZWxsPio+KDB4NDAwMCktPnNs
b3QoKSkpIC0gMHg0MDAwKSk7CiAgICAgc3RhdGljX2Fzc2VydChQdXRCeUlkUHJpbWFyeVR5cGVN
YXNrID09IDB4NiwgIkxMSW50IGFzc3VtZXMgUHV0QnlJZFByaW1hcnlUeXBlTWFzayBpcyA9PSAw
eDYiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtMTUwNSw2ICsxNTA1LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAub3BHZXRCeVZhbE91
dE9mQm91bmRzOgogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQwKQogICAgIHN0b3JlYiAx
LCBBcnJheVByb2ZpbGU6Om1fb3V0T2ZCb3VuZHNbdDBdCisgICAgam1wIC5vcEdldEJ5VmFsU2xv
dwogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgogICAgICMgRmlyc3QgbGV0cyBjaGVj
ayBpZiB3ZSBldmVuIGhhdmUgYSB0eXBlZCBhcnJheS4gVGhpcyBsZXRzIHVzIGRvIHNvbWUgYm9p
bGVycGxhdGUgdXAgZnJvbnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTMzMywxNCArMzMzLDE0IEBAIGVsc2UKIGVuZAogCiAjIENvbnN0YW50IGZvciBy
ZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCi1jb25zdCBJc0FycmF5ICAgICAgICAgICAgICAg
ICAgPSAxCi1jb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAzMAotY29uc3QgTm9JbmRl
eGluZ1NoYXBlICAgICAgICAgID0gMAotY29uc3QgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0g
MjAKLWNvbnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDIyCi1jb25zdCBDb250aWd1b3Vz
U2hhcGUgICAgICAgICAgPSAyNgotY29uc3QgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMjgK
LWNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMwCitjb25zdCBJc0FycmF5ICAgICAg
ICAgICAgICAgICAgPSAweDAxCitjb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBF
Citjb25zdCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAwCitjb25zdCBJbnQzMlNoYXBl
ICAgICAgICAgICAgICAgPSAweDA0Citjb25zdCBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAw
eDA2Citjb25zdCBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Citjb25zdCBBcnJheVN0
b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBCitjb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUg
PSAweDBDCiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNgpAQCAtODg3
LDcgKzg4Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAKICAg
ICBjb25zdCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIAogICAgIGxvYWRpIEpT
Q2VsbDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAogICAgIHN0b3JlaSBzY3JhdGNoLCBB
cnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtwcm9maWxlXQotICAgIGxvYWRiIEpT
Q2VsbDo6bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5nVHlwZQorICAgIGxvYWRiIEpTQ2Vs
bDo6bV9pbmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRleGluZ1R5cGUKIGVuZAogCiBtYWNy
byBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAkocmV2
aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVu
dEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDcgQEAgcHVibGljOgogICAg
IH0KIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCiAgICAgRGVmZXJHQyBt
X2RlZmVyR0M7Ci0jZWxzZQotICAgIHN0cnVjdCBOb0RlZmVyIHsKLSAgICAgICAgTm9EZWZlcihI
ZWFwJiBoZWFwKSA6IG1faGVhcChoZWFwKSB7IH0KLSAgICAgICAgSGVhcCYgbV9oZWFwOwotICAg
IH07Ci0gICAgTm9EZWZlciBtX2RlZmVyR0M7Ci0jZW5kaWYKIH07CiAKIGNsYXNzIENvbmN1cnJl
bnRKSVRMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpJVExvY2tlckJhc2UgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRz
SW5saW5lcy5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSAr
NjYsMTMgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZQogICAgIFR5
cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAgICAgCiAgICAgaWYgKHRo
aXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAgICAgc2xvdC5z
ZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5k
ZXgpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqZWN0LT5nZXRJbmRleFF1aWNr
bHkoaW5kZXgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUsIHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gQmFzZTo6
Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKKyAg
ICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBl
eGVjLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVHlwZT4KQEAgLTEyOSw3ICsxMzEsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlw
ZT46OnB1dEJ5SW5kZXgoCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxUeXBlKj4o
Y2VsbCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLQorICAgIAogICAgIGlmICh0aGlzT2Jq
ZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CiAgICAgICAgIHRoaXNPYmplY3Qt
PnNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAko
cmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRo
bS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC01MiwyMSArNTMsMjUgQEAgdHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlwZTsKIHN0YXRpYyBj
b25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMHgwMTsKIAogLy8g
VGhlIHNoYXBlIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi1zdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEU7Ci1zdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4MDA7Ci1zdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAgICAgICA9IDB4MDI7IC8vIE9u
bHkgdXNlZnVsIGZvciBhcnJheXMuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEludDMyU2hh
cGUgICAgICAgICAgICAgICA9IDB4MDQ7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERvdWJs
ZVNoYXBlICAgICAgICAgICAgICA9IDB4MDY7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENv
bnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEM7CitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICAgICAgICAgPSAweDBFOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwMDsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAgICAgICAg
ICA9IDB4MDI7IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJheXMuCitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIEludDMyU2hhcGUgICAgICAgICAgICAgICAgICAgICAgPSAweDA0Oworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgICAgICAgID0gMHgwNjsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAgICAgICAgICAg
ICA9IDB4MDg7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5U3RvcmFnZVNoYXBlICAg
ICAgICAgICAgICAgPSAweDBBOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJy
YXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQzsKIAotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgPSAxOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzICAgPSA3Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgICAgICAgID0gMTsKK3N0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgICAgICAgICA9IDc7CiAKIC8vIEFkZGl0
aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0eXBlLiBUaGVzZSBh
cmUgdXN1YWxseQogLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3IgdGhlbSBkaXJlY3Rs
eS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMgID0g
MHgxMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnMg
ICAgICAgICA9IDB4MTA7CisKKy8vIFRoZSBJbmRleGluZ1R5cGUgZmllbGQgb2YgSlNDZWxscyBp
cyBzdG9sZW4gZm9yIGxvY2tzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5
cGVMb2NrSXNIZWxkICAgICAgICAgID0gMHgyMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUg
SW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZCAgICAgICA9IDB4NDA7CiAKIC8vIExpc3Qgb2YgYWNj
ZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9uQXJyYXkg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDsKQEAgLTE3Nyw0ICsxODIsNiBAQCBzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgCiAvLyBNYXNrIG9mIGFsbCBwb3NzaWJs
ZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBl
IEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IEFsbEFycmF5VHlwZXMgfCBNYXlIYXZlSW5kZXhl
ZEFjY2Vzc29yczsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPEluZGV4aW5nVHlwZSwgSW5kZXhp
bmdUeXBlTG9ja0lzSGVsZCwgSW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZD4gSW5kZXhpbmdUeXBl
TG9ja0FsZ29yaXRobTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
MCw3ICszOTAsOSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKFZNJiB2CiAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMg
PSBuZXdJbmRleEJpYXM7CiAgICAgCi0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3Ry
dWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgCisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0xMDYzLDEzICsxMDY1LDE1IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
V2l0aEFycmF5U3RvcmEKICAgICAvLyBOZWVkIHRvIGhhdmUgR0MgZGVmZXJyZWQgYXJvdW5kIHRo
ZSB1bnNoaWZ0Q291bnRTbG93Q2FzZSgpLCBzaW5jZSB0aGF0IGxlYXZlcyB0aGUgYnV0dGVyZmx5
IGluCiAgICAgLy8gYSB3ZWlyZCBzdGF0ZTogc29tZSBwYXJ0cyBvZiBpdCB3aWxsIGJlIGxlZnQg
dW5pbml0aWFsaXplZCwgd2hpY2ggd2Ugd2lsbCBmaWxsIGluIGhlcmUuCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOworICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMp
OwogICAgIAogICAgIGlmIChtb3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRleEJpYXMgPj0gY291
bnQpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9yYWdlLT5idXR0ZXJm
bHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOwogICAgICAgICBzdG9yYWdlID0gbmV3
QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+bV9pbmRleEJpYXMg
LT0gY291bnQ7CiAgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgg
KyBjb3VudCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIH0gZWxzZSBpZiAoIW1vdmVG
cm9udCAmJiB2ZWN0b3JMZW5ndGggLSBsZW5ndGggPj0gY291bnQpCiAgICAgICAgIHN0b3JhZ2Ug
PSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgZWxzZSBpZiAodW5z
aGlmdENvdW50U2xvd0Nhc2Uodm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291bnQpKQpAQCAtMTA5
MCw2ICsxMDk0LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHZlY3Rv
cltpICsgc3RhcnRJbmRleF0uY2xlYXIoKTsKKyAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDIwODU5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDAsOCArMTAwLDMyIEBAIHB1YmxpYzoKICAgICBib29sIGlzUHJveHkoKSBjb25z
dDsKICAgICBib29sIGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OwogICAgIGJvb2wg
aXNBUElWYWx1ZVdyYXBwZXIoKSBjb25zdDsKKyAgICAKKyAgICAvLyBFYWNoIGNlbGwgaGFzIGEg
YnVpbHQtaW4gbG9jay4gQ3VycmVudGx5IGl0J3Mgc2ltcGx5IGF2YWlsYWJsZSBmb3IgdXNlIGlm
IHlvdSBuZWVkIGl0LiBJdCdzCisgICAgLy8gYSBmdWxsLWJsb3duIFdURjo6TG9jay4gTm90ZSB0
aGF0IHRoaXMgbG9jayBpcyBjdXJyZW50bHkgdXNlZCBpbiBKU0FycmF5IGFuZCB0aGF0IGxvY2sn
cworICAgIC8vIG9yZGVyaW5nIHdpdGggdGhlIFN0cnVjdHVyZSBsb2NrIGlzIHRoYXQgdGhlIFN0
cnVjdHVyZSBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QuCisgICAgdm9pZCBsb2NrSW50ZXJu
YWxMb2NrKCk7CisgICAgdm9pZCB1bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAKKyAgICBjbGFz
cyBJbnRlcm5hbExvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICBJbnRlcm5hbExvY2tlcihK
U0NlbGwqIGNlbGwpCisgICAgICAgICAgICA6IG1fY2VsbChjZWxsKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2NlbGwtPmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgfkludGVybmFsTG9ja2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jZWxs
LT51bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBKU0NlbGwqIG1fY2VsbDsKKyAgICB9OwogCiAgICAgSlNUeXBlIHR5cGUoKSBj
b25zdDsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0OwogICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1
Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSgpIGNvbnN0OwpAQCAtMTY3LDYgKzE5MSwxNiBAQCBwdWJsaWM6CiAgICAgQ2Vs
bFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRlOyB9CiAgICAgCiAg
ICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsgY29uc3RfY2FzdDxK
U0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisgICAgYm9vbCBhdG9t
aWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3RhdGUgb2xkU3RhdGUs
IENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0Nv
bXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRl
KTsKKyAgICB9CisKKyAgICBDZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRl
U3Ryb25nKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25nKCZtX2NlbGxTdGF0
ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IHN0
cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkBAIC0xODMsOSArMjE3LDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fdHlwZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIC8vIERPIE5PVCBz
dG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgdXNlIGEgQ0FTIGxvb3AsIHNpbmNlIHNvbWUgYml0
cyBhcmUgZmxpcHBlZCB1c2luZyBDQVMKKyAgICAvLyBmcm9tIG90aGVyIHRocmVhZHMgZHVlIHRv
IHRoZSBpbnRlcm5hbCBsb2NrLiBPbmUgZXhjZXB0aW9uOiB5b3UgZG9uJ3QgbmVlZCB0aGUgQ0FT
IGlmIHRoZQorICAgIC8vIG9iamVjdCBoYXMgbm90IGVzY2FwZWQgeWV0LgorICAgIHN0YXRpYyBw
dHJkaWZmX3QgaW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpCiAgICAgewotICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKICAgICB9
CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNlbGxTdGF0ZU9mZnNldCgpCkBAIC0yMjgsNyArMjY1
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
CiAgICAgU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKLSAgICBJbmRleGluZ1R5cGUgbV9pbmRl
eGluZ1R5cGU7CisgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsgLy8gRE8g
Tk9UIHN0b3JlIHRvIHRoaXMgZmllbGQuIEFsd2F5cyBDQVMuCiAgICAgSlNUeXBlIG1fdHlwZTsK
ICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIG1fZmxhZ3M7CiAgICAgQ2VsbFN0YXRlIG1f
Y2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bElubGluZXMuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFQKIAogaW5saW5lIEpTQ2VsbDo6
SlNDZWxsKFZNJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgOiBtX3N0cnVjdHVyZUlEKHN0
cnVjdHVyZS0+aWQoKSkKLSAgICAsIG1faW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpCisgICAgLCBtX2luZGV4aW5nVHlwZUFuZE1pc2Moc3RydWN0dXJlLT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAgLCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygp
LnR5cGUoKSkKICAgICAsIG1fZmxhZ3Moc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVG
bGFncygpKQogICAgICwgbV9jZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdXaGl0ZSkKQEAgLTc0LDcg
Kzc0LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIGlm
IChzdHJ1Y3R1cmUpIHsKICNlbmRpZgogICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJl
LT5pZCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCk7CisgICAgICAgIG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpOwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlu
bGluZVR5cGVGbGFncygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEsOSArOTEs
MTQgQEAgaW5saW5lIEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5
cGU7CiB9CiAKK2lubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNj
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQorCiBpbmxp
bmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9pbmRleGluZ1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2MoKSAmIEFs
bEFycmF5VHlwZXM7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkg
Y29uc3QKQEAgLTE5NSwxNyArMjAwLDI3IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1
ZVdyYXBwZXIoKSAKICAgICByZXR1cm4gbV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5cGU7CiB9
CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhp
cy0+c3RydWN0dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6aGVhcCh0
aGlzKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0cnVjdHVy
ZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7
CiAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsK
ICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwotICAgIG1faW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5cGUgbmV3
SW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7
CisgICAgaWYgKG1faW5kZXhpbmdUeXBlQW5kTWlzYyAhPSBuZXdJbmRleGluZ1R5cGUpIHsKKyAg
ICAgICAgQVNTRVJUKCEobmV3SW5kZXhpbmdUeXBlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5
KSk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBvbGRWYWx1
ZSA9IG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBuZXdW
YWx1ZSA9IChvbGRWYWx1ZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkgfCBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmIChXVEY6OmF0
b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2luZGV4aW5nVHlwZUFuZE1pc2MsIG9s
ZFZhbHVlLCBuZXdWYWx1ZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5s
aW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKQEAgLTI4
NCwxMSArMjk5LDI2IEBAIGlubGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3IoVk0mIHYK
ICAgICBpZiAoaXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChzdHJ1Y3R1
cmVJRCgpKTsKLSAgICBpZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFs
KQotICAgICAgICBzdHJ1Y3R1cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJv
eSh0aGlzKTsKLSAgICBlbHNlCisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJl
SXNJbW1vcnRhbCkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSh2bSk7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJl
LT5jbGFzc0luZm8oKTsKKyAgICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBk
ZXN0cm95ID0gY2xhc3NJbmZvLT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95
KHRoaXMpOworICAgIH0gZWxzZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3Qq
Pih0aGlzKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAgICAgemFw
KCk7CiB9CiAKK2lubGluZSB2b2lkIEpTQ2VsbDo6bG9ja0ludGVybmFsTG9jaygpCit7CisgICAg
QXRvbWljPEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5n
VHlwZT4qPigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxn
b3JpdGhtOjpsb2NrKCpsb2NrKTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxvY2tJbnRl
cm5hbExvY2soKQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9j
YXN0PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAg
SW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxNyArMTEyLDI4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXIKICAgICAKICAgICAvLyBNYXJrIHRoZSBw
cm9wZXJ0aWVzLgogICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJv
cGVydHlTdG9yYWdlKCkgLSBzdG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIAotICAgIC8v
IE1hcmsgdGhlIGFycmF5IGlmIGFwcHJvcHJpYXRlLgotICAgIHN3aXRjaCAodGhpcy0+aW5kZXhp
bmdUeXBlKCkpIHsKKworICAgIEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKTsKKyAgICBzd2l0Y2ggKG9sZFR5cGUpIHsKICAgICBjYXNlIEFMTF9DT05USUdV
T1VTX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihi
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZ
UEVTOgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVu
Z3RoKCkpOwotICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VN
YXApCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV9zcGFyc2VNYXApOworICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgLy8gVGhpcyBsb2NrIGlzIGhlcmUgdG8gcHJvdGVjdCBDb250aWd1b3Vz
LT5BcnJheVN0b3JhZ2UgdHJhbnNpdGlvbnMsIGJ1dCB3ZSBjb3VsZCBtYWtlIHRoYXQKKyAgICAg
ICAgLy8gcmFjZSB3b3JrIGlmIHdlIG5lZWRlZCB0by4KKyAgICAgICAgSlNDZWxsOjpJbnRlcm5h
bExvY2tlciBsb2NrZXIodGhpcyk7CisgICAgICAgIEluZGV4aW5nVHlwZSBuZXdUeXBlID0gdGhp
cy0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgp
OworICAgICAgICBzd2l0Y2ggKG5ld1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9V
U19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVu
KGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gQUxMX0FSUkFZX1NU
T1JBR0VfSU5ERVhJTkdfVFlQRVMKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlk
ZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDYsMTAgKzE1NywzNCBAQCB2b2lkIEpTT2JqZWN0
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAg
ICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpKTsKLQorICAgIC8vIFdlIHdhbnQgdG8gZGVmZW5k
IGFnYWluc3QgbXVsdGlwbGUgcG9zc2libGUgcmFjZXMgd2l0aCB0aGUgbXV0YXRvcjoKKyAgICAv
LyAtIE11dGF0b3IgY291bGQgaW5zdGFsbCBhIGJpZ2dlciBidXR0ZXJmbHkgYW5kIHRoZW4gaW5z
dGFsbCBhIHN0cnVjdHVyZSB0aGF0IGNsYWltcyBtb3JlCisgICAgLy8gICBwcm9wZXJ0aWVzLiBU
aGlzIHRyaXZpYWxseSB3b3Jrcy4KKyAgICAvLyAtIE11dGF0b3IgY291bGQgbXV0YXRlIHRoZSBk
aWN0aW9uYXJ5IHN0cnVjdHVyZS4gSGVuY2UsIHdlIGhvbGQgdGhlIHN0cnVjdHVyZSBsb2NrIGZv
cgorICAgIC8vICAgZGljdGlvbmFyeSBzdHJ1Y3R1cmVzLgorICAgIC8vIC0gVGhlIGJ1dHRlcmZs
eSBjb3VsZCBzaHJpbmssIGJ1dCB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvYmplY3Qg
d2FzIGEgZGljdGlvbmFyeS4KKyAgICAvLyAgIFVzdWFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSB3
b3VsZCBnZXQgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlIGFuZCBhY3F1aXJlIGEgbG9jay4gVGhh
dAorICAgIC8vICAgdHJpdmlhbGx5IHdvcmtzLiBCdXQgd2UgY291bGQgbG9hZCB0aGUgc3RydWN0
dXJlIGJlZm9yZSB0aGUgb2JqZWN0IGJlY2FtZSBhIGRpY3Rpb25hcnkKKyAgICAvLyAgIGFuZCB0
aGVuIGxvYWQgdGhlIGJ1dHRlcmZseSB0aGF0IHdhcyBzaHJ1bmsuIFdlIHByb3RlY3QgYWdhaW5z
dCB0aGlzIGNhc2UgYnkgY2hlY2tpbmcKKyAgICAvLyAgIHRoZSBzdHJ1Y3R1cmUgYSBzZWNvbmQg
dGltZSBiZWZvcmUgc2Nhbm5pbmcgdGhlIGJ1dHRlcmZseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBi
dXR0ZXJmbHkKKyAgICAvLyAgIGlzIGF0IHdvcnN0IHRoZSBidXR0ZXJmbHkgdGhhdCB0aGUgbXV0
YXRvciBoYWQgaW5zdGFsbGVkIGp1c3QgcHJpb3IgdG8gZmxpcHBpbmcgdGhlCisgICAgLy8gICBz
dHVyY3R1cmUuIFNvIGlmIHRoZSBzdHJ1Y3R1cmUgd2Ugc2VlIGlzIGEgbm9uLWRpY3Rpb25hcnkg
dGhlbiB0aGUgYnV0dGVyZmx5IGNhbm5vdCB5ZXQKKyAgICAvLyAgIGhhdmUgYmVlbiBzaHJ1bmsu
CisgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KSB7CisgICAgICAg
IHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+
bV9idXR0ZXJmbHkuZ2V0KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAg
ICAgIGlmICh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpID09IHN0cnVjdHVyZS0+aWQoKSkKKyAg
ICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwg
c3RydWN0dXJlKTsKKyAgICB9CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVj
dHVyZS0+bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2
aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdG
b3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtMjA0LDE1ICsyMzksMjUgQEAgdm9p
ZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAgICBpZiAoYnV0dGVy
Zmx5KQotICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJm
bHksIHN0cnVjdHVyZSk7CisgICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29sIHdhc0Rp
Y3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0aW9u
YXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgZWxzZQorICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aWQoKSA9PSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgp
KQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVy
Zmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHN0cnVj
dHVyZS0+aW5saW5lU2l6ZSgpOwogICAgIGlmIChzdG9yYWdlU2l6ZSkKICAgICAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdl
U2l6ZSk7Ci0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2Nr
KCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRN
YXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC02NjYsNyArNzExLDggQEAgQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6ZW50ZXJEaWN0aW9uYXJ5SQogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1faW5kZXhCaWFzID0gMDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5z
ZXRWZWN0b3JMZW5ndGgoMCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKIH0KQEAgLTczMSw3ICs3NzcsOSBAQCBC
dXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlSW5pdGlh
bEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVVbmRlY2lkZWQpOwotICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwor
ICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVy
Zmx5OwogfQogCkBAIC03NDIsNyArNzkwLDkgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0
OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9y
TGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZs
eSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdC
dXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCkBAIC03NTMsNyArODAzLDkgQEAgQ29u
dGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRl
cmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0
cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUo
dm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91YmxlKTsKLSAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC03NjQsNyArODE2LDkgQEAgQ29u
dGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQg
aSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRl
cmZseS0+Y29udGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsK
ICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRl
Q29udGlndW91cyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1
cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIApAQCAt
Nzk3LDcgKzg1MSw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNyZWF0ZUFycmF5U3RvcmEK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUFycmF5U3RvcmFnZUJ1dHRlcmZs
eSh2bSwgdGhpcywgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rvckxlbmd0aCwgbV9idXR0ZXJmbHku
Z2V0KCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0cnVjdHVyZS0+c3VnZ2VzdGVkQXJyYXlT
dG9yYWdlVHJhbnNpdGlvbigpKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0s
IG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODgwLDcgKzkzNiw5
IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICAgICAgc3Rv
cmFnZS0+bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAg
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7Cisg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIHN0b3JhZ2U7CiB9CiAKQEAgLTkzNSw3ICs5OTMsOSBAQCBBcnJheVN0b3JhZ2UqIEpT
T2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsK
KyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3Jh
Z2U7CiB9CiAKQEAgLTk4MSw3ICsxMDQxLDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydERvdWJsZVRvQQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFu
c2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwg
bmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBA
IC0xMDA2LDcgKzEwNjgsMjIgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsK
LSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOworCisgICAgLy8gVGhpcyBoYXMgYSBjcmF6eSByYWNlIHdpdGggdGhl
IGdhcmJhZ2UgY29sbGVjdG9yLiBXaGVuIGNoYW5naW5nIHRoZSBidXR0ZXJmbHkgYW5kIHN0cnVj
dHVyZSwKKyAgICAvLyB0aGUgbXV0YXRvciBhbHdheXMgc2V0cyB0aGUgc3RydWN0dXJlIGxhc3Qu
IFRoZSBjb2xsZWN0b3Igd2lsbCBhbHdheXMgcmVhZCB0aGUgc3RydWN0dXJlCisgICAgLy8gZmly
c3QuIFdlIHByb2JhYmx5IGhhdmUgdG8gZm9sbG93IHRoYXQgY29udmVudGlvbiBoZXJlIGFzIHdl
bGwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yCisgICAgLy8gd2lsbCBzb21ldGltZXMg
c2VlIHRoZSBuZXcgYnV0dGVyZmx5ICh0aGUgb25lIHdpdGggQXJyYXlTdG9yYWdlKSB3aXRoIHRo
ZSBvbmx5IHN0cnVjdHVyZSAodGhlCisgICAgLy8gb25lIHRoYXQgc2F5cyB0aGF0IHRoZSBidXR0
ZXJmbHkgaXMgQ29udGlndW91cykuIFdoZW4gc2Nhbm5pbmcgQ29udGlndW91cywgdGhlIGNvbGxl
Y3RvciB3aWxsCisgICAgLy8gbWFyayB3b3JkIGF0IGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gb3Ig
ZXF1YWwgdG8gdGhlIGJ1dHRlcmZseSBwb2ludGVyLCB1cCB0byB0aGUgcHVibGljTGVuZ3RoCisg
ICAgLy8gaW4gdGhlIGJ1dHRlcmZseS4gQnV0IGFuIEFycmF5U3RvcmFnZSBoYXMgc29tZSBub24t
cG9pbnRlciBoZWFkZXIgZGF0YSBhdCBsb3cgcG9zaXRpdmUKKyAgICAvLyBvZmZzZXRzIGZyb20g
dGhlIGJ1dHRlcmZseSAtIHNvIHdoZW4gdGhpcyByYWNlIGhhcHBlbnMsIHRoZSBjb2xsZWN0b3Ig
d2lsbCBzdXJlbHkgY3Jhc2gKKyAgICAvLyBiZWNhdXNlIGl0IHdpbGwgZmFpbCB0byBkZWNvZGUg
dHdvIGNvbnNlY3V0aXZlIGludDMycyBhcyBpZiBpdCB3YXMgYSBKU1ZhbHVlLgorICAgIC8vCisg
ICAgLy8gRm9ydHVuYXRlbHksIHdlIGhhdmUgdGhlIEpTQ2VsbCBsb2NrIGZvciB0aGlzIHB1cnBv
c2UhCisgICAgCisgICAgSW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwg
bmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsx
NTQ1LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAKQEAgLTIwMTksNyArMjA5Niw3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKIAogICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKLQorICAgIAogICAgIC8vIDEu
IExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7
CiAgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwpAQCAtMjcyNSw3ICsyODAyLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JM
ZW5ndGgoVk0mIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAgICAgICBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3
QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMjc0Miw3
ICsyODIwLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0
b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFz
ID0gbmV3SW5kZXhCaWFzOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
Mjc2Miw2ICsyODQxLDcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0s
IAogICAgIAogICAgIHVuc2lnbmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAgICAgIEJ1dHRl
cmZseTo6YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBv
bGRWZWN0b3JMZW5ndGgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbnVsbHB0cjsK
ICAgICBpZiAoYXZhaWxhYmxlT2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGgg
dGhhdCBjYXVzZWQgaW50ZXJuYWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlk
IG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdp
bGwgbWVzcwpAQCAtMjc3NiwxNyArMjg1NiwyNCBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5n
dGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsK
KyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFzRG91Ymxl
KGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JM
ZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5k
ZXhpbmdQYXlsb2FkPGRvdWJsZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+
PigpW2ldLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKG5ld0J1dHRlcmZseSkgeworICAgICAg
ICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMs
IG5ld0J1dHRlcmZseSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MDIsMTIgKzI4ODksMTMgQEAgdm9p
ZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0
dGVyZmx5KTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAg
IG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7
CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6YWxs
b2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCkBAIC0zMDkyLDE1
ICszMTgwLDM0IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAg
ICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09i
amVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZM
aW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBK
U09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+
YnV0dGVyZmx5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gdGhpcy0+YnV0dGVyZmx5UHJl
Q2FwYWNpdHkoKTsKLSAgICB2b2lkKiBjdXJyZW50QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7Ci0gICAgdm9pZCogbmV3QmFzZSA9IGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworICAg
IC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQg
c3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5vbgorICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0
dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gYmUgaG9sZGluZworICAgIC8vIHRoZSBzdHJ1Y3R1cmUncyBsb2NrIHJpZ2h0IG5vdywgYW5k
IHRoYXQgaGVscHMgYSBiaXQuCisgICAgCisgICAgQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkgPSB0
aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0
aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hl
YWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzID0gb2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFj
aXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0K
KworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHZtLCB0aGlzLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIG1lbW1v
dmUobmV3QmFzZSwgY3VycmVudEJhc2UsIHRoaXMtPmJ1dHRlcmZseVRvdGFsU2l6ZSgpKTsKLSAg
ICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIEJ1dHRlcmZseTo6ZnJv
bUJhc2UobmV3QmFzZSwgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpKTsKKyAg
ICAvLyBObyBuZWVkIHRvIGNvcHkgdGhlIHByZWNhcGFjaXR5LgorICAgIHZvaWQqIGN1cnJlbnRC
YXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAg
IHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlB
ZnRlcik7CisKKyAgICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50MzJfdCBK
U09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAgICBib29s
IHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY1By
b3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhF
eGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9m
TGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZv
aWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5Kik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVT
dG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAgICAgCisg
ICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNoYW5nZSB0
aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZvaWQgc2V0
U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlT
dHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0CiAgICAgewpAQCAtOTkwLDkgKzk4OSw5IEBAIHBy
aXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5l
U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgYm9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNs
b3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJv
b2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlP
ZmZzZXQpOwotICAgIHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CisgICAgdm9pZCBmaWxsQ3VzdG9t
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1
Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duU3RhdGljUHJvcGVy
dHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBjb25zdCBIYXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3Bl
cnR5TmFtZSkgY29uc3Q7CkBAIC0xMjA1LDE0ICsxMjA0LDYgQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OmlzV2l0aFNjb3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlw
ZTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLXsKLSAg
ICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0
aGlzKSkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKLSAgICBz
ZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQo
c3RydWN0dXJlKTsKQEAgLTEyMjAsNyArMTIxMSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpz
ZXRTdHJ1Y3R1cmUoVk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZvaWQgSlNP
YmplY3Q6OnNldEJ1dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAg
IG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTEyNzMsMTYgKzEy
NjQsMTYgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlwZShWTQogCiAvLyBJ
dCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIFByb3BlcnR5TmFtZSB0aGF0IGlz
IGFjdHVhbGx5IGFuIGluZGV4LAogLy8gYnV0IGlmIHNvIHdpbGwgYWx3YXlzIHJldHVybiBmYWxz
ZSAoZG9lc24ndCBzZWFyY2ggaW5kZXggc3RvcmFnZSkuCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNP
YmplY3Q6OmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiB2bSwgU3RydWN0dXJlJiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK0FM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewogICAgICAgICBpZiAoIVR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKGlubGluZVR5
cGVGbGFncygpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGdl
dE93blN0YXRpY1Byb3BlcnR5U2xvdCh2bSwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9Ci0K
KyAgICAKICAgICAvLyBnZXRQcm9wZXJ0eVNsb3QgcmVsaWVzIG9uIHRoaXMgbWV0aG9kIG5ldmVy
IHJldHVybmluZyBpbmRleCBwcm9wZXJ0aWVzIQogICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKTsKIApAQCAtMTMwNyw5ICsxMjk4LDkgQEAgQUxXQVlTX0lOTElORSBib29sIEpT
T2JqZWN0OjpnZXRPd25Ob25JbgogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiBzbG90LCBKU1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywg
U3RydWN0dXJlJiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxD
dXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGN1c3Rv
bUdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAg
aWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewogICAgICAgICBzbG90
LnNldEN1c3RvbSh0aGlzLCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4o
Y3VzdG9tR2V0dGVyU2V0dGVyKS0+Z2V0dGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTMyNSw3ICsxMzE2LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsQ3Vz
dG9tRwogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNP
YmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBT
dHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKG9iamVjdC0+
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBp
bmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkKQEAgLTEzNTMsMTAgKzEzNDQsMTAgQEAg
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICAgICAgcmV0
dXJuIG9iamVjdC0+Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQob2JqZWN0LT50eXBlKCkgIT0gUHJveHlP
YmplY3RUeXBlKTsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURU
YWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAg
ICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IEpTVmFsdWUgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAg
ICAgIGlmICghcHJvdG90eXBlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgb2JqZWN0ID0gYXNPYmplY3QocHJvdG90eXBlKTsKQEAgLTEzODUsMTMyICsxMzc2LDYgQEAg
aW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi10ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1
dFByb3BlcnR5U2xvdCYgc2xvdCkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIEFTU0VSVCh2
YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAg
IEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6
aGVhcCh0aGlzKSk7Ci0gICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwotCi0g
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5o
YXNJbmZlcnJlZFR5cGVzKCkpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY3VycmVudEF0
dHJpYnV0ZXM7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKG9mZnNl
dCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1
dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0g
ICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwotICAgICAg
ICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0KLSAgICAgICAg
ICAgIGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRy
aWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEoYXR0
cmlidXRlcyAmIFJlYWRPbmx5KSk7Ci0gICAgICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAh
aXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1
dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1
dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAg
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0
dGVyZmx5KTsKLQotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NF
UlQodGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHko
dGhpcywgb2Zmc2V0KTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAg
ICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQ7Ci0gICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKAotICAgICAgICBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKLSAgICBpZiAobmV3U3Ry
dWN0dXJlKSB7Ci0gICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JFeGlzdGlu
Z1RyYW5zaXRpb24oCi0gICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5j
b250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0g
Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0
KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwot
ICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIGJv
b2wgaGFzSW5mZXJyZWRUeXBlOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwotICAgIGlmIChv
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1
dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgewotICAgICAgICAgICAgc3Ry
dWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCi0gICAgICAgICAgICAgICAgdm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0
QnlJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhp
cywgb2Zmc2V0KTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLQotICAg
ICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYg
QWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0
cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkgewotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmli
dXRlcyAmIFJlYWRPbmx5KSk7Ci0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbiB3YXRjaHBvaW50IHRvIGZpcmUgYWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRj
aGVkCi0gICAgLy8gc3RydWN0dXJlLiBUaGlzIGFsbG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0
byBvYnNlcnZlIGlmIHRoZSBuZXcgc3RydWN0dXJlIGlzIHRoZSBvbmUKLSAgICAvLyB3ZSB3YW50
LgotICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVk
V2F0Y2hwb2ludEZpcmU7Ci0gICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRO
ZXdQcm9wZXJ0eVRyYW5zaXRpb24oCi0gICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2lu
dEZpcmUpOwotICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9u
KAotICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAKLSAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQp
OwotICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBuZXdT
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9
IG5ld0NhcGFjaXR5KTsKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNpdHkpCi0gICAg
ICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2Fw
YWNpdHksIG5ld0NhcGFjaXR5KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgfQotICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7Ci0gICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwot
ICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0
Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBBU1NFUlQodmFsdWUpOwpAQCAtMTU0OSwyNCArMTQxNCw2IEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCAKICAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEFT
U0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikp
OwotICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoc3RydWN0dXJl
KCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7
Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGll
cygpOwotICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKLSAgICBzdHJ1Y3R1cmUtPndp
bGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hv
dWxkT3B0aW1pemUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
LCBuZXdCdXR0ZXJmbHkpOwotICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci19Ci0K
IEFMV0FZU19JTkxJTkUgSlNPYmplY3QqIFJlZ2lzdGVyOjpvYmplY3QoKSBjb25zdAogewogICAg
IHJldHVybiBhc09iamVjdChqc1ZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsMTMgKzEwNywxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omdl
dFByb3BlcnR5CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6
OkdldFByb3RvdHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6
Z2V0UHJvdG90eXBlOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSYgc3Ry
dWN0dXJlID0gKnN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7Ci0g
ICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3Bl
cnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3Ry
dWN0dXJlSUQoKSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgICAg
ICBpZiAoTElLRUxZKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90
eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9
PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKLSAgICAgICAg
ICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgaWYg
KExJS0VMWShzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUg
PT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQorICAgICAgICAgICAg
cHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7
CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC0xMzUs
MTggKzEzNSwxOCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6OkdldFByb3RvdHlw
ZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0UHJvdG90eXBl
OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKnN0
cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJ
RCgpKTsKICAgICAgICAgaWYgKExJS0VMWSghVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3Bl
cnR5U2xvdChvYmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKICAgICAgICAgICAgIGlmIChv
YmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5n
ZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAg
IGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5
cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09
IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAg
ICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAo
TElLRUxZKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9
PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBw
cm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTE1Nyw2
ICsxNTcsMzAgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAg
IH0KIH0KIAoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKK3sKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgQVNT
RVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CisgICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKKyAgICBCdXR0ZXJm
bHkqIGJ1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBh
Y2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzdHJ1Y3R1cmUtPmFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsCisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAg
ICAgIGJ1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9m
TGluZUNhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICAgICAgc2V0QnV0dGVy
Zmx5KHZtLCBidXR0ZXJmbHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5z
UmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBib29sIHNob3VsZE9wdGltaXplID0g
ZmFsc2U7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUpOworICAgICAgICAg
ICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgfSk7Cit9CisKIC8vIEVD
TUEgOC42LjIuMgogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmUoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKQEAgLTIwNyw0ICsyMzEsMTM3IEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGUKICAgICByZXR1cm4gY29u
c3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3du
UHJvcGVydHlTbG90QnlJbmRleChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK3RlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+
CitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAg
QVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29y
KSk7CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9
PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1l
KSk7CisKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Cisg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBp
ZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICgobW9kZSA9PSBQ
dXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7
CisgICAgICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKwor
ICAgICAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmli
dXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3Vy
cmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgICAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywKKyAgICAgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciYsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAgICAgIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAg
ICAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdl
KHZtLCBvbGRPdXRPZkxpbmVDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRD
b250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0
eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlKAorICAgICAgICBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgb2Zmc2V0KTsKKyAgICBpZiAobmV3U3RydWN0dXJlKSB7CisgICAgICAgIG5ld1N0cnVjdHVy
ZS0+d2lsbFN0b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQ
dXRCeUlkKTsKKyAgICAgICAgCisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAg
ICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKKyAgICAgICAgaWYg
KGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2
bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwor
ICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgfQorCisgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9w
ZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
IHsKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhh
c0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICB9CisKKyAg
ICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisKKyAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYg
QWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRl
cyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3Nv
cikpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOworICAg
ICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKChtb2RlID09IFB1dE1v
ZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCB0
byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAorICAgIC8vIHN0cnVjdHVyZS4g
VGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2ZSBpZiB0aGUgbmV3IHN0
cnVjdHVyZSBpcyB0aGUgb25lCisgICAgLy8gd2Ugd2FudC4KKyAgICBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOworICAgIAor
ICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAor
ICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwg
c2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7
CisgICAgCisgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKKyAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7CisgICAgaWYg
KG9sZENhcGFjaXR5ICE9IG5ld0NhcGFjaXR5KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5l
d0NhcGFjaXR5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIH0KKyAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgaWYgKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODU5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDYgKzE4NCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwog
ICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxs
cHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKKyAgICB2KGJvb2wsIGNvbGxlY3RDb250aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9y
bWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFy
c2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3Jp
dGVCYQogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiB9OwogCisvLyBGSVhNRTogVGhpcyBuZWVk
cyB0byBoYXZlIGEgbG9jayBpbiBpdC4KIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgZmluYWwg
OiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAyMDg1OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNiBAQAogCiAjZGVmaW5lIERVTVBfU1RSVUNU
VVJFX0lEX1NUQVRJU1RJQ1MgMAogCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBET19QUk9QRVJU
WU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2Vsc2UKLSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09O
U1RFTkNZX0NIRUNLIDAKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFt
ZXNwYWNlIFdURjsKIApAQCAtMTYzLDkgKzE1Nyw5IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3Rh
dGlzdGljcygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCkpIHsKICAgICAgICAg
ICAgICsrbnVtYmVyV2l0aFByb3BlcnR5TWFwczsKLSAgICAgICAgICAgIHRvdGFsUHJvcGVydHlN
YXBzU2l6ZSArPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+c2l6ZUluTWVtb3J5KCk7Cisg
ICAgICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDYsNyArMzAwLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIGZvciAoc3RydWN0dXJlID0gdGhpczsgc3Ry
dWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkgewogICAgICAgICBz
dHJ1Y3R1cmUtPm1fbG9jay5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9IHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZSgpLmdldCgpOworICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+
cHJvcGVydHlUYWJsZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsKICAgICAgICAgICAg
IC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRv
IHRoaW5ncyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgbG9zZXMg
aXRzIHByb3BlcnR5IHRhYmxlLgpAQCAtMzIxLDMwICszMTUsMzEgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIEFTU0VSVCghdGFibGUpOwogfQogCi12b2lk
IFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYgdm0pCitQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJv
cGVydHlUYWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGlu
Zm8oKSk7Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwotCisgICAgCisgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOworICAgIAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1
Y3R1cmVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlOwogICAgIAogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0
cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAorICAgIHVuc2lnbmVkIGNhcGFjaXR5
ID0gbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkp
OwogICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBudW1i
ZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAg
ICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBhY2l0eSk7CiAgICAgICAgIHN0cnVjdHVy
ZS0+bV9sb2NrLnVubG9jaygpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGFibGUgPSBQ
cm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBNdXN0IGhv
bGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5n
IHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0
Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAg
ICAgLy8gc3RhdGUuCiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
LCB2bS5oZWFwKTsKLSAgICBpZiAoIXRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChs
b2NrZXIsIHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSkpOwotICAgIGVsc2UKLSAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhp
cywgdGFibGUpOworICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQorICAgICAgICB0aGlzLT5zZXRQ
cm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRh
YmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKIApAQCAtMzU1LDEwICszNTAsMTIgQEAg
dm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgICAgICBQcm9wZXJ0
eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0
dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAg
ICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJl
dmlvdXMuZ2V0KCkpKQogICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsK
LSAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOworICAgICAgICB0YWJsZS0+YWRkKGVu
dHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdl
KTsKICAgICB9CiAgICAgCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgIAorICAg
IHJldHVybiB0YWJsZTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0KQpAQCAtNDczLDcgKzQ3MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQ
cm9wZXJ0eVRyYW4KICAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1h
eUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWlu
LmdldCgpKTsKICAgICB0cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1l
LnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0
ZXMpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0
TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUu
Z2V0KCkpOwogCkBAIC01MjEsMzYgKzUxOCwzMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlUcmFuCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBl
KQogeworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICB0cmFuc2l0aW9uLT5tX3Byb3Rv
dHlwZS5zZXQodm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7Ci0KLSAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KSk7CisgICAgCisgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKLQorICAgIAogICAgIHRyYW5z
aXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsK
IH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHN0
cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsK
LSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAgICAgCisg
ICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCiAgICAgICAg
IHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+
cHJvcGVydHlUYWJsZSgpKTsKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdl
dChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnktPmF0
dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCkBAIC01NjEsMTcgKzU1MiwxNSBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9E
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9u
YXJ5S2luZCBraW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSog
ZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9u
YXJ5KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCi0gICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSkpOworICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9
IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQo
a2luZCk7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0SGFzQmVl
bkRpY3Rpb25hcnkodHJ1ZSk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENv
bnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC02MDMsMzEgKzU5Miwy
OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKIFByb3BlcnR5
VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZt
KQogewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBpZiAo
aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCkt
PmNvcHkodm0sIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7Ci0gICAgCi0gICAgLy8gSG9s
ZCB0aGUgbG9jayB3aGlsZSBzdGVhbGluZyB0aGUgdGFibGUgLSBzbyB0aGF0IGdldENvbmN1cnJl
bnRseSgpIG9uIGFub3RoZXIgdGhyZWFkCi0gICAgLy8gd2lsbCBlaXRoZXIgaGF2ZSB0byBieXBh
c3MgdGhpcyBzdHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRvIHVzZSB0aGUgcHJvcGVydHkgdGFibGUK
LSAgICAvLyBiZWZvcmUgaXQgaXMgc3RvbGVuLgotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZW5Qcm9wZXJ0eVRhYmxlID0gcHJv
cGVydHlUYWJsZSgpLmdldCgpOwotICAgIHByb3BlcnR5VGFibGUoKS5jbGVhcigpOwotICAgIHJl
dHVybiB0YWtlblByb3BlcnR5VGFibGU7CisgICAgLy8gVGhpcyBtdXN0IGFsd2F5cyByZXR1cm4g
YSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJs
ZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIGlmIChyZXN1bHQpIHsKKyAg
ICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKKyAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVs
bHB0cik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGJvb2wgc2V0UHJvcGVy
dHlUYWJsZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0s
IHNldFByb3BlcnR5VGFibGUpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9B
dHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBpZiAoY2hhbmdlc0lu
ZGV4aW5nVHlwZSh0cmFuc2l0aW9uS2luZCkpIHsKICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKSB7CiAgICAg
ICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0
dXJlKSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0
LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0g
Z2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkVHJhbnNpdGlvbkZyb21U
aGlzU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNjM4LDcgKzYyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAg
ICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbiA9
IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSkgewogICAg
ICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpID09
IGF0dHJpYnV0ZXMpOwotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgQVNTRVJU
KGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFu
c2l0aW9uOwogICAgIH0KICAgICAKQEAgLTY0Niw3ICs2MzMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9u
ID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJ
blByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGlu
Z1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeShpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAK
ICAgICBpZiAocHJldmVudHNFeHRlbnNpb25zKHRyYW5zaXRpb25LaW5kKSkKICAgICAgICAgdHJh
bnNpdGlvbi0+c2V0RGlkUHJldmVudEV4dGVuc2lvbnModHJ1ZSk7CkBAIC02NTcsMzIgKzY0NCwy
OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgICAgIC8v
IHRhYmxlLCBzaW5jZSBvdXIgbG9naWMgZm9yIHdhbGtpbmcgdGhlIHByb3BlcnR5IHRyYW5zaXRp
b24gY2hhaW4gdG8gcmVtYXRlcmlhbGl6ZSB0aGUKICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBr
bm93IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KICAgICAg
ICAgCi0gICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBkZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0p
KTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyh2bSwgc3RydWN0dXJlLT5jb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNo
aW5nKCk7CiAgICAgICAgIAotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRyYW5zaXRpb24tPnByb3BlcnR5
VGFibGUoKS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxs
UHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0
dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5
T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEoZW50cnkuYXR0cmli
dXRlcyAmIEFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8
PSBSZWFkT25seTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUg
PSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHRhYmxlKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgeworICAgICAg
ICAgICAgaWYgKHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkK
KyAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7CisgICAgICAg
ICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktp
bmQpICYmICEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBl
bnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgICAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5tX29mZnNldDsKICAgICAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9v
ZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0KICAgICAKICAgICBp
ZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0g
ICAgICAgICYmIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKQotICAgICAgICAmJiAhdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZSgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0cmFuc2l0aW9u
LT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byh0cnVl
KTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgdHJh
bnNpdGlvbi0+cGluKCk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgdHJhbnNpdGlvbi0+
ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkpOwogICAgIGVsc2UgewogICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CiAgICAgICAgIHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKQEAgLTY5OCwxMyArNjgyLDEy
IEBAIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChWTSYgdm0pCiAgICAgaWYgKGlzU3RydWN0dXJl
RXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBk
ZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxl
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVu
ZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgp
OworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICgoaXRlci0+YXR0cmlidXRlcyAm
IERvbnREZWxldGUpICE9IERvbnREZWxldGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtNzE3LDEzICs3MDAsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2
bSkKICAgICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgp
KQorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1w
dHkodm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAg
aWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnREZWxldGUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNj
ZXNzb3IpKSkKQEAgLTczNiwyMSArNzE4LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVMKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNT
RVJUKGlzRGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNh
cGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkgewotICAgICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKKyAgICAg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAg
IEFTU0VSVCh0YWJsZSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0
eVRhYmxlKCktPnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+
c2l6ZSgpOwogCiAgICAgICAgIC8vIEhvbGRzIG91ciB2YWx1ZXMgY29tcGFjdGVkIGJ5IGluc2Vy
dGlvbiBvcmRlci4KICAgICAgICAgVmVjdG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9wZXJ0eUNvdW50
KTsKIAogICAgICAgICAvLyBDb3BpZXMgb3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVpciBoYXNoZWQg
bG9jYXRpb25zLCBjb21wYWN0aW5nIHByb3BlcnR5IHRhYmxlIG9mZnNldHMgYXMgd2UgZ28uCiAg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CiAgICAgICAgIG1fb2Zmc2V0ID0gaW52YWxpZE9mZnNl
dDsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlU
YWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIsICsraSkgewogICAgICAgICAgICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXRE
aXJlY3QoaXRlci0+b2Zmc2V0KTsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0
ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAg
IH0KQEAgLTc1OSw3ICs3NDQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rp
b25hcnlTCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyBp
KyspCiAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgb2Zmc2V0Rm9yUHJvcGVydHlO
dW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7CiAKLSAgICAgICAgcHJvcGVy
dHlUYWJsZSgpLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CisgICAgICAgIHRhYmxlLT5jbGVhckRl
bGV0ZWRPZmZzZXRzKCk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICB9
CiAKQEAgLTc2OCw1NSArNzUzLDM0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVMKIAogICAgIHNpemVfdCBhZnRlck91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKIAotICAgIGlmIChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBh
ZnRlck91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYg
YmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgIT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkgewogICAg
ICAgICBBU1NFUlQoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPiBhZnRlck91dE9mTGluZUNhcGFj
aXR5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVy
IGZsYXR0ZW5pbmcvY29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAg
ICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBl
bmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KLSAgICAg
ICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYg
IXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3QtPnNl
dFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIGlmICghYWZ0ZXJP
dXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAg
ICAgICAgICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAgICAgLy8g
SWYgdGhlIG9iamVjdCB3YXMgZG93bi1zaXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGJhc2Ug
b2YgdGhlIEJ1dHRlcmZseSBpcyBubyBsb25nZXIgd2l0aGluIHRoZSAKICAgICAgICAgLy8gZmly
c3QgQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9uZyBhbnN3
ZXIgaWYgd2UgdHJ5IHRvIG1hc2sgdGhlIGJhc2UgYmFjayB0byAKICAgICAgICAgLy8gdGhlIENv
cGllZEJsb2NrIGhlYWRlci4gVG8gcHJldmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtZW1tb3Zl
IHRoZSBCdXR0ZXJmbHkgZG93bi4KLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0ZXJmbHko
KSkKLSAgICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcodm0s
IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmlu
Zyhsb2NrZXIsIHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9Ci0KLSAg
ICByZXR1cm4gdGhpczsKLX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7
CiAgICAgCi0gICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewot
ICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQ
aW5uaW5nKHZtLCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJv
cGVydHlOYW1lKTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBpbigp
Cit2b2lkIFN0cnVjdHVyZTo6cGluKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0g
ICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KHRydWUpOworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBjbGVhclByZXZp
b3VzSUQoKTsKICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTdHJ1
Y3R1cmU6OnBpbkZvckNhY2hpbmcoKQordm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoVk0m
IHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgp
KTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlU
YWJsZSh2bSwgdGFibGUpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxscHRyOwogfQogCkBA
IC04OTEsMTcgKzg1NSwxMyBAQCB2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAog
ICAgIH0KIAogICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0
YWJsZS4KLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0KKyAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisgICAgCiAg
ICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdp
dmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50Ci0gICAgLy8gYWxy
ZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgotICAgIEFTU0VSVChw
cm9wZXJ0eVRhYmxlKTsKLQotICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJl
c2VudC4KKyAgICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50Lgog
ICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5
TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsKLQorICAgIAogICAgIGlmIChzaG91bGRP
cHRpbWl6ZSkKICAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3Rv
cmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKICAgICBlbHNlIHsKQEAgLTk0
MywxOCArOTAzLDEyIEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXIK
IAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUo
Vk0mIHZtKQotewotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0
KCkpOwotfQotCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0
dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKLSAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgIGlmIChQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5
VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOworICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZh
bHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5
VGFibGUpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKQEAgLTk4OSw3MCAr
OTQzLDI0IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFs
aWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5
KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1i
b2woKSkKLSAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0
aW9uKGZhbHNlKTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwg
dm0pOwotCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5u
ZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
UHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQ
cm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
Ci0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5
VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRh
YmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7
Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0Owot
Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFi
bGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0
eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBj
YXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7Ci0gICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOworICAgIHJldHVybiByZW1vdmUocHJvcGVydHlO
YW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0p
OwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0m
IHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1v
ZGUpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxl
KCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RF
bXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAg
Ym9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1
Y3R1cmUoKTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFi
bGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJv
cGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAg
UHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZvciAoUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CiAgICAgICAgIEFTU0VSVCghaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZv
ckVudW1lcmF0aW9uKCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKICAgICAg
ICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8
fCAhaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRl
cyAmIERvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewpAQCAt
MTExNCw2ICsxMDIyLDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAog
ICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIAog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7CiAgICAgaWYg
KCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFBy
b3RvdHlwZUNoYWluLmNsZWFyKCk7CkBAIC0xMjc2LDkyICsxMTg3LDYgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmR1bXBDb250ZXh0SGVhZGVyKFByaW50UwogICAgIG91dC5wcmludCgiU3RydWN0dXJlczoi
KTsKIH0KIAotI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCi12b2lkIFByb3Bl
cnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA+
PSBQcm9wZXJ0eVRhYmxlOjpNaW5pbXVtVGFibGVTaXplKTsKLSAgICBBU1NFUlQobV9pbmRleE1h
c2spOwotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA9PSBtX2luZGV4TWFzayArIDEpOwotICAgIEFT
U0VSVCghKG1faW5kZXhTaXplICYgbV9pbmRleE1hc2spKTsKLQotICAgIEFTU0VSVChtX2tleUNv
dW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fa2V5Q291bnQgKyBtX2RlbGV0
ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVChtX2RlbGV0ZWRDb3VudCA8
PSBtX2luZGV4U2l6ZSAvIDQpOwotCi0gICAgdW5zaWduZWQgaW5kZXhDb3VudCA9IDA7Ci0gICAg
dW5zaWduZWQgZGVsZXRlZEluZGV4Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYSA9IDA7
IGEgIT0gbV9pbmRleFNpemU7ICsrYSkgewotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0g
bV9pbmRleFthXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gUHJvcGVydHlUYWJsZTo6RW1w
dHlFbnRyeUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeUlu
ZGV4ID09IGRlbGV0ZWRFbnRyeUluZGV4KCkpIHsKLSAgICAgICAgICAgICsrZGVsZXRlZEluZGV4
Q291bnQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
ZW50cnlJbmRleCA8IGRlbGV0ZWRFbnRyeUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoZW50cnlJ
bmRleCAtIDEgPD0gdXNlZENvdW50KCkpOwotICAgICAgICArK2luZGV4Q291bnQ7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBiID0gYSArIDE7IGIgIT0gbV9pbmRleFNpemU7ICsrYikKLSAgICAg
ICAgICAgIEFTU0VSVChtX2luZGV4W2JdICE9IGVudHJ5SW5kZXgpOwotICAgIH0KLSAgICBBU1NF
UlQoaW5kZXhDb3VudCA9PSBtX2tleUNvdW50KTsKLSAgICBBU1NFUlQoZGVsZXRlZEluZGV4Q291
bnQgPT0gbV9kZWxldGVkQ291bnQpOwotCi0gICAgQVNTRVJUKCF0YWJsZSgpW2RlbGV0ZWRFbnRy
eUluZGV4KCkgLSAxXS5rZXkpOwotCi0gICAgdW5zaWduZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0g
MDsKLSAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdXNlZENvdW50KCk7ICsrYykgewotICAg
ICAgICBTdHJpbmdJbXBsKiByZXAgPSB0YWJsZSgpW2NdLmtleTsKLSAgICAgICAgaWYgKHJlcCA9
PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgKytub25FbXB0eUVudHJ5Q291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBJZGVu
dGlmaWVyUmVwSGFzaDo6aGFzaChyZXApOwotICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAg
ICAgdW5zaWduZWQgZW50cnlJbmRleDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAg
IGVudHJ5SW5kZXggPSBtX2luZGV4W2kgJiBtX2luZGV4TWFza107Ci0gICAgICAgICAgICBBU1NF
UlQoZW50cnlJbmRleCAhPSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpOwotICAgICAg
ICAgICAgaWYgKHJlcCA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsg
PSAxIHwgZG91YmxlSGFzaChJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApKTsKLSAgICAgICAg
ICAgIGkgKz0gazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA9PSBjICsg
MSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG5vbkVtcHR5RW50cnlDb3VudCA9PSBtX2tleUNvdW50
KTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1l
cmF0aW9uKCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVy
dHlUYWJsZSgpLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBp
dGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKLSAgICAg
ICAgICAgIEFTU0VSVCghaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHByb3BlcnR5VGFibGUoKS0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi0jZWxzZQot
Ci1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKLX0KLQotI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNU
RU5DWV9DSEVDSwotCiBib29sIENsYXNzSW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBjaSA9IHRoaXM7
IGNpOyBjaSA9IGNpLT5wYXJlbnRDbGFzcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDIwODU5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTcgKzE4
MywxOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NlYWxlZChWTSYp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNGcm96ZW4oVk0mKTsKICAgICBib29sIGlz
U3RydWN0dXJlRXh0ZW5zaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFkaWRQcmV2ZW50RXh0ZW5zaW9u
cygpOyB9Ci0gICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBzaXpl
X3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYsIEpT
T2JqZWN0Kik7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hv
dWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVy
dHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgLy8gVmVyc2lvbnMgdGhh
dCB0YWtlIGEgZnVuYyB3aWxsIGNhbGwgaXQgYWZ0ZXIgbWFraW5nIHRoZSBjaGFuZ2UgYnV0IHdo
aWxlIHN0aWxsIGhvbGRpbmcKKyAgICAvLyB0aGUgbG9jay4gVGhlIGNhbGxiYWNrIGlzIG5vdCBj
YWxsZWQgaWYgdGhlcmUgaXMgbm8gY2hhbmdlIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwK
KyAgICAvLyByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKCkgYW5kIHRoZSBwcm9wZXJ0
eSBpcyBub3QgZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0
eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiwgUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVX
aXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBl
LnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlv
bmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlL
aW5kOyB9CkBAIC0yMjksOCArMjMxLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZv
KCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJl
dHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBp
c09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGlu
Z1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsg
fQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Iu
aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4g
bV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBi
b29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkg
KzQzNSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1
cmUsIG1fY2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qg
aW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9m
ZnNldCgpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9i
KSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVP
ZmZzZXQoKQpAQCAtNTc5LDYgKzU4MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9p
ZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRK
SVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTYzMyw0NCArNjM3LDQ1IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAg
UHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQ
cm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJv
cGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQg
a2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIFdyaXRl
QmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFi
bGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJvcGVydHlU
YWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAgLy8gVGhp
cyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhl
IFN0cnVjdHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9u
VGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGlu
Zm8oKSk7Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAg
ICBpZiAoIXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3Vs
dCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KFZNJiB2bSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMgbWF5IGdy
YWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1
cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUoVk0mIHZt
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFT
U0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHByb3BlcnR5
VGFibGUoKS5nZXQoKTsKLSAgICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkpIHsKLSAg
ICAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXAodm0pOwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCku
Z2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1f
cHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICB2
b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0mIHZtLCBE
ZWZlckdDJikKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0g
aW5mbygpKTsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0p
OworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAgIH0KKyAg
ICAKKyAgICAvLyBUaGlzIHdpbGwgZ3JhYiB0aGUgbG9jay4gRG8gbm90IGNhbGwgd2hlbiBob2xk
aW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5
VGFibGUqIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJs
ZSA9IHRydWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3Bl
cnR5VGFibGUqIHRhYmxlKTsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMiw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hl
ZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgCi0gICAg
dm9pZCBwaW4oKTsKLSAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIHBpbihWTSYsIFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZvckNhY2hp
bmcoVk0mLCBQcm9wZXJ0eVRhYmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRhKEpTQ2Vs
bCogY2VsbCkgY29uc3QKICAgICB7CkBAIC03MTAsNyArNzE1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3Ry
dWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAg
ICAgICAKKwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03NDAsNyAr
NzQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5z
aXRpb25UYWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5
VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQu
CisgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgp
LiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICAv
LyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBz
byBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9w
cm9wZXJ0eVRhYmxlVW5zYWZlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFk
YmVlZjsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJl
SUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykK
KyAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8p
CiAgICAgewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAg
ICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmll
bGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAg
ICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsK
ICAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7
CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1
Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsg
fQogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5m
aWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29u
c3QgeyByZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGlu
Z1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUg
PSBpbmRleGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3Rvcnk7IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAg
ICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBl
SW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUu
ZmllbGRzLmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmll
bGRzLnN0cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5n
VHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
dWN0dXJlSURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAg
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAg
ICAgICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAg
ICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtOTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAg
IEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRh
YmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghcHJvcGVy
dHlUYWJsZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwzMSArMjE4
LDYgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAgIHJldHVy
biBpc1ZhbGlkKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90eXBlQ2hh
aW4pOwogfQogCi1pbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3Rv
cmFnZSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNTRVJUKG91
dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICghcHJvcGVy
dHlUYWJsZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRP
ZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQob3V0T2ZM
aW5lQ2FwYWNpdHkoKSA+PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2l6
ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3RhbFN0b3Jh
Z2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsK
LSAgICBpZiAocHJvcGVydHlUYWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3Bl
cnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkg
PT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJp
ZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0
dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpk
aWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChMSUtF
TFkoIWhhc1JhcmVEYXRhKCkpKQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRjaHBvaW50
U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJv
cGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9wZXJ0eVRh
YmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkp
OwpAQCAtMjkyLDYgKzI2NiwxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVj
a09mZnNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCit7CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBp
bmxpbmUgc2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRD
YXBhY2l0eSkKIHsKICAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSArMjc4LDYg
QEAgaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJldHVybiBj
dXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSBzaXpl
X3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKQotewot
ICAgIHJldHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5
KCkpOwotfQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRv
U3RyaW5nVGFnU3ltYm9sU2xvdCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC0zMTEs
NCArMjg1LDg1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAg
ICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1
ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKwor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Cisg
ICAgCisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFTU0VSVCgh
SlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlO
YW1lLmlzU3ltYm9sKCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRG
b3JFbnVtZXJhdGlvbihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQo
KTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1f
aW5saW5lQ2FwYWNpdHkpOworICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShy
ZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisg
ICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAg
CisgICAgLy8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdo
aWNoIHdpbGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUgb25seSB3
YXkgZm9yIHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0eS4KKyAg
ICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKworICAgIGlm
ICghdGFibGUpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlU
YWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7CisgICAgaWYg
KCFwb3NpdGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAg
IHRhYmxlLT5yZW1vdmUocG9zaXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9m
ZnNldCk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgb2Zm
c2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0eVRhYmxl
KHZtKSk7CisgICAgCisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFTU0VSVChp
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRh
YmxlKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAorICAgIHJl
dHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0
dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCit7Cisg
ICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOwor
fQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NTkyKQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAx
Ni0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBH
QyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0NTQK
KworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAg
IFRoZSByZWFzb24gd2h5IEkgd2VudCB0byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2UgV1RGOjpM
b2NrIGZpdCBpbiB0d28gYml0cyBpcyB0aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkgd291bGQg
ZXZlbnR1YWxseSBuZWVkIHRvIHN0dWZmIG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91cyBiaXRz
IG9mIHRoZQorICAgICAgICBKU0NlbGwgaGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUsIGJlY2F1
c2UgdGhlIGNvbmN1cnJlbnQgR0MgaGFzIG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29uZGl0aW9u
cyBpbiB2aXNpdENoaWxkcmVuIHRoYXQgY2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBlYWNoIG9i
amVjdCBqdXN0IGhhcyBhbgorICAgICAgICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwgdHlwZXMg
bWlnaHQgdXNlIGl0IHRvIHNpbXBseSBwcm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENoaWxkcmVu
CisgICAgICAgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZpZWxkcyBp
dCB0b3VjaGVzLCB3aGlsZSBvdGhlciBjZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVzZSBpdCBh
cyBhICJsb2NrIG9mIGxhc3QgcmVzb3J0IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9mIGFuIG90
aGVyd2lzZSB3YWl0LWZyZWUgb3IKKyAgICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4gUmlnaHQg
bm93LCBpdCdzIHVzZWQgdG8gcHJvdGVjdCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBpbnZvbHZp
bmcKKyAgICAgICAgaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2Ug
dGhpcyBoYXBwZW4sIEkgZmFjdG9yZWQgdGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50byBhIExv
Y2tBbGdvcml0aG0gc3RydWN0IHRoYXQKKyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24gbG9jayB0
eXBlICh1aW50OF90IGZvciBXVEY6OkxvY2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgxIGZvcgor
ICAgICAgICBXVEY6OkxvY2spLCBhbmQgdGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBmb3IgV1RG
OjpMb2NrKS4gVGhpcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBhcworICAgICAgICBhIHRlbXBsYXRp
emVkIExvY2sgY2xhc3MgdGhhdCBiYXNpY2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tUeXBlPi4g
WW91IGNvdWxkIHRoZW4gbWFrZQorICAgICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sgYnkgYml0
d2lzZV9jYXN0aW5nIGl0IHRvIFRlbXBsYXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBiaXQyPi4g
QnV0CisgICAgICAgIHRoaXMgZmVsdCB0b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tBbGdvcml0
aG0gaGFzIHN0YXRpYyBtZXRob2RzIHRoYXQgdGFrZQorICAgICAgICBBdG9taWM8TG9ja1R5cGU+
JiBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMgaXQgbW9y
ZSBuYXR1cmFsIHRvCisgICAgICAgIHByb2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8gYW4gZXhp
c3RpbmcgQXRvbWljPD4gZmllbGQuIFNhZGx5LCBzb21lIHBsYWNlcyBoYXZlIHRvIGNhc3QKKyAg
ICAgICAgdGhlaXIgbm9uLUF0b21pYzw+IGZpZWxkIHRvIEF0b21pYzw+IGluIG9yZGVyIGZvciB0
aGlzIHRvIHdvcmsuIExpa2Ugc28gbWFueSBvdGhlciB0aGluZ3MKKyAgICAgICAgd2UgZG8sIHRo
aXMganVzdCBzaG93cyB0aGF0IHRoZSBDKysgc3R5bGUgb2YgbGFiZWxpbmcgZmllbGRzIHRoYXQg
YXJlIHN1YmplY3QgdG8gYXRvbWljCisgICAgICAgIG9wcyBhcyBhdG9taWMgaXMgY291bnRlcnBy
b2R1Y3RpdmUuIE1heWJlIHNvbWUgZGF5IEknbGwgY2hhbmdlIExvY2tBbGdvcml0aG0gdG8gdXNl
IG91cgorICAgICAgICBvdGhlciBBdG9taWNzIEFQSSwgd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBB
dG9taWM8Pi4KKyAgICAgICAgCisgICAgICAgIFdURjo6TG9jayBub3cgdXNlcyBMb2NrQWxnb3Jp
dGhtLiBUaGUgc2xvdyBwYXRocyBhcmUgc3RpbGwgb3V0bGluZWQuIEkgZG9uJ3QgZmVlbCB0b28K
KyAgICAgICAgYmFkIGFib3V0IHRoZSBMb2NrQWxnb3JpdGhtLmggaGVhZGVyIGJlaW5nIGluY2x1
ZGVkIGluIHNvIG1hbnkgcGxhY2VzIGJlY2F1c2Ugd2UgY2hhbmdlCisgICAgICAgIHRoYXQgYWxn
b3JpdGhtIHNvIGluZnJlcXVlbnRseS4KKyAgICAgICAgCisgICAgICAgIEFsc28sIEkgYWRkZWQg
YSBoYXNFbGFwc2VkKHRpbWUpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGl0IHNvIG11
Y2ggbW9yZSBuYXR1cmFsCisgICAgICAgIHRvIHdyaXRlIHRpbWVzbGljaW5nIGNvZGUsIHdoaWNo
IHRoZSBjb25jdXJyZW50IEdDIGhhcyB0byBkbyBhIGxvdCBvZi4KKworICAgICAgICAqIFdURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAg
ICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1
bmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3cpOgor
ICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwpOiBEZWxldGVkLgorICAgICAg
ICAqIHd0Zi9Mb2NrLmg6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAgICAgICAg
KFdURjo6TG9ja0Jhc2U6OnRyeUxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2Nr
KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseSk6CisgICAgICAgIChXVEY6
OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
TG9ja0FsZ29yaXRobS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9j
a0Zhc3RBc3N1bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrRmFz
dCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2spOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5s
b2NrRmFzdEFzc3VtaW5nWmVybyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9j
a0Zhc3QpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2spOgorICAgICAgICAo
V1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAoV1RGOjpMb2NrQWxn
b3JpdGhtOjppc0xvY2tlZCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tTbG93
KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAgICAgICog
d3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHA6CisgICAgICAgIChXVEY6Omhhc0VsYXBz
ZWQpOgorICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDoKKwogMjAxNi0x
MS0xMCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgQVNTRVJU
SU9OIEZBSUxFRDogbGVuZ3RoID4gb2Zmc2V0IGVuY291bnRlcmVkIHdpdGggd2FzbS55YW1sL3dh
c20vanMtYXBpL3Rlc3RfTW9kdWxlLmpzLmRlZmF1bHQtd2FzbQpJbmRleDogU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2
ICsyMiw3IEBACiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0
MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAq
LzsgfTsKKwkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3
RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIw
MEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVy
cmFibGVSZWZDb3VudGVkLmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBG
bGlwQnl0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzNTAx
NjQxQkIyNThENTAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFr
UmFuZG9tLmggKi87IH07CkBAIC0zNzQsNiArMzc1LDcgQEAKIAogLyogQmVnaW4gUEJYRmlsZVJl
ZmVyZW5jZSBzZWN0aW9uICovCiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3Vu
dGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1Myw2ICs5
NTUsNyBAQAogCQkJCUE4QTQ3MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICov
LAogCQkJCTBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKIAkJCQkwRkUx
NjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovLAorCQkJCTBGMEZDREREMUREMTY3Rjkw
MENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEy
M0ZGIC8qIExvY2tlci5oICovLAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dn
aW5nQWNjdW11bGF0b3IuaCAqLywKIAkJCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYgLyogTWFp
blRocmVhZC5jcHAgKi8sCkBAIC0xMzIzLDYgKzEzMjYsNyBAQAogCQkJCUE4QTQ3MzlCMTUxQTgy
NUIwMDQxMjNGRiAvKiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTE1NTU2RjYxOEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDNBMTUxQTgyNUIwMDQxMjNGRiAvKiBDU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9j
a0FsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUQxNTFBODI1QjAwNDEyM0ZG
IC8qIEN1cnJlbnRUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RjE1MUE4MjVCMDA0
MTIzRkYgLyogRGF0YUxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTExNTFBODI1QjAw
NDEyM0ZGIC8qIERhdGVNYXRoLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0F0b21pY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDYgKzEwNiwzNiBAQCBzdHJ1Y3QgQXRvbWljIHsKICAgICBBTFdBWVNfSU5MSU5FIFQg
ZXhjaGFuZ2VYb3IoVSBvcGVyYW5kLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVt
b3J5X29yZGVyX3NlcV9jc3QpIHsgcmV0dXJuIHZhbHVlLmZldGNoX3hvcihvcGVyYW5kLCBvcmRl
cik7IH0KICAgICAKICAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2UoVCBuZXdWYWx1ZSwgc3Rk
OjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVy
biB2YWx1ZS5leGNoYW5nZShuZXdWYWx1ZSwgb3JkZXIpOyB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb25SZWxh
eGVkKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVl
OworICAgICAgICBmdW5jKG5ld1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5n
ZVdlYWtSZWxheGVkKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rpb25SZWxheGVk
KGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYXRpb25S
ZWxheGVkKGZ1bmMpKSB7IH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlUcmFuc2FjdGlvbihjb25zdCBGdW5jJiBmdW5jKQor
ICAgIHsKKyAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKKyAgICAgICAgZnVuYyhuZXdWYWx1
ZSk7CisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1
ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgdHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHdo
aWxlICghdHJ5VHJhbnNhY3Rpb24oZnVuYykpIHsgfQorICAgIH0KIAogICAgIHN0ZDo6YXRvbWlj
PFQ+IHZhbHVlOwogfTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0
SGFzaFNldC5oCiAgICAgTG9jay5oCisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgK
ICAgICBNRDUuaAogICAgIE1haW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAy
MDg1OTIpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzcsMTAgKzE3NywxMSBAQCBMaXN0RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6
c29ydGVkTGlzdER1bXA7Cit1c2luZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RG
OjptYXBEdW1wOwordXNpbmcgV1RGOjpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRl
ZExpc3REdW1wOwogdXNpbmcgV1RGOjpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVt
cEluQ29udGV4dDsKIAogI2VuZGlmIC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93
dGYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlz
aW9uIDIwODU5MikKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiwxMjAgKzI2LDIxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5o
IgogCi0jaW5jbHVkZSAiRGF0YUxvZy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNs
dWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMu
aCIKLSNpbmNsdWRlIDx0aHJlYWQ+Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3Qg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2Nr
U2xvdygpCit2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNv
dW50ID0gMDsKLQotICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRp
bWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWdu
ZWQgc3BpbkxpbWl0ID0gNDA7Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90
IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5n
IHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93
IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAm
IGlzSGVsZEJpdCkKLSAgICAgICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1
cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdl
IGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgot
ICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291
bnQgPCBzcGluTGltaXQpIHsKLSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAg
c3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhl
IHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAg
ICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0
aW5nIGl0LgotICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQot
ICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFs
dWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhh
c1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAg
ICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2lu
Z0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsK
LSAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBj
YXNlIERpcmVjdEhhbmRvZmY6Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVy
IHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhh
dCBkaWQKLSAgICAgICAgICAgICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25l
IQotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNh
bGxlZCB1bmxvY2soKSBoYXMgcmVsZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8g
YW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5p
dHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFk
cyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFu
ZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJl
Y2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAg
ICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0
aG06OmxvY2tTbG93KG1fYnl0ZSk7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQog
ewotICAgIHVubG9ja1Nsb3dJbXBsKFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06
OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAog
dm9pZCBMb2NrQmFzZTo6dW5sb2NrRmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwo
RmFpcik7Ci19Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChG
YWlybmVzcyBmYWlybmVzcykKLXsKLSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRo
ZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVy
ZSBpcwotICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVu
IGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUg
aGVsZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFy
ZSB1bmxvY2tpbmcuCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1
ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9
PSBpc0hlbGRCaXQgfHwgb2xkQnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0g
ICAgICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFNvbWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhy
ZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJl
Y3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1
bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3
ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg
dGhlcmUgYXJlIHN0aWxsCi0gICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAg
ICBBU1NFUlQob2xkQnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAg
ICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAg
ICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3Qg
ewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFy
IGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAg
ICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAg
ICAgICAgICAgICAgICBBU1NFUlQobV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5k
aWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFp
cikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJ
bnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAg
ICAgICAgICAgICAgLy8gd2FpdGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVj
dEhhbmRvZmY7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC5tYXlIYXZlTW9yZVRocmVhZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZSho
YXNQYXJrZWRCaXQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bV9ieXRlLnN0b3JlKDApOwotICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5p
dHk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0
TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpG
YWlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg1OTIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcg
QEAKICNpZm5kZWYgV1RGX0xvY2tfaAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3
dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCkBAIC0zNyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwog
CiBuYW1lc3BhY2UgV1RGIHsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+
IERlZmF1bHRMb2NrQWxnb3JpdGhtOworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0
ZXggdGhhdCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRo
cyB0aGF0IGFyZQogLy8gY29tcGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9j
a2luZyBpcyBpbmxpbmVkIGFuZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8v
IGhhbmRsZWQgYnkgc3Bpbm5pbmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQg
aXMgY29tcGV0ZXRpdmUgdG8gc3RkOjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMg
QEAgbmFtZXNwYWNlIFdURiB7CiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAg
ICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlz
SGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBM
b2NrIGFjcXVpcmVkIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
bG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6
bG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwog
ICAgIH0KIAogICAgIGJvb2wgdHJ5TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0g
ICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAg
ICAgICAgICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZh
dWx0TG9ja0FsZ29yaXRobTo6dHJ5TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQg
dGhpcyB2ZXJzaW9uIGZvciBzdGQ6OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3Ry
dWN0IExvY2tCYXNlIHsKICAgICAvLyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0
aW9ucyBhbHdheXMgZ2V0IGEgZmFpciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAw
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVs
ZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZh
dWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAg
ICAgICAgIHVubG9ja1Nsb3coKTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2Nr
KCkgYnV0IGl0IGd1YXJhbnRlZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Ig
c2hvcnQgY3JpdGljYWwKQEAgLTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAg
ICAvLyB3YW50LgogICAgIHZvaWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChM
SUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5v
Ym9keSB3YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVubG9ja0ZhaXJseVNsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9j
a0FsZ29yaXRobTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAg
IHVubG9ja0ZhaXJseVNsb3coKTsKICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSkgJiBpc0hlbGRCaXQ7CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNM
b2NrZWQobV9ieXRlKTsKICAgICB9CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEy
NiwyMSArMTA5LDEwIEBAIHByb3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBpc0hlbGRCaXQgPSAxOwogICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9
IDI7Ci0KKyAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCB1bmxvY2tGYWlybHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7
Ci0gICAgICAgIEZhaXIsCi0gICAgICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tT
bG93SW1wbChGYWlybmVzcyk7Ci0gICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdp
bmdPcHBvcnR1bml0eSwKLSAgICAgICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBN
ZXRob2QgdXNlZCBmb3IgdGVzdGluZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dU
Ri93dGYvTG9ja0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBXVEZfTG9ja0FsZ29yaXRobV9oCisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2lu
Y2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9D
b21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYg
eworCisvLyBUaGlzIGlzIHRoZSBhbGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBs
YXRlPHR5cGVuYW1lIExvY2tUeXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1Bh
cmtlZEJpdD4KK2NsYXNzIExvY2tBbGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZl
cmJvc2UgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJp
dCB8IGhhc1BhcmtlZEJpdDsKKworcHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNz
dW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
bG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJf
YWNxdWlyZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxM
b2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2su
bG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYg
aXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3Rk
OjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxv
Y2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
bG9ja0Zhc3QobG9jaykpKQorICAgICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBib29sIHRyeUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7
CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1
ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlm
IChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5
dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJf
YWNxdWlyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlw
ZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFr
KGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBib29sIHVubG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7
CisgICAgICAgIExvY2tUeXBlIG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGF4ZWQpOworICAgICAgICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWlj
PExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFz
dChsb2NrKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2Nr
KQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAg
ICAgICAgIHVubG9ja1Nsb3cobG9jaywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBi
b29sIGlzTG9ja2VkKGNvbnN0IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAg
ICByZXR1cm4gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0
OworICAgIH0KKyAgICAKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9
IDA7CisKKyAgICAgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGlt
YWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAg
ICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShj
dXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29t
cGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNI
ZWxkQml0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2Fu
IGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVW
YWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAg
ICAgICAgICAgc3BpbkNvdW50Kys7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtl
ZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAg
ICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGlu
ZyBpdC4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQp
CisgICAgICAgICAgICAgICAgJiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0
ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8g
YmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBw
YXJrLgorICAgICAgICAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAg
ICAgICAgICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5
dGVWYWx1ZSB8IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFy
a1Jlc3VsdC53YXNVbnBhcmtlZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nh
c3Q8VG9rZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJl
Y3RIYW5kb2ZmOgorICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVs
ZWFzZWQuIEl0IHdhcyBoYW5kZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRp
ZAorICAgICAgICAgICAgICAgICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25l
IQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdP
cHBvcnR1bml0eToKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNh
c2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2Nr
LAorICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRo
YXQgd2UgbWF5IGdldCBhbiBvcHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRo
YXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBi
eXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFy
b3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFp
cm5lc3MgeworICAgICAgICBGYWlyLAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVS
X0lOTElORSBzdGF0aWMgdm9pZCB1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZh
aXJuZXNzIGZhaXJuZXNzKQorICAgIHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVj
YXVzZSB0aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1
c2UgdGhlcmUgaXMKKyAgICAgICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FT
IGxvb3A6IGV2ZW4gaWYgcmlnaHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQK
KyAgICAgICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9j
ayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAg
ICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNI
ZWxkQml0CisgICAgICAgICAgICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5
dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCBvbGRCeXRlVmFsdWUgJiB+aXNIZWxk
Qml0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4g
VW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0
aHJlYWQKKyAgICAgICAgICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9jayB0aGUgbG9j
ayBhdCB0aGUgc2FtZSB0aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFyZ2luZy4KKyAg
ICAgICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQg
c2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCisgICAgICAgICAg
ICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KKyAgICAgICAgICAgIEFTU0VSVCgob2xkQnl0ZVZh
bHVlICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAg
UGFya2luZ0xvdDo6dW5wYXJrT25lKAorICAgICAgICAgICAgICAgICZsb2NrLAorICAgICAgICAg
ICAgICAgIFsmXSAoUGFya2luZ0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3Qg
eworICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBj
bGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAorICAgICAgICAg
ICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmlnaHQg
bm93LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoKGxvY2subG9hZCgpICYgbWFzaykgPT0g
KGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFp
ciB8fCByZXN1bHQudGltZVRvQmVGYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRo
ZSB0aHJlYWQgdGhhdCB3YXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbG9j
ay50cmFuc2FjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFy
Z2luZ09wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIFRva2VuIHsKKyAg
ICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAorICAgICAgICBEaXJlY3RIYW5kb2ZmCisgICAgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkxvY2tBbGdvcml0aG07CisK
KyNlbmRpZiAvLyBXVEZfTG9ja0FsZ29yaXRobV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NTkyKQorKysgU291cmNl
L1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksOSBAQAogI2luY2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2suaCIK
ICNpbmNsdWRlICJQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRlIDxj
bWF0aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAt
MTI4LDYgKzEzMSwxNyBAQCB2b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
CiAgICAgZmFrZUNvbmRpdGlvbi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCitib29s
IGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQoreworICAg
IC8vIEF2b2lkIGRvaW5nIG5vdygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1lQ2xv
Y2tBbmRSYXdTZWNvbmRzKDApKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0ZDo6
aXNpbmYodGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2NrKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oCShyZXZpc2lvbiAyMDg1OTIpCisrKyBTb3VyY2UvV1RGL3d0
Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDggKzEz
NCwxMiBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25zdCBU
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFz
RWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKIHVzaW5nIFdURjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcgV1RG
OjpoYXNFbGFwc2VkOwordXNpbmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294623</attachid>
            <date>2016-11-12 11:35:57 -0800</date>
            <delta_ts>2016-11-13 19:34:08 -0800</delta_ts>
            <desc>rebased and fixed</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>252284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDcgQEAKIAkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNw
cCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87
IH07CisJCTBGQURERDFEMUREMDFFREUwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFEREQxQzFE
RDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovOyB9OwogCQkwRkFERTY3
MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRp
bC5oICovOyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3
RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFG
N0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMwMDksNiArMzAxMCw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bWVUaGVXb3JsZFNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0
NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01Njk2LDYgKzU2OTgsNyBAQAogCQkJCTBGQTc2MjAzMURCOTI0MjMw
MEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAv
KiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCisJCQkJMEZBREREMUMxREQwMUVEQzAwODI3
NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2
NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0My
QyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBT
bG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTc5MzMsNiArNzkzNiw3IEBACiAJCQkJMEZGQjky
MUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJz
ZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQURERDFEMUREMDFFREUwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzNEMkIwQTFE
MzQzMTYyMDBCQTkxOEMgLyogSGVhcENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZD
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDA5OCw3ICsxMDEwMiw2IEBACiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZG
IC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUx
RDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJ
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENy
YXMKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwogCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gdmFsdWU7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0
LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHZhbHVlKTsKICAgICAg
ICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1
b3VzU2hhcGUpKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGxpbmtDb2RlSW5saW5lCiBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0pOwotCisgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFs
dWVSZWdzKCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkp
OwogICAgICAgICBzdG9yYWdlID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgIH0KLQorICAgIAog
ICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCB2YWx1ZSk7CiAKQEAgLTI2NSw3ICsy
NjUsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRj
aCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CiAKLSAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgaml0LmFuZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHNj
cmF0Y2gpOwogICAgIGF1dG8gYnJhbmNoVG9TbG93UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYXJyYXktPmluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwotICAgICAg
ICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAg
ICBqaXQuYnJhbmNoVGVzdDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywg
c2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93
UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI0LDcgKzEyNCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlIG9wZXJh
dGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRl
ZC4KICAgICAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBu
b3QgdXNlci12aXNpYmxlLgogICAgICAgICAgICAgaml0LT5tX2ppdC5sb2FkOCgKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlT2Zmc2V0KCkpLCBtX3N0cnVjdHVyZUdQUik7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmVHUFIpOwogICAgICAgICAgICAg
bV9iYWRJbmRleGluZ1R5cGVKdW1wLmZpbGwoCiAgICAgICAgICAgICAgICAgaml0LCBqaXQtPmp1
bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUobV9zdHJ1Y3R1cmVHUFIsIG1fYXJyYXlNb2RlKSk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSw3IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsgLy8gVGhp
cyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJl
SUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAgICAgICAgd3JpdGUo
SlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoMSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNj
cmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIo
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gy
LCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NP
ZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3Nl
bWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gxLCBhcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAg
ICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAg
bV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJy
YXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTA2LDkgKzUwNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2UKICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpIHsKICAgICAgICAgSlNDZWxs
KiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogCi0gICAgICAgIGlmIChwcm9wZXJ0eS5pc1VJ
bnQzMigpKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eS5pc1VJbnQzMigpKQogICAgICAgICAgICAg
cmV0dXJuIGdldEJ5VmFsKGV4ZWMsIGJhc2UsIHByb3BlcnR5LmFzVUludDMyKCkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJv
cGVydHkuaXNEb3VibGUoKSkgewogICAgICAgICAgICAgZG91YmxlIHByb3BlcnR5QXNEb3VibGUg
PSBwcm9wZXJ0eS5hc0RvdWJsZSgpOwogICAgICAgICAgICAgdWludDMyX3QgcHJvcGVydHlBc1VJ
bnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eUFzRG91YmxlKTsKICAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eUFzVUludDMyID09IHByb3BlcnR5QXNEb3VibGUgJiYgaXNJbmRleChw
cm9wZXJ0eUFzVUludDMyKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkg
UGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9p
ZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAg
aWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdp
dGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVk
IHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJs
b2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkp
OworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQor
Cit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tu
b3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29t
cGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVy
Zm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBl
c3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0
IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0
ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFy
cmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVy
KGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6Omhl
YXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxv
Y2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7
CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90Vmlz
aXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVj
a0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93
blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MzgsNyArODM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Nl
bGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChiYXNlUmVnKSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9yVW53YW50
ZWRBcnJheU1vZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwMiw3ICs5MDIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAgICAgICAg
ICBub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0LmxvYWQ4
KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCB0ZW1wR1BSKTsKICAgICAgICAgCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wU2xvd0Zv
clVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAgICAgfQpA
QCAtNjkxMyw3ICs2OTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChO
b2RlKgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAg
ICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxs
OjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
QW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5hbmQzMihUcnVz
dGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0
LnN1YjMyKFRydXN0ZWRJbW0zMihJbnQzMlNoYXBlKSwgc2NyYXRjaDFHUFIpOwogCkBAIC02OTMz
LDcgKzY5MzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAKLSAgICAgICAgbV9qaXQu
bG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZz
ZXQoKSksIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKElu
ZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaDJHUFIpOwogICAgICAgICBhdXRvIGlzRG91YmxlQXJy
YXkgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gyR1BSLCBU
cnVzdGVkSW1tMzIoRG91YmxlU2hhcGUpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgp
KQogICAgICAgICAgICAgbGV2ZWwgPSBGVEw6OkNhbkNvbXBpbGU7Ci0KKyAgICAgICAgCiAgICAg
ICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIE5hdHVyYWxMb29wcyYg
bmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9uYXR1cmFsTG9vcHM7CiAgICAgICAgIEhhc2hNYXA8
Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50ID0gYnVp
bGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAobmF0dXJhbExvb3BzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR1dvcmts
aXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHU2FmZXBvaW50Lmgi
CkBAIC0zOCw2ICszNiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAor
I2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1Ymxp
YyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZEJvZHkoY29uc3QgTG9ja0hv
bGRlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxM
b2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24sIGlu
dCByZWxhdGl2ZVByaW9yaXR5KQpAQCAtMzQ5LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmtsaXN0Ojpj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
dm0pOwogfQogCit2b2lkIFdvcmtsaXN0OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAg
ICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0g
bV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2NrcyhzbG90VmlzaXRvcik7CisgICAgfQor
fQorCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwpAQCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQgV29ya2xp
c3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0KICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgICAgICBw
bGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0pOwogICAgIH0KIH0KIApAQCAtNTUzLDYgKzU2NCwx
NCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQogCit2b2lk
IG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAg
ICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RG
b3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJsb2Nrcyh2
bSwgc2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0m
IHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsg
aS0tOykgewpAQCAtNTYxLDcgKzU4MCwyMiBAQCB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0pCiAgICAgfQogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisjZWxzZSAvLyBFTkFC
TEUoREZHX0pJVCkKKwordm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQoreworfQorCit2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2b2lkIHJlbWVt
YmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHUGxh
bi5oIgogI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGlj
VGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3Bh
Y2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7IE5vdEtu
b3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07CkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAg
ICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQg
Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFZN
JiwgU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogCiAg
ICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2Myw5ICsx
NjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQogICAgIHJl
dHVybiAqcmVzdWx0OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKIHZvaWQgY29t
cGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZp
c2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
Y3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQg
QEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwbwogICAgICwgYWJzb2x1
dGUoJnJvb3QsICJhYnNvbHV0ZSIpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxp
Y2l0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBTdHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4K
LSAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6
ZW9mKGludDMyX3QpIC0gMSkpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdU
eXBlLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMiA9PSBKU0NlbGxf
dHlwZUluZm9GbGFncy5vZmZzZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4
aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSAmIChz
aXplb2YoaW50MzJfdCkgLSAxKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGlu
Z1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQo
KSArIDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2Vs
bFN0YXRlLm9mZnNldCgpKTsKIAogICAgIEpTQ2VsbF9zdHJ1Y3R1cmVJRC5jaGFuZ2VQYXJlbnQo
JkpTQ2VsbF9oZWFkZXIpOwogICAgIEpTQ2VsbF91c2VmdWxCeXRlcy5jaGFuZ2VQYXJlbnQoJkpT
Q2VsbF9oZWFkZXIpOwotICAgIEpTQ2VsbF9pbmRleGluZ1R5cGUuY2hhbmdlUGFyZW50KCZKU0Nl
bGxfdXNlZnVsQnl0ZXMpOworICAgIEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9UeXBlLmNoYW5n
ZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5j
aGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5j
aGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSkgXAogICAgIG1hY3JvKEpTQ2Vs
bF9jZWxsU3RhdGUsIEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Nl
bGxfaGVhZGVyLCAwKSBcCi0gICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRN
aXNjLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCiAgICAgbWFj
cm8oSlNDZWxsX3R5cGVJbmZvRmxhZ3MsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSBc
CiAgICAgbWFjcm8oSlNDZWxsX3R5cGVJbmZvVHlwZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSkgXAotICAgIG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX2V4ZWN1dGFi
bGUsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSBcCiAgICAgbWFjcm8oSlNGdW5j
dGlvbl9zY29wZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpIFwKICAgICBtYWNy
byhKU0Z1bmN0aW9uX3JhcmVEYXRhLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24g
MjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgICAg
IENvbW1hUHJpbnRlciBjb21tYTsKICAgICAgICAgZGF0YUxvZyhjb21tYSwgbV9iM0NvZGUpOwog
ICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50KTsKKyAgICAgICAg
ZGF0YUxvZygiXG4iKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjc4Niw2ICsyNzg2LDEzIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlUHV0U3RydWN0dXJl
KCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBp
bGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25v
ZGUpOworICAgICAgICAKKyAgICAgICAgRmVuY2VWYWx1ZSogZmVuY2UgPSBtX291dC5mZW5jZSgp
OworICAgICAgICAvLyBXZSBjb3VsZCBkZWNvcmF0ZSB0aGlzIHdpdGggdGhlIHVuaW9uIG9mIGJ1
dHRlcmZseSBhbmQgc3RydWN0dXJlLCBidXQgdGhpcyB3b24ndAorICAgICAgICAvLyBoZWxwIHRo
YXQgbXVjaC4gUHJlY2lzZSByZWFkIGFjY291bnRpbmcgaXMgbW9zdGx5IGZvciBzdG9yZSBlbGlt
aW5hdGlvbiBhbmQgaWYgdGhpcworICAgICAgICAvLyByZWFkcyBzdHJ1Y3R1cmUgdGhlbiBpdCds
bCBibG9jayB0aGF0IHN0b3JlIGVsaW1pbmF0aW9uLiBXZSByZWFsbHkgd2FudCB0byBiZSBhYmxl
CisgICAgICAgIC8vIHRvIHB1dCBhIHJlbGVhc2UgZmxhZyBvbiB0aGUgc3RvcmUgYmVsb3cuCisg
ICAgICAgIGZlbmNlLT53cml0ZSA9IEhlYXBSYW5nZSgpOwogCiAgICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwogICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwpAQCAt
NDQxNyw3ICs0NDI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1No
YXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoYXJndW1lbnQsIG1faGVhcHMuSlNDZWxsX2luZGV4
aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdTaGFwZSA9IG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGFyZ3VtZW50LCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjKTsK
ICAgICAgICAgICAgIGluZGV4aW5nU2hhcGUgPSBtX291dC5iaXRBbmQoaW5kZXhpbmdTaGFwZSwg
bV9vdXQuY29uc3RJbnQzMihJbmRleGluZ1NoYXBlTWFzaykpOwogICAgICAgICAgICAgTFZhbHVl
IGlzT0tJbmRleGluZ1R5cGUgPSBtX291dC5iZWxvd09yRXF1YWwoCiAgICAgICAgICAgICAgICAg
bV9vdXQuc3ViKGluZGV4aW5nU2hhcGUsIG1fb3V0LmNvbnN0SW50MzIoSW50MzJTaGFwZSkpLApA
QCAtNTIyOSw2ICs1MjM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0
aW9ucy5hZGRMYXppbHkoCiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAg
dmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwpAQCAtNTIzNiw3ICs1MjQ0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3Rv
cmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2
YXJpYW50Lm9mZnNldCgpLAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVy
ZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFn
ZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLT5pbmRleGluZ1R5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlh
bnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlw
ZUluZm8oKS50eXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBl
KCkpOwpAQCAtNTI0NCw3ICs1MjU2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
d2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTk0Myw3ICsxMTk1NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRl
eGluZ1R5cGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRl
eGluZ1R5cGUpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxl
U3R1YigKICAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5i
YXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5m
bzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
LSAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5m
bzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86
OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMy
KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9y
MzIoR1BSSW5mbzo6cmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQ
cm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDggQEAg
ZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50OF90IHsKICAgICAvLyBUaGUgb2JqZWN0IGlzIGlu
IGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVu
IG1hcmtlZCB5ZXQuCiAgICAgTmV3V2hpdGUgPSAxLAogCi0gICAgLy8gVGhlIG9iamVjdCBpcyBn
cmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSBpbiB0aGlzIEdDIHRoYXQgd2UgYXJlCi0gICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4gSWYgdGhp
cyBpcyBhbiBlZGVuIEdDLCB0aGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGVk
ZW4uCi0gICAgTmV3R3JleSA9IDIsCi0KLSAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUu
IGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGJ1dCBpdCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChp
ZiB0aGlzIGlzIGVkZW4KLSAgICAvLyBHQykgb3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGlu
IHRoaXMgY3VycmVudCBHQyAoYmVjYXVzZSBhIGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1
ZXN0ZWQKLSAgICAvLyByZS1ncmV5aW5nKS4KLSAgICBPbGRHcmV5ID0gMworICAgIC8vIFRoZSBv
YmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkLgorICAgIEdyZXkgPSAyLAog
fTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBi
bGFja1RocmVzaG9sZCBtZWFucyB4IGlzIEFudGhyYWNpdGVPckJsYWNrLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkocmV2aXNpb24gMjA4
NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtMTYyLDMgKzE2NCw0IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OCw2ICs3OCwzNSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorY2xhc3MgSGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZSB7CitwdWJsaWM6CisgICAg
UmVzdW1lVGhlV29ybGRTY29wZShIZWFwJiBoZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQor
ICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAg
ICAgICAgICAgZGF0YUxvZygoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGlt
ZSkubWlsbGlzZWNvbmRzKCksICIgbXMuLi5dXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGVh
cC5yZXN1bWVUaGVXb3JsZCgpOworICAgIH0KKyAgICAKKyAgICB+UmVzdW1lVGhlV29ybGRTY29w
ZSgpCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkp
CisgICAgICAgICAgICBtX2hlYXAuc3RvcFRoZVdvcmxkKCk7CisKKyAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisK
IG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICog
TUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwg
bV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6
bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3Rk
OjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04p
CiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwg
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIg
KzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZv
aWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmco
KQpAQCAtNDM5LDExNyArNDcxLDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMo
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRl
QWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAK
LXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtS
b290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2Nv
cGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50
Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNp
dG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdl
bmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNl
Iik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkg
eworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2st
PmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVt
ZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0j
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGls
IHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIn
cyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGlu
Z1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUK
LSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5j
ZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lk
ZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNz
VW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVs
bCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5N
YXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhp
c10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFi
bGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RG
TW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0
b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNl
dEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmICht
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3
VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
bG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChH
Q1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQo
R0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNp
dG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygp
OwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpz
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0
b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAg
ICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBk
b3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91Ymxl
IHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlh
bFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMi
LCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0g
dG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAv
LyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZp
eHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5z
dXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAgICAg
Ly8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBp
dCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRoYXQg
d2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAgICAg
ICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgICAg
ICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMoaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNp
dG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0SGFuZGxl
U3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7
Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tl
bigpOwotICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAg
ICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWlu
KTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2Nv
cGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8v
IFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5l
c3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2Jq
ZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAg
ICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25T
Y29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgIGhlYXBSb290Vmlz
aXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtM
aXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwor
ICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAg
ICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCisgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0
byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAg
IHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAg
ICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpOworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNl
cnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUK
KyAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3Vy
ZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28g
dGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28s
IHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sg
LSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28g
d2FudCB0byBkbyB0aGlzCisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0
aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0
CisgICAgICAgIC8vIEdDLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1f
dm0pOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFj
a3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFk
KQorICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIu
CisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
IAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOwor
ICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQo
U2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYg
KGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewor
ICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5k
RHJhaW4oKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZy
b21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRp
bWVUb1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQog
CiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRl
eCk7CkBAIC01NjMsNyArNjQyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IHJvb3RzKQogewotICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9t
YWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJv
dXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0KIApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVh
cDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxD
b2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAK
ICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywg
Im1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lk
IEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Ns
b3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlz
aXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9z
bG90VmlzaXRvci5hcHBlbmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFw
cGVuZChyb290cyk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBk
YXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKKyAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICNlbmRpZgogfQogCkBAIC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFw
OjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2
aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBS
b290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0
czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQt
PnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1h
cmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1
ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxh
c3RFeGNlcHRpb24oKSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25n
IEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJv
ZmlsZXIoKQotewotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
ewotICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkp
OwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQot
ewotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJv
ZmlsZXJMb2coKS0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUg
UHJvZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hh
ZG93Q2hpY2tlbigpCi17Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
bV9zbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCkKLXsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMobV9zbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1
YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25h
dGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzIik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHModmlzaXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7
Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAg
IGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAg
ICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RD
b3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xv
dFZpc2l0b3IudmlzaXRDb3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0
aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9i
amVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkg
LSBnY1N0YXJ0VGltZSk7CiAgICAgfQpAQCAtODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAw
OwogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0
ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkVGhpc0N5Y2xlID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNp
dGVkKCkgKworICAgICAgICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFs
Qnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQg
SGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAg
IG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBI
ZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsK
ICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpB
bnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBn
cmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdy
ZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4g
b2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMg
d2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0
d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAg
Ly8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJs
YWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21l
IHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcg
cGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0
IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVj
dG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2Jq
ZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29t
ZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVu
Zm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2st
PmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0x
MDk0LDI0ICsxMDQwLDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAg
ICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25p
Y1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFM
b2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9
IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0
eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFC
TEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwot
ICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1f
dm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgp
LT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24g
c2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7
CkBAIC0xMTMxLDEyICsxMDY3LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAg
ICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpC
ZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7
Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3Rz
KGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAg
IAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVP
YmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzEx
MDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1l
TVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAg
ICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRh
dGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIs
IChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQog
ICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzExMjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29y
bGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygp
OwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOwor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1f
b2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogewor
ICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24g
Y3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0
aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBu
by1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAg
ICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3lj
bGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3Bh
Y2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKQEAgLTE0MDgsMjMgKzEzNjQsMTggQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxp
emUoKQogCiB2b2lkIEhlYXA6OnNldEdDRGlkSklUKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQob2xkU3RhdGUgJiBzdG9wcGVkQml0KTsKLSAgICAgICAgaWYgKG1fd29ybGRT
dGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSB8IGdjRGlkSklUQml0
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0
aW9uKAorICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhdGUgJiBzdG9wcGVkQml0KTsKKyAgICAgICAgICAgIHN0YXRlIHw9IGdjRGlk
SklUQml0OworICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpzZXROZWVkRmluYWxpemUoKQog
ewotICAgIGZvciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3Rh
dGUubG9hZCgpOwotICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWso
b2xkU3RhdGUsIG9sZFN0YXRlIHwgbmVlZEZpbmFsaXplQml0KSkgewotICAgICAgICAgICAgbV9z
dG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobmVlZEZpbmFs
aXplQml0KTsKKyAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAg
bV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7CiB9CiAKIHZvaWQgSGVhcDo6
d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKQEAgLTE0NDEsMjMgKzEzOTIsMTQgQEAgdm9pZCBIZWFw
Ojp3YWl0V2hpbGVOZWVkRmluYWxpemUoKQogICAgIH0KIH0KIAotdW5zaWduZWQgSGVhcDo6c2V0
TXV0YXRvcldhaXRpbmcoKQordm9pZCBIZWFwOjpzZXRNdXRhdG9yV2FpdGluZygpCiB7Ci0gICAg
Zm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2Fk
KCk7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YXRlID0gb2xkU3RhdGUgfCBtdXRhdG9yV2FpdGlu
Z0JpdDsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0
YXRlLCBuZXdTdGF0ZSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgfQorICAg
IG1fd29ybGRTdGF0ZS5leGNoYW5nZU9yKG11dGF0b3JXYWl0aW5nQml0KTsKIH0KIAogdm9pZCBI
ZWFwOjpjbGVhck11dGF0b3JXYWl0aW5nKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVu
c2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29y
bGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5tdXRhdG9y
V2FpdGluZ0JpdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fd29ybGRTdGF0
ZS5leGNoYW5nZUFuZCh+bXV0YXRvcldhaXRpbmdCaXQpOwogfQogCiB2b2lkIEhlYXA6Om5vdGlm
eVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTQ2OSwxMCArMTQxMSwxNSBA
QCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvCiAKIHZvaWQgSGVhcDo6
ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsK
LSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwotICAgIGRlbGV0ZVNvdXJjZVByb3Zp
ZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRpb25zKCk7CisgICAgeworICAgICAg
ICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7CisgICAgICAgIGRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVz
KCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAgIH0KKyAgICAKKyAgICBp
ZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMo
KTsKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9w
ZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogfQpAQCAtMTU1NCwyMyArMTUw
MSw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAg
b2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xk
U3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRh
YmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAg
ICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAg
ICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6
OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7
CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6
OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5NTQsNyArMTg4Nyw3IEBAIGJvb2wgSGVhcDo6Y2Fu
Q29sbGVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xs
ZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8
IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRh
dG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk3NiwxMiArMTkwOSw4IEBAIGJvb2wgSGVh
cDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBt
dXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUp
Cit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQg
d2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9u
U2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRl
OjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9l
eHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk5MiwxMiArMTkyMSw4
IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNp
dGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGlu
IHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNp
emU7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0yMDkxLDQgKzIwMTYsMTEgQEAgdm9pZCBIZWFwOjpz
ZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9p
ZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0
ID0gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAg
ICBjb2xsZWN0QXN5bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUu
aCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUg
IlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1
YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGlt
ZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRT
cGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGlu
ZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQog
Ci0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9z
bG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsg
cmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNr
KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZp
dHlDYWxsYmFjaygpOwpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQg
YWRkRXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVU
b0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1h
eSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNp
emVfdCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJ
IHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUg
dGhpcyBwcm9jZXNzLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxN
ZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNp
emVfdCBleHRlcm5hbE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsg
fQogI2VuZGlmCiAKQEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRo
ZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJl
c3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0
YXRvcigpOwogICAgIApAQCAtNDEyLDcgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRO
ZWVkRmluYWxpemUoKTsKICAgICB2b2lkIHdhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwogICAgIAot
ICAgIHVuc2lnbmVkIHNldE11dGF0b3JXYWl0aW5nKCk7CisgICAgdm9pZCBzZXRNdXRhdG9yV2Fp
dGluZygpOwogICAgIHZvaWQgY2xlYXJNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgbm90aWZ5
VGhyZWFkU3RvcHBpbmcoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIApAQCAtNDIyLDMxICs0Mjgs
MTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsK
ICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7
Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7CiAgICAgdm9pZCBmbHVzaFdy
aXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKICAgICB2b2lk
IHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBtYXJrUm9vdHMoZG91YmxlIGdj
U3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7
CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9p
ZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhl
clNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5N
YXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgIHZv
aWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMo
KTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBS
b290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgdm9p
ZCB2aXNpdFR5cGVQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0g
ICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZp
c2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2lu
dChIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUg
Z2NTdGFydFRpbWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTgsNyArNTExLDgg
QEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAg
Ci0gICAgU2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
dFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAKICAgICAvLyBXZSBwb29sIHRoZSBz
bG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1
bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNl
ZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpA
QCAtNTcyLDcgKzU2Niw4IEBAIHByaXZhdGU6CiAKICAgICBMb2NrIG1fbWFya2luZ011dGV4Owog
ICAgIENvbmRpdGlvbiBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZTsKLSAgICBNYXJrU3RhY2tB
cnJheSBtX3NoYXJlZE1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJy
YXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
U3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwogICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vy
c1Nob3VsZEV4aXQgeyBmYWxzZSB9OwpAQCAtNjAwLDYgKzU5NSw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFs
bG93cyB0aGUgbXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAg
ICBBdG9taWM8dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKICAgICBib29sIG1fY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIE1vbm90b25pY1RpbWUg
bV9zdG9wVGltZTsKICAgICAKICAgICBEZXF1ZTxPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+PiBt
X3JlcXVlc3RzOwogICAgIFRpY2tldCBtX2xhc3RTZXJ2ZWRUaWNrZXQgeyAwIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYsNiArMzYsMzQgQEAgTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0Fy
cmF5KCkKIHsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6dHJhbnNmZXJUbyhNYXJrU3RhY2tB
cnJheSYgb3RoZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAg
IAorICAgIC8vIFJlbW92ZSBvdXIgaGVhZCBhbmQgdGhlIGhlYWQgb2YgdGhlIG90aGVyIGxpc3Qu
CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG15SGVhZCA9IG1fc2VnbWVudHMu
cmVtb3ZlSGVhZCgpOworICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBvdGhlckhl
YWQgPSBvdGhlci5tX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBtX251bWJlck9mU2VnbWVu
dHMtLTsKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMtLTsKKyAgICAKKyAgICBvdGhlci5t
X3NlZ21lbnRzLmFwcGVuZChtX3NlZ21lbnRzKTsKKyAgICAKKyAgICBvdGhlci5tX251bWJlck9m
U2VnbWVudHMgKz0gbV9udW1iZXJPZlNlZ21lbnRzOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9
IDA7CisgICAgCisgICAgLy8gUHV0IHRoZSBvcmlnaW5hbCBoZWFkcyBiYWNrIGluIHRoZWlyIHBs
YWNlcy4KKyAgICBtX3NlZ21lbnRzLnB1c2gobXlIZWFkKTsKKyAgICBvdGhlci5tX3NlZ21lbnRz
LnB1c2gob3RoZXJIZWFkKTsKKyAgICBtX251bWJlck9mU2VnbWVudHMrKzsKKyAgICBvdGhlci5t
X251bWJlck9mU2VnbWVudHMrKzsKKyAgICAKKyAgICB3aGlsZSAoIWlzRW1wdHkoKSkgeworICAg
ICAgICByZWZpbGwoKTsKKyAgICAgICAgd2hpbGUgKGNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAg
ICAgIG90aGVyLmFwcGVuZChyZW1vdmVMYXN0KCkpOworICAgIH0KK30KKwogdm9pZCBNYXJrU3Rh
Y2tBcnJheTo6ZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQogewogICAg
IC8vIFRyeSB0byBkb25hdGUgYWJvdXQgMSAvIDIgb2Ygb3VyIGNlbGxzLiBUbyByZWR1Y2UgY29w
eWluZyBjb3N0cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4ICszNSw5IEBAIGNsYXNzIE1hcmtTdGFja0FycmF5
IDogcHVibGljIEdDU2VnbWVudGUKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tBcnJheSgpOwogCi0g
ICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgIHZv
aWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVU
aHJlYWRDb3VudCk7CisgICAgdm9pZCB0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5Jik7CisgICAg
dm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgc3RlYWxT
b21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDcgKzEzNyw2IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWQK
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKIHsKICAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmhhc0Fu
eU5ld2x5QWxsb2NhdGVkKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsK
ICAgICAKICAgICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlOjpTd2VlcFRvRnJlZUxpc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIs
MTQgQEAgTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJgogICAgICwgbV9o
YW5kbGUoaGFuZGxlKQogICAgICwgbV92bSgmdm0pCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwogfQogCi10ZW1w
bGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rp
b25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlPgordGVtcGxhdGU8TWFy
a2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1v
ZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUg
bmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NN
b2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShkZXN0cnVjdGlvbk1vZGUgPT0gRG9lc05vdE5lZWREZXN0
cnVjdGlvbiAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IShkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzICYmIHN3ZWVwTW9kZSA9
PSBTd2VlcE9ubHkpKTsKICAgICAKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAKQEAgLTk5LDcgKzEwMSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAoT3B0aW9uczo6dXNlQnVtcEFsbG9jYXRvcigpCiAg
ICAgICAgICYmIGVtcHR5TW9kZSA9PSBJc0VtcHR5CiAgICAgICAgICYmIG5ld2x5QWxsb2NhdGVk
TW9kZSA9PSBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkKSB7Ci0gICAgICAgIEFTU0VSVChtYXJr
c01vZGUgPT0gTWFya3NTdGFsZSk7CisgICAgICAgIEFTU0VSVChtYXJrc01vZGUgPT0gTWFya3NT
dGFsZSB8fCBibG9jay5tX21hcmtzLmlzRW1wdHkoKSk7CiAgICAgICAgIAogICAgICAgICBjaGFy
KiBzdGFydE9mTGFzdENlbGwgPSBzdGF0aWNfY2FzdDxjaGFyKj4oY2VsbEFsaWduKGJsb2NrLmF0
b21zKCkgKyBtX2VuZEF0b20gLSAxKSk7CiAgICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFy
dE9mTGFzdENlbGwgKyBjZWxsU2l6ZSgpOwpAQCAtMTExLDYgKzExMyw4IEBAIEZyZWVMaXN0IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIHNldElzRnJlZUxpc3Rl
ZCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eSh0
aGlzLCB0cnVlKTsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICAg
ICAgYmxvY2subV9sb2NrLnVubG9jaygpOwogICAgICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVl
TGlzdDo6YnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAg
ICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5k
IGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwpAQCAtMTIz
LDE3ICsxMjcsMTEgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQog
ICAgIEZyZWVDZWxsKiBoZWFkID0gMDsKICAgICBzaXplX3QgY291bnQgPSAwOwogICAgIGJvb2wg
aXNFbXB0eSA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIGlmIChlbXB0eU1vZGUgPT0g
Tm90RW1wdHkKLSAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYg
YmxvY2subV9tYXJrcy5nZXQoaSkpCi0gICAgICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVk
TW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7
Ci0gICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKKyAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CisgICAgYXV0
byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKICAgICAgICAgSGVhcENlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZibG9jay5hdG9tcygpW2ldKTsK
IAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5lZWRzRGVzdHJ1Y3Rpb24gJiYgZW1w
dHlNb2RlID09IE5vdEVtcHR5KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycyAmJiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKS0+Y2FsbERlc3RydWN0b3IoKnZtKCkpOwogCiAgICAg
ICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CkBAIC0xNDQsMTIgKzE0Miwz
MyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAg
ICBoZWFkID0gZnJlZUNlbGw7CiAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9CisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0g
bV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYgKGVtcHR5TW9kZSA9PSBOb3RFbXB0eQorICAg
ICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtz
LmdldChpKSkKKyAgICAgICAgICAgICAgICB8fCAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05l
d2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0ZWQuZ2V0KGkpKSkpIHsKKyAgICAgICAgICAg
IGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNB
bmRDb2xsZWN0b3JJc1J1bm5pbmcpCisgICAgICAgICAgICBkZWFkQ2VsbHMuYXBwZW5kKGkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlzY2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0
cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0LAogICAgIC8vIG90aGVyd2lzZSB3ZSB3b3Vs
ZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBjdXJyZW50bHkgYWxpdmUuCiAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05l
d2x5QWxsb2NhdGVkKQogICAgICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNw
YWNlOjpudWxsVmVyc2lvbjsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisg
ICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKKyAgICAKKyAgICBpZiAoZGVzdHJ1Y3Rpb25N
b2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA6IGRlYWRDZWxscykKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxs
KGkpOworICAgIH0KIAogICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQs
IGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxp
c3QpCkBAIC0xNzcsMTIgKzE5NiwxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcChTd2VlCiAgICAgCiAgICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQodGhp
cykpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0
cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPE5l
ZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7Ci0gICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0
U2NyaWJibGVNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgaWYg
KHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7Cisg
ICAgCisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KSB7CisgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29s
bGVjdG9ySXNSdW5uaW5nPihzd2VlcE1vZGUpOworICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJT
ZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9ycz4oc3dlZXBNb2RlKTsKKyAgICB9
CisgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzTm9EZXN0
cnVjdG9ycz4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAg
aWYgKHNjcmliYmxlRnJlZUNlbGxzKCkpCkBAIC0xOTAsNyArMjE1LDcgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dEVtcHR5TW9kZTxkZXN0cnVjdGlvbk1vZGUsIERvbnRTY3JpYmJsZT4oc3dlZXBNb2RlKTsKIH0K
IAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5
IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC0yMDUsNyAr
MjMwLDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJl
dHVybiBzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkPE5vdEVtcHR5LCBkZXN0cnVj
dGlvbk1vZGUsIHNjcmliYmxlTW9kZT4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2Vk
QmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9k
ZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQo
U3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBpZiAoaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkK
QEAgLTIxMyw3ICsyMzgsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhl
bHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlPGVtcHR5TW9kZSwgZGVz
dHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQ+KHN3
ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBl
bXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5l
d2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNj
cmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2Nh
dGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAg
IGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMjIxLDEwICsyNDYsMTYgQEAg
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2Vl
cEhlbHBlclNlbGVjdE1hcmtzTW9kZTxlbXB0eU1vZGUsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25N
b2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZT4oKTsKIH0KIAotdGVtcGxhdGU8
TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3Rl
bXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxv
Y2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKCkKIHsKLSAgICBpZiAoYXJlTWFya3NTdGFs
ZSgpKQorICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gc3BhY2UoKS0+bWFya2luZ1Zl
cnNpb24oKTsKKyAgICBib29sIG1hcmtzQXJlVXNlZnVsID0gIWJsb2NrKCkuYXJlTWFya3NTdGFs
ZShtYXJraW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQor
ICAgICAgICBtYXJrc0FyZVVzZWZ1bCB8PSBibG9jaygpLm1hcmtzQ29udmV5TGl2ZW5lc3NEdXJp
bmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoIW1hcmtzQXJlVXNlZnVs
KQogICAgICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9kZSwg
ZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NT
dGFsZT4oKTsKICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9k
ZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFy
a3NOb3RTdGFsZT4oKTsKIH0KQEAgLTI0MSwyNCArMjcyLDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzZXRJc0ZyZWVMaXN0ZQogICAgIG1faXNGcmVlTGlzdGVkID0gdHJ1ZTsKIH0KIAot
Y2xhc3MgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrKQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgewotICAg
IH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEhlYXBDZWxsKiBjZWxsLCBIZWFw
Q2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IoY2VsbCkgPT0gJm1fYmxvY2stPmJsb2NrKCkpOwotICAgICAgICBtX2Jsb2NrLT5zZXRO
ZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fYmxv
Y2s7Ci19OwotCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKGNvbnN0
IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAgICBpZiAoZmFsc2UpCkBAIC0yNjYsMTIgKzI3OSwx
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgQVNTRVJU
KCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykpOwogCiAgICAgaWYgKCFpc0ZyZWVMaXN0
ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJUaGVyZSBh
aW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHdlIGVpdGhlciBkaWRuJ3QgdXNlIHRoaXMgYmxvY2sgYXQgYWxsIGZvciBhbGxvY2F0aW9uIHNp
bmNlIGxhc3QgR0MsCiAgICAgICAgIC8vIG9yIHNvbWVvbmUgaGFkIGFscmVhZHkgZG9uZSBzdG9w
QWxsb2NhdGluZygpIGJlZm9yZS4KICAgICAgICAgQVNTRVJUKGZyZWVMaXN0LmFsbG9jYXRpb25X
aWxsRmFpbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKKyAgICBpZiAoZmFsc2Up
CisgICAgICAgIGRhdGFMb2coIkZyZWUgbGlzdDogIiwgZnJlZUxpc3QsICJcbiIpOworICAgIAog
ICAgIC8vIFJvbGwgYmFjayB0byBhIGNvaGVyZW50IHN0YXRlIGZvciBIZWFwIGludHJvc3BlY3Rp
b24uIENlbGxzIG5ld2x5CiAgICAgLy8gYWxsb2NhdGVkIGZyb20gb3VyIGZyZWUgbGlzdCBhcmUg
bm90IGN1cnJlbnRseSBtYXJrZWQsIHNvIHdlIG5lZWQgYW5vdGhlcgogICAgIC8vIHdheSB0byB0
ZWxsIHdoYXQncyBsaXZlIHZzIGRlYWQuIApAQCAtMjc5LDEyICsyOTcsMTcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xl
YXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3Bh
Y2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKIAotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVu
Y3RvciBmdW5jdG9yKHRoaXMpOwotICAgIGZvckVhY2hDZWxsKGZ1bmN0b3IpOworICAgIGZvckVh
Y2hDZWxsKAorICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIHNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OwogCiAgICAgZm9yRWFjaEZyZWVDZWxsKAogICAgICAgICBmcmVlTGlzdCwKICAgICAgICAgWyZd
IChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRlcihjZWxsKSwgIlxuIik7CiAgICAg
ICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24p
CiAgICAgICAgICAgICAgICAgY2VsbC0+emFwKCk7CiAgICAgICAgICAgICBjbGVhck5ld2x5QWxs
b2NhdGVkKGNlbGwpOwpAQCAtMzA3LDEwICszMzAsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpsYXN0Q2hhbmNlVG9GaQogCiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1
bWVBbGxvY2F0aW5nKCkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9p
bnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyFcbiIp
OwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICBBU1NF
UlQoIWlzRnJlZUxpc3RlZCgpKTsKIAogICAgIGlmICghaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkg
eworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJUaGVyZSBhaW4ndCBu
byBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQgYWxy
ZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgogICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICB9CkBAIC0zNTQsNiArMzgxLDggQEAgdm9pZCBN
YXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgIAogICAgIGlmIChoYW5kbGUo
KS5hbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoJmhhbmRsZSgpKQogICAgICAgICB8fCAhbWFya3ND
b252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgIGlm
IChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQ2xlYXJp
bmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLlxuIik7CiAgICAgICAgIC8vIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBibG9jayBpcyBmdWxsIGFuZCBpcyBhbHJlYWR5IHJlY29n
bml6ZWQgYXMgc3VjaCwgb3IgdGhhdCB0aGUKICAgICAgICAgLy8gYmxvY2sgZGlkIG5vdCBzdXJ2
aXZlIHRoZSBwcmV2aW91cyBHQy4gU28sIHdlIGNhbiBjbGVhciBtYXJrIGJpdHMgdGhlIG9sZCBm
YXNoaW9uZWQKICAgICAgICAgLy8gd2F5LiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3Igc3Vj
aCBhIGJsb2NrIHRvIGhhdmUgbmV3bHlBbGxvY2F0ZWQgd2l0aCBhbiB1cC10by0KQEAgLTM2Miw2
ICszOTEsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAg
ICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFsbG9jYXRlZC4KICAgICAgICAgbV9tYXJrcy5jbGVh
ckFsbCgpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRh
dGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhl
YXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVk
VmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24g
PT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CiAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29u
dGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBz
ZXQgb2YgYml0cwpAQCAtNDI5LDcgKzQ2MCw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
ZGlkQ29uc3VtZUZyZWUKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAgICBBU1NFUlQoaXNG
cmVlTGlzdGVkKCkpOwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7Ci0gICAgYWxsb2NhdG9y
KCktPnNldElzQWxsb2NhdGVkKHRoaXMsIHRydWUpOworICAgIGFsbG9jYXRvcigpLT5hdG9taWNT
ZXRBbmRDaGVja0lzQWxsb2NhdGVkKHRoaXMsIHRydWUpOwogfQogCiBzaXplX3QgTWFya2VkQmxv
Y2s6Om1hcmtDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwzMCArMTkwLDMyIEBAIHB1YmxpYzoK
ICAgICBwcml2YXRlOgogICAgICAgICBIYW5kbGUoSGVhcCYsIHZvaWQqKTsKICAgICAgICAgCi0g
ICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4KKyAgICAgICAgZW51bSBTd2VlcERlc3Ry
dWN0aW9uTW9kZSB7IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgQmxvY2tIYXNEZXN0cnVjdG9ycywg
QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZyB9OworICAgICAgICAKKyAg
ICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVjdGlvbk1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgZW51bSBTY3JpYmJsZU1vZGUgeyBEb250U2NyaWJibGUsIFNjcmli
YmxlIH07CiAgICAgICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlLCBT
Y3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3Jp
YmJsZU1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3
ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgICAgICAKICAgICAgICAgZW51bSBFbXB0eU1v
ZGUgeyBJc0VtcHR5LCBOb3RFbXB0eSB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1w
dHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8
RW1wdHlNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBG
cmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSA9IFN3
ZWVwT25seSk7CiAgICAgICAgIAogICAgICAgICBlbnVtIE5ld2x5QWxsb2NhdGVkTW9kZSB7IEhh
c05ld2x5QWxsb2NhdGVkLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkIH07CiAgICAgICAgIAot
ICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2Rl
LCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBE
ZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAg
ICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9u
bHkpOwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERl
c3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAg
IHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVs
cGVyU2VsZWN0TWFya3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBlbnVtIE1hcmtzTW9kZSB7
IE1hcmtzU3RhbGUsIE1hcmtzTm90U3RhbGUgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwg
U3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9j
YXRlZE1vZGUsIE1hcmtzTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcCgp
OwogICAgICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9y
TWFya2luZygpCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewotICAg
IEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAogICAgICAgICBb
Jl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAg
ICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFsbG9jYXRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNl
bmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1fc3Rh
Y2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAg
ICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJ
blBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6
OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyArODksNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0
b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgY2xl
YXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1hcmtTdGFja3MoKTsKIH0KIAogdm9pZCBTbG90Vmlz
aXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAgLTEwOSwxNiArMTA3LDE3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNW
aXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAw
OwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1
cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFy
TWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFjay5jbGVhcigpOworICAgIG1fY29sbGVjdG9yU3Rh
Y2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JTdGFjay5jbGVhcigpOwogfQogCiB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAt
MTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNDZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAgICAganNDZWxsLT5zZXRD
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKIAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhq
c0NlbGwpOwogICAgICAgICByZXR1cm47CkBAIC0yMTAsNyArMjA5LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9i
amVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzog
aXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8g
SW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1l
IGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGFwcGVuZFRvTWFya1N0YWNrKGNvbnRhaW5lciwg
Y2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxs
LT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkg
PT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0g
Q2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAg
IAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMg
dGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0
IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0
Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKICAg
ICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVu
ZChjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNr
KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX211dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7
CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkK
QEAgLTI5NCwxMiArMjk2LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlz
aXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRo
aXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xkQ2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7
CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFMb2coIlZpc2l0aW5nICIsIFJhd1BvaW50
ZXIoY2VsbCkpOworICAgICAgICBpZiAobV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAg
ICAgICAgZGF0YUxvZygiIChtdXRhdG9yKSIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
IH0KICAgICAKLSAgICAvLyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBj
YW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8g
dmlzaXRlZCBieSBvbmUgbWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1h
cmtpbmcgd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMg
YWxyZWFkeSBncmV5LgotICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9s
ZEdyZXkgfHwgbV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBG
dW5ueSBzdG9yeTogaXQncyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJl
YWR5LCBpZiB3ZSBiYXJyaWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0
aW1lIHRoYXQgaXQncyBtYXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBl
ci1yYXJlIHJhY2UuIEl0J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBi
ZSBjb3JyZWN0IG9yIHByb2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxy
ZWFkeQorICAgIC8vIGJsYWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3Rh
dGU6OkFudGhyYWNpdGVPckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzMzLDIzIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYg
KFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2Vs
bFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2spCiAgICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5v
ZGUoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAg
ICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBj
b25zZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9m
aXRhYmxlLgogCiAgICAgLy8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBk
ZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIp
CisgICAgaWYgKGZyb20uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYg
dGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRp
dmUgYW5kIGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJs
ZS4KLSAgICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8u
c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9u
IHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1
MiwyNiArMzU5LDQzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFk
IHdpbGwgZ28gaWRsZSBzb29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNl
bGxzVG8obV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxs
c1RvKHRvKTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlB
bGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6
ZG9uYXRlS25vd25QYXJhbGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxl
Y3RvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25h
dGVLbm93blBhcmFsbGVsKG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjayk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxl
ICghbV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fu
c0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3du
LS07KQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7Cisg
ICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2Nv
bGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5y
ZWZpbGwoKTsKKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVt
YmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVM
YXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9j
b2xsZWN0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0
b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgp
OworICAgICAgICAgICAgLy8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBv
YmplY3RzIGJlY2F1c2Ugb2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAg
ICAvLyBtYXJraW5nLiBNYXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4g
VGhlIGJhcnJpZXIgd2lsbCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0
aW1lcywgYW5kIGFsd2F5cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAg
ICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJh
bGFuY2UoKTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykK
KyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3Qo
KSk7CisgICAgICAgIH0KICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAg
ICAKICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJl
ZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQx
Niw2MCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAg
ICAgICAgICAgLy8gV2FpdCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3Ig
dW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRv
LgogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8g
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAvLyBJcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAg
ICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxv
Y2spOworICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUud2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBT
bGF2ZURyYWluKTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0Owog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWlu
YXRpb24/IElmIHNvLCBsZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICgh
bV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAg
ICAgICAgICAgICAgICAgICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhp
c10gewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4g
ZnJvbSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAg
ICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVD
ZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAg
ICAgIG1fbXV0YXRvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAq
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5n
UGFyYWxsZWxNYXJrZXJzKTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFy
YWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAg
ICAgICAgZHJhaW4odGltZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDg5LDYgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lz
SW5QYXJhbGxlbE1vZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAg
ICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00
NjcsMTMgKzUwMiw2IEBAIFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QK
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVS
b290Q291bnQoKQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NF
UlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVS
b290cy5zaXplKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5l
Y2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1
ICs1MjUsMTQgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBh
cmFsbGVsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQg
U2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAg
ICBkb25hdGUoKTsKLSAgICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lk
IFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJv
b3RzIGFyZSBub24tZW1wdHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290
IDogbV9vcGFxdWVSb290cykKQEAgLTUyNiwxMCArNTUzLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmlu
YWxpemVycy5yZW1vdmVOZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRv
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxs
KiBjZWxsIDogbWFya1N0YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAg
IG91dC5wcmludCgiQ29sbGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtT
dGFjaygpKSwgIl0sIE11dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFj
aygpKSwgIl0iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5o
IgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAg
IFNsb3RWaXNpdG9yKEhlYXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFj
a0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIG1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1h
cmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBt
X211dGF0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJr
U3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JT
dGFjazsgfQorICAgIAogICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0Owog
ICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJp
U3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBv
cGFxdWVSb290Q291bnQoKTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2su
aXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFj
ay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRp
ZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0
YWNrKCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zp
c2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRl
c0NvcGllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3Qgdmlz
aXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25h
dGUoKTsKLSAgICB2b2lkIGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAg
IHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CisgICAgdm9pZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBN
b25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9k
ZSB7IFNsYXZlRHJhaW4sIE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQo
U2hhcmVkRHJhaW5Nb2RlKTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9u
ZSwgVGltZWRPdXQgfTsKKyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hh
cmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKIAogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVi
bGljOgogICAgIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxl
cjsKICAgICAKQEAgLTE0MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmLCBKU0NlbGwqKTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFj
ayhjb25zdCBKU0NlbGwqKTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChI
ZWFwQ2VsbCopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVS
b290cygpOwotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7
CisgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJr
U3RhY2tBcnJheSYgdG8pOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJr
U3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRv
clN0YWNrOwogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmlu
ZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgog
ICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGll
ZDsKICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2Rl
OwogICAgIApAQCAtMTY1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RC
dWlsZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBt
X2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsK
KyAgICBib29sIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSwxMyArMTA1LDE1IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlv
bmEKIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChz
aXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29s
ZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisg
ICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lz
VmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1
cmUKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAg
ICAgICAgIGNvcnJlY3RTdHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJl
Y3RJbmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1
Y3R1cmVQdHItPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5n
VHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBK
U0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1
cmVQdHItPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJv
cnRXaXRoUmVhc29uKEFISW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRl
eGluZ1R5cGUubGluaygmaml0KTsKIApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICB9CiAjZWxzZQogICAgIC8vIERvIGEgMzIt
Yml0IHdpZGUgc3RvcmUgdG8gaW5pdGlhbGl6ZSB0aGUgY2VsbCdzIGZpZWxkcy4KLSAgICBqaXQu
c3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5vYmplY3RJbml0aWFsaXphdGlvbkJs
b2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpKTsKKyAgICBqaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5v
YmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3Qs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSk7CiAgICAgaml0LnN0b3JlUHRy
KHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4
ICsxMzE4LDggQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KHNjcmF0Y2gsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2Vsc2UK
ICAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbmZvIGZsYWdzIHVzaW5nIGEgc2luZ2xlIDMyLWJp
dCB3aWRlIGxvYWQgYW5kIHN0b3JlLgotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVz
dCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2gs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSk7CiAKICAgICAgICAgLy8gU3RvcmUgdGhlIFN0cnVjdHVyZUlECiAgICAgICAg
IHN0b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw3ICs5OTYsNyBAQCBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVXCiAgICAgICAgIHN0b3JlMzIoaW5kZXhp
bmdUeXBlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CiAg
ICAgfQogCi0gICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgaW5kZXhpbmdUeXBlKTsKKyAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKIH0KIAogaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdpdGhDZWxsKFJl
Z2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMDEsOCArMjIwMSw4IEBAIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5n
cm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAg
ICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0
KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5l
U3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBvYmplY3QtPnNl
dEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocmVzdWx0KTsKIH0KIApAQCAtMjIxMSw4ICsyMjExLDggQEAgY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCi0gICAgQnV0dGVyZmx5KiBy
ZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKLSAgICBvYmplY3QtPnNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVzdWx0KTsKKyAgICBCdXR0ZXJmbHkq
IHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7CisgICAgb2JqZWN0
LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwOCw3ICsxMDA4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0
aQogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRMb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNr
IGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBsb2FkUHRy
KG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwogICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQs
IChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwor
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29wZSogY29u
c3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5
cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2Nv
cGUpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBpZiAoIWlz
SW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29s
dmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdl
IG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0ICsxMDM3LDE1
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAg
ICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoq
PihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoqPigmY3Vy
cmVudEluc3RydWN0aW9uWzVdKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAg
ICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2Nh
bENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJp
ZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFy
SW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAg
ICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRX
cml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
QEAgLTExNTcsMTEgKzExNTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhJbnN0cgogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAK
LSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKLSAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBzdG9yZTY0KHJl
Z1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGlu
ZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVtaXRXcml0ZUJh
cnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dERhdGEuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxNSBAQCB2b2lk
IERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBTVEFUSUNfQVNTRVJUKEV2YWxD
b2RlID09IDEpOwogICAgIFNUQVRJQ19BU1NFUlQoRnVuY3Rpb25Db2RlID09IDIpOwogICAgIFNU
QVRJQ19BU1NFUlQoTW9kdWxlQ29kZSA9PSAzKTsKKyAgICAKKyAgICBTVEFUSUNfQVNTRVJUKElz
QXJyYXkgPT0gMHgwMSk7CisgICAgU1RBVElDX0FTU0VSVChJbmRleGluZ1NoYXBlTWFzayA9PSAw
eDBFKTsKKyAgICBTVEFUSUNfQVNTRVJUKE5vSW5kZXhpbmdTaGFwZSA9PSAweDAwKTsKKyAgICBT
VEFUSUNfQVNTRVJUKEludDMyU2hhcGUgPT0gMHgwNCk7CisgICAgU1RBVElDX0FTU0VSVChEb3Vi
bGVTaGFwZSA9PSAweDA2KTsKKyAgICBTVEFUSUNfQVNTRVJUKENvbnRpZ3VvdXNTaGFwZSA9PSAw
eDA4KTsKKyAgICBTVEFUSUNfQVNTRVJUKEFycmF5U3RvcmFnZVNoYXBlID09IDB4MEEpOworICAg
IFNUQVRJQ19BU1NFUlQoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID09IDB4MEMpOwogCiAgICAg
QVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KChyZWludGVycHJldF9jYXN0PFdy
aXRlQmFycmllcjxKU0NlbGw+Kj4oMHg0MDAwKS0+c2xvdCgpKSkgLSAweDQwMDApKTsKICAgICBz
dGF0aWNfYXNzZXJ0KFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPT0gMHg2LCAiTExJbnQgYXNzdW1l
cyBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrIGlzID09IDB4NiIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1LDYgKzE1MDUsNyBAQCBfbGxp
bnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgbG9hZHBGcm9t
SW5zdHJ1Y3Rpb24oNCwgdDApCiAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9vdXRPZkJv
dW5kc1t0MF0KKyAgICBqbXAgLm9wR2V0QnlWYWxTbG93CiAKIC5vcEdldEJ5VmFsTm90SW5kZXhl
ZFN0b3JhZ2U6CiAgICAgIyBGaXJzdCBsZXRzIGNoZWNrIGlmIHdlIGV2ZW4gaGF2ZSBhIHR5cGVk
IGFycmF5LiBUaGlzIGxldHMgdXMgZG8gc29tZSBib2lsZXJwbGF0ZSB1cCBmcm9udC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20JKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzMzLDE0ICszMzMsMTQg
QEAgZWxzZQogZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0ZXJmbGll
cy4KLWNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDEKLWNvbnN0IEluZGV4aW5nU2hh
cGVNYXNrICAgICAgICA9IDMwCi1jb25zdCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAwCi1j
b25zdCBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAyMAotY29uc3QgRG91YmxlU2hhcGUgICAg
ICAgICAgICAgID0gMjIKLWNvbnN0IENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDI2Ci1jb25z
dCBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAyOAotY29uc3QgU2xvd1B1dEFycmF5U3RvcmFn
ZVNoYXBlID0gMzAKK2NvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4MDEKK2NvbnN0
IEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEUKK2NvbnN0IE5vSW5kZXhpbmdTaGFwZSAg
ICAgICAgICA9IDB4MDAKK2NvbnN0IEludDMyU2hhcGUgICAgICAgICAgICAgICA9IDB4MDQKK2Nv
bnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDB4MDYKK2NvbnN0IENvbnRpZ3VvdXNTaGFw
ZSAgICAgICAgICA9IDB4MDgKK2NvbnN0IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEEK
K2NvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEMKIAogIyBUeXBlIGNvbnN0YW50
cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA2CkBAIC04ODcsNyArODg3LDcgQEAgbWFjcm8gYXJyYXlQ
cm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogICAgIGNvbnN0IGluZGV4aW5nVHlwZSA9IGNl
bGxBbmRJbmRleGluZ1R5cGUgCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW2NlbGxd
LCBzY3JhdGNoCiAgICAgc3RvcmVpIHNjcmF0Y2gsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0
cnVjdHVyZUlEW3Byb2ZpbGVdCi0gICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlwZVtjZWxs
XSwgaW5kZXhpbmdUeXBlCisgICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlwZUFuZE1pc2Nb
Y2VsbF0sIGluZGV4aW5nVHlwZQogZW5kCiAKIG1hY3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5F
ZGVuKGNlbGwsIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NCwxNSArOTQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotI2lmIEVOQUJM
RShDT05DVVJSRU5UX0pJVCkKICAgICBEZWZlckdDIG1fZGVmZXJHQzsKLSNlbHNlCi0gICAgc3Ry
dWN0IE5vRGVmZXIgewotICAgICAgICBOb0RlZmVyKEhlYXAmIGhlYXApIDogbV9oZWFwKGhlYXAp
IHsgfQotICAgICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgfTsKLSAgICBOb0RlZmVyIG1fZGVmZXJH
QzsKLSNlbmRpZgogfTsKIAogY2xhc3MgQ29uY3VycmVudEpJVExvY2tlciA6IHB1YmxpYyBDb25j
dXJyZW50SklUTG9ja2VyQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMyBAQCBib29sIEdlbmVyaWNBcmd1
bWVudHM8VHlwZT46OmdldE93blByb3BlCiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpzQ2FzdDxU
eXBlKj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhR
dWlja2x5KGluZGV4KSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIE5vbmUs
IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCk7CisgICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGJvb2wgcmVzdWx0ID0gQmFzZTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4LCBzbG90KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtMTI5LDcgKzEz
MSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCgKIHsKICAgICBU
eXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihjZWxsKTsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwotCisgICAgCiAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2ts
eShpbmRleCkpIHsKICAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhRdWlja2x5KHZtLCBpbmRl
eCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlw
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDIxICs1MywyNSBAQCB0eXBlZGVm
IHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJc0FycmF5
ICAgICAgICAgICAgICAgICAgPSAweDAxOwogCiAvLyBUaGUgc2hhcGUgb2YgdGhlIGluZGV4ZWQg
cHJvcGVydHkgc3RvcmFnZS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFw
ZU1hc2sgICAgICAgID0gMHgwRTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGlu
Z1NoYXBlICAgICAgICAgID0gMHgwMDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgVW5kZWNp
ZGVkU2hhcGUgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwgZm9yIGFycmF5cy4KLXN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0gMHgwNDsK
LXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMHgw
NjsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAgICAgICAgID0g
MHgwODsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAg
ID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNo
YXBlID0gMHgwQzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZU1hc2sg
ICAgICAgICAgICAgICA9IDB4MEU7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vSW5kZXhp
bmdTaGFwZSAgICAgICAgICAgICAgICAgPSAweDAwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwg
Zm9yIGFycmF5cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIERvdWJsZVNo
YXBlICAgICAgICAgICAgICAgICAgICAgPSAweDA2Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwODsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgICAgICAgICA9IDB4MEE7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAw
eDBDOwogCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlmdCAgICAg
ICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMg
ICA9IDc7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVTaGlmdCAgICAg
ICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOdW1iZXJPZkluZGV4aW5n
U2hhcGVzICAgICAgICAgID0gNzsKIAogLy8gQWRkaXRpb25hbCBmbGFncyBmb3IgdHJhY2tpbmcg
dGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5CiAvLyBtYXNrZWQgb2Zm
IHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSAweDEwOworc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgICAgICAgID0gMHgxMDsKKworLy8gVGhl
IEluZGV4aW5nVHlwZSBmaWVsZCBvZiBKU0NlbGxzIGlzIHN0b2xlbiBmb3IgbG9ja3MuCitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQgICAgICAgICAgPSAw
eDIwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5cGVMb2NrSGFzUGFya2Vk
ICAgICAgID0gMHg0MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFycmF5IHR5cGVzLgogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBAIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJy
YXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGluY2x1ZGluZyB0aGUgaGlz
dG9yeS4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlUeXBlc0FuZEhpc3Rvcnkg
ID0gQWxsQXJyYXlUeXBlcyB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogCit0eXBlZGVmIExv
Y2tBbGdvcml0aG08SW5kZXhpbmdUeXBlLCBJbmRleGluZ1R5cGVMb2NrSXNIZWxkLCBJbmRleGlu
Z1R5cGVMb2NrSGFzUGFya2VkPiBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
Y3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw5IEBAIGJvb2wgSlNBcnJh
eTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4QmlhczsKICAgICAKLSAg
ICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwNjMsMTMgKzEwNjUs
MTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlTdG9yYQogICAgIC8vIE5l
ZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBhcm91bmQgdGhlIHVuc2hpZnRDb3VudFNsb3dDYXNlKCks
IHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBidXR0ZXJmbHkgaW4KICAgICAvLyBhIHdlaXJkIHN0YXRl
OiBzb21lIHBhcnRzIG9mIGl0IHdpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLCB3aGljaCB3ZSB3
aWxsIGZpbGwgaW4gaGVyZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgSlND
ZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CiAgICAgCiAgICAgaWYgKG1vdmVGcm9u
dCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewogICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgp
LCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsKICAgICAgICAgc3RvcmFn
ZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsKLSAgICAgICAgc2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZlY3Rvckxlbmd0aCAtIGxl
bmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT5h
cnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93Q2FzZSh2bSwgZGVm
ZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkwLDYgKzEwOTQsNyBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2kgKyBzdGFydEluZGV4XS5jbGVhcigp
OworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4ICsxMDAsMzIgQEAg
cHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwogICAgIGJvb2wgaW5oZXJpdHMoY29u
c3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBpc0FQSVZhbHVlV3JhcHBlcigpIGNvbnN0
OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBidWlsdC1pbiBsb2NrLiBDdXJyZW50bHkg
aXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYgeW91IG5lZWQgaXQuIEl0J3MKKyAgICAv
LyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRoYXQgdGhpcyBsb2NrIGlzIGN1cnJlbnRs
eSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydzCisgICAgLy8gb3JkZXJpbmcgd2l0aCB0
aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3RydWN0dXJlIGxvY2sgbXVzdCBiZSBhY3F1
aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2tJbnRlcm5hbExvY2soKTsKKyAgICB2b2lkIHVubG9j
a0ludGVybmFsTG9jaygpOworICAgIAorICAgIGNsYXNzIEludGVybmFsTG9ja2VyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIEludGVybmFsTG9ja2VyKEpTQ2VsbCogY2VsbCkKKyAgICAgICAgICAg
IDogbV9jZWxsKGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+bG9ja0ludGVy
bmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+SW50ZXJuYWxMb2NrZXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPnVubG9ja0ludGVybmFsTG9jaygpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEpTQ2VsbCogbV9jZWxs
OworICAgIH07CiAKICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0OworICAgIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3Q7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0OwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3Q7CkBAIC0x
NjcsNiArMTkxLDE2IEBAIHB1YmxpYzoKICAgICBDZWxsU3RhdGUgY2VsbFN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAgICB2b2lkIHNldENlbGxTdGF0ZShDZWxs
U3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2VsbCo+KHRoaXMpLT5tX2NlbGxTdGF0
ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0
ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQo
Jm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0KKworICAgIENlbGxTdGF0
ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcoQ2VsbFN0YXRlIG9sZFN0YXRl
LCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWND
b21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOwor
ICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURPZmZzZXQoKQogICAgIHsK
QEAgLTE4Myw5ICsyMTcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTQ2VsbCwgbV90eXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4
aW5nVHlwZU9mZnNldCgpCisgICAgLy8gRE8gTk9UIHN0b3JlIHRvIHRoaXMgZmllbGQuIEFsd2F5
cyB1c2UgYSBDQVMgbG9vcCwgc2luY2Ugc29tZSBiaXRzIGFyZSBmbGlwcGVkIHVzaW5nIENBUwor
ICAgIC8vIGZyb20gb3RoZXIgdGhyZWFkcyBkdWUgdG8gdGhlIGludGVybmFsIGxvY2suIE9uZSBl
eGNlcHRpb246IHlvdSBkb24ndCBuZWVkIHRoZSBDQVMgaWYgdGhlCisgICAgLy8gb2JqZWN0IGhh
cyBub3QgZXNjYXBlZCB5ZXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
Y2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIyOCw3ICsyNjUsNyBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBTdHJ1Y3R1cmVJRCBtX3N0cnVj
dHVyZUlEOwotICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsKKyAgICBJbmRleGluZ1R5
cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNjOyAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4g
QWx3YXlzIENBUy4KICAgICBKU1R5cGUgbV90eXBlOwogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBl
RmxhZ3MgbV9mbGFnczsKICAgICBDZWxsU3RhdGUgbV9jZWxsU3RhdGU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKENyZWF0
aW5nRWFybHlDZWxsVAogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJlLT5pZCgpKQotICAgICwgbV9p
bmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAsIG1faW5kZXhpbmdU
eXBlQW5kTWlzYyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAg
ICAsIG1fdHlwZShzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9mbGFncyhz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCiAgICAgLCBtX2NlbGxTdGF0
ZShDZWxsU3RhdGU6Ok5ld1doaXRlKQpAQCAtNzQsNyArNzQsNyBAQCBpbmxpbmUgdm9pZCBKU0Nl
bGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiAgICAgaWYgKHN0cnVjdHVyZSkgewogI2VuZGlmCiAg
ICAgICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgIG1faW5kZXhp
bmdUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgbV9pbmRleGluZ1R5
cGVBbmRNaXNjID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CiAg
ICAgICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CiAgICAgICAgIG1f
ZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAjaWYgRU5B
QkxFKEdDX1ZBTElEQVRJT04pCkBAIC05MSw5ICs5MSwxNCBAQCBpbmxpbmUgSlNUeXBlIEpTQ2Vs
bDo6dHlwZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHlwZTsKIH0KIAoraW5saW5lIEluZGV4aW5n
VHlwZSBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdAoreworICAgIHJldHVybiBt
X2luZGV4aW5nVHlwZUFuZE1pc2M7Cit9CisKIGlubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjpp
bmRleGluZ1R5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2luZGV4aW5nVHlwZTsKKyAgICBy
ZXR1cm4gaW5kZXhpbmdUeXBlQW5kTWlzYygpICYgQWxsQXJyYXlUeXBlczsKIH0KIAogaW5saW5l
IFN0cnVjdHVyZSogSlNDZWxsOjpzdHJ1Y3R1cmUoKSBjb25zdApAQCAtMTk1LDE3ICsyMDAsMjcg
QEAgaW5saW5lIGJvb2wgSlNDZWxsOjppc0FQSVZhbHVlV3JhcHBlcigpIAogICAgIHJldHVybiBt
X3R5cGUgPT0gQVBJVmFsdWVXcmFwcGVyVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpz
ZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpID09IHRoaXMtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSk7CiAgICAgQVNTRVJUKCF0aGlzLT5zdHJ1Y3R1cmUoKQogICAgICAgICB8
fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQoKQogICAgICAgICB8fCBIZWFwOjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCku
Z2V0KHN0cnVjdHVyZS0+aWQoKSkgPT0gc3RydWN0dXJlKTsKLSAgICB2bS5oZWFwLndyaXRlQmFy
cmllcih0aGlzLCBzdHJ1Y3R1cmUpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAg
bV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKICAgICBtX2ZsYWdzID0gc3RydWN0dXJl
LT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCk7Ci0gICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpOworICAgIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsKKyAgICBpZiAobV9pbmRleGluZ1R5cGVB
bmRNaXNjICE9IG5ld0luZGV4aW5nVHlwZSkgeworICAgICAgICBBU1NFUlQoIShuZXdJbmRleGlu
Z1R5cGUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpKTsKKyAgICAgICAgZm9yICg7Oykgewor
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG9sZFZhbHVlID0gbV9pbmRleGluZ1R5cGVBbmRNaXNj
OworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIG5ld1ZhbHVlID0gKG9sZFZhbHVlICYgfkFsbEFy
cmF5VHlwZXNBbmRIaXN0b3J5KSB8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpOworICAgICAgICAgICAgaWYgKFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1Jl
bGF4ZWQoJm1faW5kZXhpbmdUeXBlQW5kTWlzYywgb2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICB2bS5oZWFwLndyaXRlQmFy
cmllcih0aGlzLCBzdHJ1Y3R1cmUpOwogfQogCiBpbmxpbmUgY29uc3QgTWV0aG9kVGFibGUqIEpT
Q2VsbDo6bWV0aG9kVGFibGUoKSBjb25zdApAQCAtMjg0LDExICsyOTksMjYgQEAgaW5saW5lIHZv
aWQgSlNDZWxsOjpjYWxsRGVzdHJ1Y3RvcihWTSYgdgogICAgIGlmIChpc1phcHBlZCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgQVNTRVJUKHN0cnVjdHVyZUlEKCkpOwotICAgIGlmIChpbmxpbmVU
eXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpCi0gICAgICAgIHN0cnVjdHVyZSh2bSkt
PmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwotICAgIGVsc2UKKyAgICBp
ZiAoaW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB7CisgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAgICAgICBN
ZXRob2RUYWJsZTo6RGVzdHJveUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhv
ZFRhYmxlLmRlc3Ryb3k7CisgICAgICAgIGRlc3Ryb3kodGhpcyk7CisgICAgfSBlbHNlCiAgICAg
ICAgIGpzQ2FzdDxKU0Rlc3RydWN0aWJsZU9iamVjdCo+KHRoaXMpLT5jbGFzc0luZm8oKS0+bWV0
aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKICAgICB6YXAoKTsKIH0KIAoraW5saW5lIHZvaWQgSlND
ZWxsOjpsb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9j
ayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFu
ZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OmxvY2soKmxvY2spOworfQor
CitpbmxpbmUgdm9pZCBKU0NlbGw6OnVubG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWlj
PEluZGV4aW5nVHlwZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4q
PigmbV9pbmRleGluZ1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGht
Ojp1bmxvY2soKmxvY2spOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEyLDE3ICsxMTIsMjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNp
dEJ1dHRlcgogICAgIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VT
aXplLCBzdG9yYWdlU2l6ZSk7Ci0gICAgCi0gICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9w
cmlhdGUuCi0gICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgeworCisgICAgSW5kZXhp
bmdUeXBlIG9sZFR5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHN3aXRjaCAo
b2xkVHlwZSkgewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAg
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRh
dGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKLSAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgY2Fz
ZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAvLyBUaGlzIGxv
Y2sgaXMgaGVyZSB0byBwcm90ZWN0IENvbnRpZ3VvdXMtPkFycmF5U3RvcmFnZSB0cmFuc2l0aW9u
cywgYnV0IHdlIGNvdWxkIG1ha2UgdGhhdAorICAgICAgICAvLyByYWNlIHdvcmsgaWYgd2UgbmVl
ZGVkIHRvLgorICAgICAgICBKU0NlbGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAg
ICAgICAgSW5kZXhpbmdUeXBlIG5ld1R5cGUgPSB0aGlzLT5pbmRleGluZ1R5cGUoKTsKKyAgICAg
ICAgYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgICAgIHN3aXRjaCAobmV3VHlw
ZSkgeworICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCku
ZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OiAvLyBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUworICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KTsKKyAgICAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cCkKKyAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV9zcGFyc2VNYXApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTE0NiwxMCArMTU3LDM0IEBAIHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CiAKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5Lmdl
dCgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVy
Zmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0o
KSkpOwotCisgICAgLy8gV2Ugd2FudCB0byBkZWZlbmQgYWdhaW5zdCBtdWx0aXBsZSBwb3NzaWJs
ZSByYWNlcyB3aXRoIHRoZSBtdXRhdG9yOgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBpbnN0YWxs
IGEgYmlnZ2VyIGJ1dHRlcmZseSBhbmQgdGhlbiBpbnN0YWxsIGEgc3RydWN0dXJlIHRoYXQgY2xh
aW1zIG1vcmUKKyAgICAvLyAgIHByb3BlcnRpZXMuIFRoaXMgdHJpdmlhbGx5IHdvcmtzLgorICAg
IC8vIC0gTXV0YXRvciBjb3VsZCBtdXRhdGUgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBIZW5j
ZSwgd2UgaG9sZCB0aGUgc3RydWN0dXJlIGxvY2sgZm9yCisgICAgLy8gICBkaWN0aW9uYXJ5IHN0
cnVjdHVyZXMuCisgICAgLy8gLSBUaGUgYnV0dGVyZmx5IGNvdWxkIHNocmluaywgYnV0IHRoaXMg
Y291bGQgb25seSBoYXBwZW4gaWYgdGhlIG9iamVjdCB3YXMgYSBkaWN0aW9uYXJ5LgorICAgIC8v
ICAgVXN1YWxseSwgdGhpcyBtZWFucyB0aGF0IHdlIHdvdWxkIGdldCB0aGUgZGljdGlvbmFyeSBz
dHJ1Y3R1cmUgYW5kIGFjcXVpcmUgYSBsb2NrLiBUaGF0CisgICAgLy8gICB0cml2aWFsbHkgd29y
a3MuIEJ1dCB3ZSBjb3VsZCBsb2FkIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBvYmplY3QgYmVj
YW1lIGEgZGljdGlvbmFyeQorICAgIC8vICAgYW5kIHRoZW4gbG9hZCB0aGUgYnV0dGVyZmx5IHRo
YXQgd2FzIHNocnVuay4gV2UgcHJvdGVjdCBhZ2FpbnN0IHRoaXMgY2FzZSBieSBjaGVja2luZwor
ICAgIC8vICAgdGhlIHN0cnVjdHVyZSBhIHNlY29uZCB0aW1lIGJlZm9yZSBzY2FubmluZyB0aGUg
YnV0dGVyZmx5LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGJ1dHRlcmZseQorICAgIC8vICAgaXMgYXQg
d29yc3QgdGhlIGJ1dHRlcmZseSB0aGF0IHRoZSBtdXRhdG9yIGhhZCBpbnN0YWxsZWQganVzdCBw
cmlvciB0byBmbGlwcGluZyB0aGUKKyAgICAvLyAgIHN0dXJjdHVyZS4gU28gaWYgdGhlIHN0cnVj
dHVyZSB3ZSBzZWUgaXMgYSBub24tZGljdGlvbmFyeSB0aGVuIHRoZSBidXR0ZXJmbHkgY2Fubm90
IHlldAorICAgIC8vICAgaGF2ZSBiZWVuIHNocnVuay4KKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZt
KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0p
OworICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7Cisg
ICAgaWYgKHdhc0RpY3Rpb25hcnkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygp
OworICAgIH0gZWxzZQorICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0
dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkgeworICAg
ICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVj
dHVyZUlEKCkgPT0gc3RydWN0dXJlLT5pZCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlz
aXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICBp
ZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7Cisg
ICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVm
YXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwog
I2VuZGlmCkBAIC0yMDQsMTUgKzIzOSwyNSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUodmlzaXRvci52bSgpKTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPmJ1dHRlcmZseSgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3Qt
PnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICBWTSYg
dm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+
bG9jaygpLmxvY2soKTsKKyAgICBlbHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwor
ICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpKSB7
CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5p
ZCgpID09IHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQog
CiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCk7CiAgICAg
aWYgKHN0b3JhZ2VTaXplKQogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlz
T2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKLQorICAgIGlmICh3YXNEaWN0
aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAg
LTY2Niw3ICs3MTEsOCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJ
CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOwogICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKICAgICBu
ZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIG1h
cCk7Ci0gICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOwogICAgIAogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpOwogfQpAQCAtNzMxLDcgKzc3Nyw5IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxVbmRlY2kKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0
aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxv
Y2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBz
ZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CiB9CiAKQEAgLTc0Miw3ICs3OTAs
OSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAg
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5l
d1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0s
IG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMy
KCk7CiB9CiAKQEAgLTc1Myw3ICs4MDMsOSBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6
Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClb
aV0gPSBQTmFOOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Q
cm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlv
bjo6QWxsb2NhdGVEb3VibGUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3
U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwg
bmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91Ymxl
KCk7CiB9CiAKQEAgLTc2NCw3ICs4MTYsOSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6
OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JM
ZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0
V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5
KTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1
dHRlcmZseS0+Y29udGlndW91cygpOwogfQogCkBAIC03OTcsNyArODUxLDkgQEAgQXJyYXlTdG9y
YWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIGxl
bmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlTdG9yYWdl
KiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCkBAIC04ODAsNyArOTM2LDkgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0
cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAt
OTM1LDcgKzk5Myw5IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1
dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3
U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtOTgxLDcgKzEwNDEs
OSBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAg
IAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0
b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTEwMDYsNyArMTA2OCwyMiBAQCBBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKKyAgICAv
LyBUaGlzIGhhcyBhIGNyYXp5IHJhY2Ugd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFdoZW4g
Y2hhbmdpbmcgdGhlIGJ1dHRlcmZseSBhbmQgc3RydWN0dXJlLAorICAgIC8vIHRoZSBtdXRhdG9y
IGFsd2F5cyBzZXRzIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gVGhlIGNvbGxlY3RvciB3aWxsIGFsd2F5
cyByZWFkIHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBmaXJzdC4gV2UgcHJvYmFibHkgaGF2ZSB0byBm
b2xsb3cgdGhhdCBjb252ZW50aW9uIGhlcmUgYXMgd2VsbC4gVGhpcyBtZWFucyB0aGF0IHRoZSBj
b2xsZWN0b3IKKyAgICAvLyB3aWxsIHNvbWV0aW1lcyBzZWUgdGhlIG5ldyBidXR0ZXJmbHkgKHRo
ZSBvbmUgd2l0aCBBcnJheVN0b3JhZ2UpIHdpdGggdGhlIG9ubHkgc3RydWN0dXJlICh0aGUKKyAg
ICAvLyBvbmUgdGhhdCBzYXlzIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBDb250aWd1b3VzKS4gV2hl
biBzY2FubmluZyBDb250aWd1b3VzLCB0aGUgY29sbGVjdG9yIHdpbGwKKyAgICAvLyBtYXJrIHdv
cmQgYXQgYWRkcmVzc2VzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYnV0dGVyZmx5IHBv
aW50ZXIsIHVwIHRvIHRoZSBwdWJsaWNMZW5ndGgKKyAgICAvLyBpbiB0aGUgYnV0dGVyZmx5LiBC
dXQgYW4gQXJyYXlTdG9yYWdlIGhhcyBzb21lIG5vbi1wb2ludGVyIGhlYWRlciBkYXRhIGF0IGxv
dyBwb3NpdGl2ZQorICAgIC8vIG9mZnNldHMgZnJvbSB0aGUgYnV0dGVyZmx5IC0gc28gd2hlbiB0
aGlzIHJhY2UgaGFwcGVucywgdGhlIGNvbGxlY3RvciB3aWxsIHN1cmVseSBjcmFzaAorICAgIC8v
IGJlY2F1c2UgaXQgd2lsbCBmYWlsIHRvIGRlY29kZSB0d28gY29uc2VjdXRpdmUgaW50MzJzIGFz
IGlmIGl0IHdhcyBhIEpTVmFsdWUuCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgd2UgaGF2
ZSB0aGUgSlNDZWxsIGxvY2sgZm9yIHRoaXMgcHVycG9zZSEKKyAgICAKKyAgICBJbnRlcm5hbExv
Y2tlciBsb2NrZXIodGhpcyk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0
ZXJmbHkoKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdTdG9yYWdlOwogfQogCkBAIC0xNDY4LDcgKzE1NDUsNyBAQCBib29sIEpTT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5y
ZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZz
ZXQpKTsKIApAQCAtMjAxOSw3ICsyMDk2LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5k
ZXhlZFByb3BlcnR5KAogCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJm
bHkuZ2V0KCktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNF
X0FTU0VSVChtYXApOwotCisgICAgCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8g
d2l0aCBwcm9wZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKICAgICBTcGFyc2VBcnJheUVudHJ5KiBl
bnRyeUluTWFwID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC0yNzI1LDcgKzI4MDIsOCBA
QCBib29sIEpTT2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAg
ICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIo
KTsKICAgICAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3Ro
KG5ld1ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0
cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0yNzQyLDcgKzI4MjAsOCBAQCBib29sIEpTT2JqZWN0
OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0
b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVy
Zmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgc2V0
QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJm
bHkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNzYyLDYgKzI4NDEsNyBAQCBib29sIEpT
T2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgCiAgICAgdW5zaWduZWQgYXZh
aWxhYmxlT2xkTGVuZ3RoID0KICAgICAgICAgQnV0dGVyZmx5OjphdmFpbGFibGVDb250aWd1b3Vz
VmVjdG9yTGVuZ3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7CisgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBudWxscHRyOwogICAgIGlmIChhdmFpbGFibGVPbGRMZW5n
dGggPj0gbGVuZ3RoKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgc29tZW9u
ZSBlbHNlIHNlbGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNhdXNlZCBpbnRlcm5hbAogICAg
ICAgICAvLyBmcmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpvYnMgcmlnaHQsIHRoaXMgd291
bGQgbmV2ZXIgaGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNzCkBAIC0yNzc2LDE3ICsyODU2
LDI0IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAg
ICAgIG5ld1ZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgICAgICBp
ZiAoIWJ1dHRlcmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9idXR0
ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBi
dXR0ZXJmbHk7CiAgICAgfQogCi0gICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVj
dG9yTGVuZ3RoKTsKLQogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0
aDsgKytpKQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQ
TmFOOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8ZG91YmxlPigpW2ld
ID0gUE5hTjsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0
b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZs
eS0+Y29udGlndW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmluZGV4
aW5nUGF5bG9hZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KClbaV0uY2xlYXIoKTsKKyAgICB9CisK
KyAgICBpZiAobmV3QnV0dGVyZmx5KSB7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBidXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIH0KIAogICAgIHJldHVybiB0
cnVlOwpAQCAtMjgwMiwxMiArMjg4OSwxMyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRo
aXMsIHN0cnVjdHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAg
bV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNM
ZW5ndGgobGVuZ3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVy
Zmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5KiBKU09iamVj
dDo6Z3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpCitCdXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdl
KFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChu
ZXdTaXplID4gb2xkU2l6ZSk7CiAKQEAgLTMwOTIsMTUgKzMxODAsMzQgQEAgdm9pZCBKU09iamVj
dDo6Y29udmVydFRvRGljdGlvbmFyeShWTSYgdgogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRX
YXRjaHBvaW50RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVy
RmxhdHRlbmluZyhWTSYgdm0sIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90
IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFm
dGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7Ci0g
ICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKLSAgICBzaXplX3Qg
cHJlQ2FwYWNpdHkgPSB0aGlzLT5idXR0ZXJmbHlQcmVDYXBhY2l0eSgpOwotICAgIHZvaWQqIGN1
cnJlbnRCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0
eUFmdGVyKTsKLSAgICB2b2lkKiBuZXdCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5
LCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSk7CisgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZl
IHZpc2l0Q2hpbGRyZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVu
IGEgbm9uCisgICAgLy8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3Jhenkg
Y2FyZWZ1bC4gQnV0LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCisgICAgLy8gdGhl
IHN0cnVjdHVyZSdzIGxvY2sgcmlnaHQgbm93LCBhbmQgdGhhdCBoZWxwcyBhIGJpdC4KKyAgICAK
KyAgICBCdXR0ZXJmbHkqIG9sZEJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgIHNp
emVfdCBwcmVDYXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7
CisgICAgYm9vbCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7
CisgICAgaWYgKFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBh
Y2l0eSA9IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0
dXJlKTsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBvbGRCdXR0ZXJmbHkt
PmluZGV4aW5nSGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGlu
Z1BheWxvYWRTaXplSW5CeXRlcyA9IDA7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBCdXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHRoaXMsIHByZUNhcGFj
aXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQ
YXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0gICAgbWVtbW92ZShuZXdCYXNlLCBjdXJyZW50QmFzZSwg
dGhpcy0+YnV0dGVyZmx5VG90YWxTaXplKCkpOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFu
Z2luZ1N0cnVjdHVyZSh2bSwgQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdCYXNlLCBwcmVDYXBhY2l0
eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikpOworICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUg
cHJlY2FwYWNpdHkuCisgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJhc2Uo
MCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCogbmV3QmFzZSA9IG5ld0J1dHRl
cmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKworICAgIG1lbWNweShuZXdC
YXNlLCBjdXJyZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNp
dHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7
CisgICAgCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CiB9CiAKIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVu
Z3RoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ3
LDExICs3NDcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgc3RhdGljUHJvcGVydGllc1JlaWZpZWQo
KSB7IHJldHVybiBzdHJ1Y3R1cmUoKS0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsgfQogICAg
IHZvaWQgcmVpZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBv
bGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUoVk0mLCBCdXR0ZXJmbHkqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBC
dXR0ZXJmbHkqIGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwogICAgICAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYs
IEJ1dHRlcmZseSopOyAvLyBBbHdheXMgY2hhbmdlIHRoZSBidXR0ZXJmbHkgYmVmb3JlIGNoYW5n
aW5nIHRoZSBzdHJ1Y3R1cmUhCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUq
KTsKLSAgICB2b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1
dHRlcmZseSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9u
YXJ5KFZNJik7CiAKQEAgLTc1OSw3ICs3NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBz
dHJ1Y3R1cmUodm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAg
fQotICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAg
ICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXImLCBWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5l
Q2FwYWNpdHlBZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29u
c3QKICAgICB7CkBAIC05OTAsOSArOTg5LDkgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBORVZFUl9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBib29sIGdldE5vbkluZGV4
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0g
ICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSYsIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5
U2xvdChWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgdm9pZCBmaWxsQ3Vz
dG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBT
dHJ1Y3R1cmUmKTsKKyAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVy
dHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFN0cnVjdHVyZSopOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgYm9vbCBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEhhc2hUYWJsZVZh
bHVlKiBmaW5kUHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lKSBjb25zdDsKQEAgLTEyMDUs
MTQgKzEyMDQsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25zCiAg
ICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09i
amVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAg
IEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYm
ICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0ZXJmbHku
c2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KTsKLX0KLQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIyMCw3ICsx
MjExLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgogICAgIEpT
Q2VsbDo6c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBKU09i
amVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2
bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlz
LCBidXR0ZXJmbHkpOwogfQpAQCAtMTI3MywxNiArMTI2NCwxNiBAQCBpbmxpbmUgSlNWYWx1ZSBK
U09iamVjdDo6Z2V0UHJvdG90eXBlKFZNCiAKIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIG1l
dGhvZCB3aXRoIGEgUHJvcGVydHlOYW1lIHRoYXQgaXMgYWN0dWFsbHkgYW4gaW5kZXgsCiAvLyBi
dXQgaWYgc28gd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIChkb2Vzbid0IHNlYXJjaCBpbmRleCBz
dG9yYWdlKS4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwog
ICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGlmICghVHlwZUluZm86
Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KHZt
LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLQorICAgIAogICAgIC8vIGdldFByb3BlcnR5
U2xvdCByZWxpZXMgb24gdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJuaW5nIGluZGV4IHByb3BlcnRp
ZXMhCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwogCkBAIC0xMzA3LDkg
KzEyOTgsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3Rv
bUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0
dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSkKK0FM
V0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQ
cm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlz
VW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVh
YmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0dHJpYnV0
ZXMsIGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21HZXR0ZXJTZXR0ZXIpLT5nZXR0
ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1LDcgKzEzMTYsNyBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HCiBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKm9i
amVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+
c3RydWN0dXJlKHZtKTsKICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xv
dCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0
eU5hbWUpKQpAQCAtMTM1MywxMCArMTM0NCwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OmdldFByb3BlcnR5CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5nZXROb25JbmRleFBy
b3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgICAg
IEFTU0VSVChvYmplY3QtPnR5cGUoKSAhPSBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICBTdHJ1
Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVy
ZUlEKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUu
Z2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChvYmplY3QtPmdldE93bk5v
bkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmpl
Y3QoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90
b3R5cGUpOwpAQCAtMTM4NSwxMzIgKzEzNzYsNiBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6
Z2V0KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXRlbXBsYXRl
PEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewot
ICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0g
ISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVl
KSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLSAgICBBU1NFUlQo
IXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
IHsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVu
dEF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAg
ICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAm
IFJlYWRPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlk
UmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgQWNj
ZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAm
IEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3Nvcikp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKLSAg
ICAgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdl
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0g
ICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KCkpCi0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwg
dGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgp
LT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNl
dCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwotCi0gICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVl
KTsKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICBp
ZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCkt
PnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICBzaXplX3QgY3VycmVudENh
cGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUoCi0gICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBvZmZzZXQpOwotICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKLSAgICAgICAgbmV3U3Ry
dWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNpdGlvbigKLSAgICAgICAgICAg
IHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dEJ5SWQpOwotICAgICAgICAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAgICAg
ICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgewotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUo
KSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwg
Y3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0
dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0
ZXMsIGhhc0luZmVycmVkVHlwZSk7Ci0gICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7
Ci0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAm
IFJlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0cnVjdHVy
ZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJ
bmZlcnJlZFR5cGUpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9y
UmVwbGFjZSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5j
b250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotCi0gICAgICAgIGlmICgoYXR0cmlidXRlcyAmIEFj
Y2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMg
JiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3Ip
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKLSAgICAg
ICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgobW9kZSA9PSBQdXRNb2Rl
UHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgdG8g
ZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKLSAgICAvLyBzdHJ1Y3R1cmUuIFRo
aXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5ldyBzdHJ1
Y3R1cmUgaXMgdGhlIG9uZQotICAgIC8vIHdlIHdhbnQuCi0gICAgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKLSAgICAKLSAg
ICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKLSAg
ICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNs
b3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Ci0gICAgbmV3U3RydWN0dXJl
LT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAgICAgIHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwot
ICAgIAotICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKG5ld1N0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKTsKLSAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAgIGlmIChv
bGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwotICAgIGVsc2UgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOwotICAg
ICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVy
Zmx5KTsKLSAgICB9Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICBzbG90
LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFk
T25seSkKLSAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGll
cygpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0T3du
RGF0YVByb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CkBAIC0x
NTQ5LDI0ICsxNDE0LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0s
IAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAotaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRl
cigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0N1
c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0
dGVyZmx5LmdldCgpOwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVT
dG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3Rl
ZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBzdHJ1Y3R1
cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91bGRPcHRp
bWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0
aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogQUxXQVlTX0lOTElORSBKU09iamVjdCog
UmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFzT2JqZWN0KGpzVmFsdWUo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElu
bGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMyArMTA3LDEzIEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICBKU09iamVjdCog
b2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIg
ZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJs
ZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAg
ICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLmNs
YXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlw
ZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxN
ZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJl
LnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8
IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhv
ZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0
b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9
IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEzNSwxOCArMTM1LDE4IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhp
czsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFBy
b3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0
LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoTElLRUxZ
KCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KG9iamVjdC0+aW5saW5lVHlw
ZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9w
ZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJ1
Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5j
bGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAg
ICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xh
c3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBl
IHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1l
dGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUu
c3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwg
c2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0g
b2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMTU3LDYgKzE1NywzMCBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVy
KCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJm
bHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlv
bigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZdIChj
b25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7
CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91
dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVN
b3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAg
ICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cnVj
dHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwg
dmFsdWUpOworICAgICAgICB9KTsKK30KKwogLy8gRUNNQSA4LjYuMi4yCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90
JiBzbG90KQogewpAQCAtMjA3LDQgKzIzMSwxMzcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpoYXNPd25Qcm9wZQogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcykt
Pm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0
X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAor
dGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0
ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIUhlYXA6Omhl
YXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAg
IEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRUeXBlcygp
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNl
dCkgeworICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRy
aWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgICAgIHNsb3Quc2V0RXhp
c3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworCisgICAgICAgICAgICBpZiAoKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8IChhdHRy
aWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1c3RvbUFj
Y2Vzc29yKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkpOworICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1
dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5z
aWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIG9s
ZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAg
ICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisg
ICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgWyZd
IChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KSB7CisgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZs
eSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFjaXR5
LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHko
dm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbGlk
YXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNW
YWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0
eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAg
ICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVz
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldDsKKyAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCisgICAgICAgIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgIGlmIChuZXdT
dHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4aXN0
aW5nVHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKKyAgICAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IGJ1dHRlcmZseSgpOworICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld1N0
cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgQVNT
RVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVz
OworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwor
ICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICBpZiAoKG1vZGUgPT0g
UHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShv
ZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgeworICAgICAg
ICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCisgICAgICAgICAgICAg
ICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5
U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIH0KKworICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVl
KTsKKworICAgICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRy
aWJ1dGVzICYgQWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChj
dXJyZW50QXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgQVNTRVJU
KCEoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSk7CisgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0
ZW5zaWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBXZSB3YW50IHRoZSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHRvIGZpcmUgYWZ0ZXIgdGhpcyBvYmplY3Qg
aGFzIHN3aXRjaGVkCisgICAgLy8gc3RydWN0dXJlLiBUaGlzIGFsbG93cyBhZGFwdGl2ZSB3YXRj
aHBvaW50cyB0byBvYnNlcnZlIGlmIHRoZSBuZXcgc3RydWN0dXJlIGlzIHRoZSBvbmUKKyAgICAv
LyB3ZSB3YW50LgorICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
IGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CisgICAgCisgICAgbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVk
V2F0Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdU
cmFuc2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0
KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAKKyAgICB2YWxpZGF0ZU9mZnNl
dChvZmZzZXQpOworICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0
KSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIHNpemVfdCBvbGRDYXBhY2l0
eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzaXplX3QgbmV3Q2FwYWNp
dHkgPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgQVNTRVJUKG9sZENh
cGFjaXR5IDw9IG5ld0NhcGFjaXR5KTsKKyAgICBpZiAob2xkQ2FwYWNpdHkgIT0gbmV3Q2FwYWNp
dHkpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRP
ZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOworICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZs
eSk7CisgICAgfQorICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywg
b2Zmc2V0KTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICBuZXdTdHJ1
Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlw
ZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRp
emVTdGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJh
dGlvbmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3Vy
cmVudEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNv
bmN1cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVj
dENvbnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9y
Y2VGZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBz
Y3JpYmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91Ymxl
LCBzaXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFw
LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nw
YXJzZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1
Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0Lgog
Y2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEy
ICs0NSw2IEBACiAKICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNp
Zm5kZWYgTkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0j
ZWxzZQotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0K
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSAr
MTU3LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGUoKSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5VGFibGVPck51bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlN
YXBzOwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJv
cGVydHlUYWJsZSgpLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlN
YXBzU2l6ZSArPSB0YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTMwNiw3ICszMDAsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JN
CiAgICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVj
dHVyZS0+cHJldmlvdXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsK
ICAgICAgICAgCi0gICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0
KCk7CisgICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAg
ICAgICAgIGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBs
b2NrZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkK
ICAgICAgICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0z
MjEsMzAgKzMxNSwzMSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JN
CiAgICAgQVNTRVJUKCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwKFZNJiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3Bl
cnR5VGFibGUoKSk7Ci0KKyAgICAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAg
CiAgICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmU7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGU7CiAgICAgCiAgICAgZmluZFN0cnVj
dHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJs
ZSk7CiAgICAgCisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgaWYgKHRhYmxlKSB7Ci0gICAg
ICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1f
b2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHko
dm0sIGNhcGFjaXR5KTsKICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAg
fQorICAgIH0gZWxzZQorICAgICAgICB0YWJsZSA9IFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwg
Y2FwYWNpdHkpOwogICAgIAogICAgIC8vIE11c3QgaG9sZCB0aGUgbG9jayBvbiB0aGlzIHN0cnVj
dHVyZSwgc2luY2Ugd2Ugd2lsbCBiZSBtb2RpZnlpbmcgdGhpcyBzdHJ1Y3R1cmUncwogICAgIC8v
IHByb3BlcnR5IG1hcC4gV2UgZG9uJ3Qgd2FudCBnZXRDb25jdXJyZW50bHkoKSB0byBzZWUgdGhl
IHByb3BlcnR5IG1hcCBpbiBhIGhhbGYtYmFrZWQKICAgICAvLyBzdGF0ZS4KICAgICBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIGlmICghdGFi
bGUpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0sIG51bWJlck9mU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7Ci0gICAgZWxzZQotICAg
ICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgaWYgKHNldFBy
b3BlcnR5VGFibGUpCisgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsK
IAogICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxl
LmdldCgpOwogCkBAIC0zNTUsMTAgKzM1MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcChWCiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUt
PmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOwogICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVU
YWJsZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCiAgICAgICAgICAg
ICBlbnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwotICAgICAgICBwcm9wZXJ0eVRhYmxlKCkt
PmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5v
dENoYW5nZSk7CisgICAgICAgIHRhYmxlLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKICAgICBjaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CisgICAgCisgICAgcmV0dXJuIHRhYmxlOwogfQogCiBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00NzMsNyArNDcwLDcg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbgogICAgIHRyYW5zaXRp
b24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOwogICAgIHRyYW5zaXRpb24t
Pm1fbmFtZUluUHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+
c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFi
bGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJh
bnNpdGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKQEAgLTUyMSwzNiArNTE4
LDMwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KIAogU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CisgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKIAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwg
cHJvdG90eXBlKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1
cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAKKyAgICB0cmFuc2l0aW9u
LT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAg
ICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5z
aXRpb24tPnBpbigpOwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0
ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVh
dGUodm0sIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyh2bSkpOworICAgICAgICAKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKHZt
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRyYW5z
aXRpb24tPnBpbigpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsK
ICAgICB9CiAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpOwotICAgIFBy
b3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmdldChw
cm9wZXJ0eU5hbWUudWlkKCkpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAg
ICAgQVNTRVJUKGVudHJ5KTsKICAgICBlbnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAK
QEAgLTU2MSwxNyArNTUyLDE1IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFu
Z2VUcmEKIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQo
IXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2
bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRl
ZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgdHJh
bnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2
bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAg
ICB0cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChraW5kKTsKLSAgICB0cmFuc2l0aW9uLT5w
aW4oKTsKICAgICB0cmFuc2l0aW9uLT5zZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKLQorICAg
IAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4g
dHJhbnNpdGlvbjsKIH0KQEAgLTYwMywzMSArNTkyLDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpwcmV2ZW50RXh0ZW5zaW9uc1QKIAogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5p
bmcodm0sIGRlZmVyR0MpOwotICAgIAotICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkK
LSAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgp
LT5zaXplKCkgKyAxKTsKLSAgICAKLSAgICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5n
IHRoZSB0YWJsZSAtIHNvIHRoYXQgZ2V0Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQK
LSAgICAvLyB3aWxsIGVpdGhlciBoYXZlIHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2ls
bCBnZXQgdG8gdXNlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgIC8vIGJlZm9yZSBpdCBpcyBzdG9s
ZW4uCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWtlblByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAg
cHJvcGVydHlUYWJsZSgpLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsK
KyAgICAvLyBUaGlzIG11c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4n
dCByZXR1cm4gbnVsbC4KKyAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxl
T3JOdWxsKCk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LT5jb3B5KHZtLCByZXN1bHQtPnNp
emUoKSArIDEpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgICAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0
dXJuIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAK
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQog
ewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQp
OwotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5n
VHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlv
bktpbmQpOwogICAgIAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdUeXBlKHRyYW5zaXRpb25LaW5k
KSkgewogICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVy
ZS0+bV9nbG9iYWxPYmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3Qt
PmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAg
U3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAg
ICAgICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsKICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CkBAIC02MzgsNyAr
NjI1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIFN0
cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5z
aXRpb24tPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmlidXRlcyk7Ci0gICAgICAgIEFT
U0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9
PSBpbmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAt
NjQ2LDcgKzYzMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQK
ICAgICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7
CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0g
ICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAg
IHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lv
bnModHJhbnNpdGlvbktpbmQpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXREaWRQcmV2ZW50RXh0
ZW5zaW9ucyh0cnVlKTsKQEAgLTY1NywzMiArNjQ0LDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXQKICAgICAgICAgLy8gdGFibGUsIHNpbmNlIG91ciBsb2dpYyBm
b3Igd2Fsa2luZyB0aGUgcHJvcGVydHkgdHJhbnNpdGlvbiBjaGFpbiB0byByZW1hdGVyaWFsaXpl
IHRoZQogICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBhY2Nv
dW50IHN1Y2ggd2hvbGVzYWxlIGVkaXRzLgogICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlLT5t
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgICAgICB0cmFuc2l0aW9uLT5w
aW5Gb3JDYWNoaW5nKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2
bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoKTsKICAgICAgICAgCi0gICAgICAg
IGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiAqdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLmdldCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5k
KSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwot
ICAgICAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0
cmFuc2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKQotICAgICAg
ICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICAgICAg
fQorICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGVPck51bGwoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOworICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogKnRhYmxlKSB7CisgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVP
bkFsbFByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0
dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsKKyAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5v
bkFjY2Vzc29yUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9u
bHk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxl
T3JDbG9uZUlmUGlubmVkKHZtKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFi
bGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
ICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAg
ICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5l
Q2FwYWNpdHkoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vz
c29yUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkKLSAgICAgICAgJiYgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmlz
RW1wdHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKS0+
aXNFbXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKKyAgICAgICAg
dHJhbnNpdGlvbi0+cGluKHZtLCB0cmFuc2l0aW9uLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVy
ZS0+bV9sb2NrKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0s
IHRyYW5zaXRpb24pOwpAQCAtNjk4LDEzICs2ODIsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2Vh
bGVkKFZNJiB2bSkKICAgICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVy
dHlUYWJsZSgpKQorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkodm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQo
KTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxl
KCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
ICAgICAgICAgaWYgKChpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgIT0gRG9udERlbGV0
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MTcsMTMgKzcwMCwxMiBA
QCBib29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4
dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVm
ZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgIAorICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsK
KyAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYg
RG9udERlbGV0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0
ZXItPmF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpKQpAQCAtNzM2LDIxICs3MTgs
MjQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogewogICAgIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOworICAg
IAorICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7
CiAKICAgICBzaXplX3QgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVD
YXBhY2l0eSgpOwogICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAg
IEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOworICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgQVNTRVJUKHRhYmxlKTsKIAotICAgICAg
ICBzaXplX3QgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpOworICAgICAg
ICBzaXplX3QgcHJvcGVydHlDb3VudCA9IHRhYmxlLT5zaXplKCk7CiAKICAgICAgICAgLy8gSG9s
ZHMgb3VyIHZhbHVlcyBjb21wYWN0ZWQgYnkgaW5zZXJ0aW9uIG9yZGVyLgogICAgICAgICBWZWN0
b3I8SlNWYWx1ZT4gdmFsdWVzKHByb3BlcnR5Q291bnQpOwogCiAgICAgICAgIC8vIENvcGllcyBv
dXQgb3VyIHZhbHVlcyBmcm9tIHRoZWlyIGhhc2hlZCBsb2NhdGlvbnMsIGNvbXBhY3RpbmcgcHJv
cGVydHkgdGFibGUgb2Zmc2V0cyBhcyB3ZSBnby4KICAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0g
ICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5k
KCk7CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsK
ICAgICAgICAgbV9vZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIsICsraSkgeworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAg
ICAgICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwogICAg
ICAgICAgICAgbV9vZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJl
cihpLCBtX2lubGluZUNhcGFjaXR5KTsKICAgICAgICAgfQpAQCAtNzU5LDcgKzc0NCw3IEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKICAgICAgICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0KHZtLCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5
KSwgdmFsdWVzW2ldKTsKIAotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmNsZWFyRGVsZXRlZE9m
ZnNldHMoKTsKKyAgICAgICAgdGFibGUtPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKICAgICAgICAg
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIH0KIApAQCAtNzY4LDU1ICs3NTMsMzQgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogCiAgICAgc2l6ZV90IGFm
dGVyT3V0T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCi0gICAg
aWYgKGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsK
KyAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAh
PSBhZnRlck91dE9mTGluZUNhcGFjaXR5KSB7CiAgICAgICAgIEFTU0VSVChiZWZvcmVPdXRPZkxp
bmVDYXBhY2l0eSA+IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAvLyBJZiB0aGUg
b2JqZWN0IGhhZCBhIEJ1dHRlcmZseSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdl
IG5vIGxvbmdlciBoYXZlIG5lZWQgb2YgaXQsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gemVybyBp
dCBvdXQgYmVjYXVzZSB0aGUgY29sbGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVyZSB0byBr
bm93IHRoZSBzaXplIGZvciBjb3B5aW5nLgotICAgICAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHko
KSAmJiAhYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIo
b2JqZWN0KSkKLSAgICAgICAgICAgIG9iamVjdC0+c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCB0aGlzLCAwKTsKKyAgICAgICAgaWYgKCFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlz
LT5oYXNJbmRleGluZ0hlYWRlcihvYmplY3QpKQorICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHkodm0sIG51bGxwdHIpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNp
emVkIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxv
bmdlciB3aXRoaW4gdGhlIAogICAgICAgICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXpl
IGJ5dGVzLCB3ZSdsbCBnZXQgdGhlIHdyb25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUg
YmFzZSBiYWNrIHRvIAogICAgICAgICAvLyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2
ZW50IHRoaXMgY2FzZSB3ZSBuZWVkIHRvIG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgotICAg
ICAgICBlbHNlIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5z
aGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHks
IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmpl
Y3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGFmdGVy
T3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotfQotCi1Qcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKLSAgICBwaW4oKTsKLQotICAg
IHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0g
ICAgcGluKCk7Ci0gICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiB0
aGlzOwogfQogCi12b2lkIFN0cnVjdHVyZTo6cGluKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oVk0m
IHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgp
KTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlU
YWJsZSh2bSwgdGFibGUpOwogICAgIGNsZWFyUHJldmlvdXNJRCgpOwogICAgIG1fbmFtZUluUHJl
dmlvdXMgPSBudWxscHRyOwogfQogCi12b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZygpCit2
b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxl
KQogewotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVy
dHlUYWJsZSh0cnVlKTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgbV9u
YW1lSW5QcmV2aW91cyA9IG51bGxwdHI7CiB9CiAKQEAgLTg5MSwxNyArODU1LDEzIEBAIHZvaWQg
U3RydWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCiAgICAgfQogCiAgICAgLy8gVGhpcyBvbmx5
IHdvcmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgotICAgIFByb3BlcnR5VGFibGUq
IHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZt
LCBwcm9wZXJ0eVRhYmxlKTsKLQorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBl
bnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKyAgICAKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcg
dGhpcyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVk
IHRoYXQgaXQgd2FzIHByZXNlbnQKLSAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBw
cm9wZXJ0eSB0YWJsZSBub3cuCi0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOwotCi0gICAgLy8g
Li4uIGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIC8vIGFscmVhZHksIHNv
IHRoZSBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCiAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50
cnkgPSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBBU1NFUlQo
ZW50cnkpOwotCisgICAgCiAgICAgaWYgKHNob3VsZE9wdGltaXplKQogICAgICAgICBlbnRyeS0+
aGFzSW5mZXJyZWRUeXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCBhZ2UpOwogICAgIGVsc2UgewpAQCAtOTQzLDE4ICs5MDMsMTIgQEAgUHJvcGVydHlN
YXBTdGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcgogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJs
ZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCi17Ci0gICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7Ci19Ci0KIFByb3BlcnR5VGFibGUq
IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBp
ZiAocHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
dm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
cmVhdGUodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNh
cGFjaXR5KSk7CisgICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9y
TnVsbCgpKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7
CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzKQpAQCAtOTg5LDcwICs5NDMsMjQgQEAgVmVjdG9yPFByb3BlcnR5
TWFwRW50cnk+IFN0cnVjdHVyZTo6Z2V0UAogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFk
ZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CiB7Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFw
KTsKLSAgICAKLSAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5
TmFtZSkpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBpZiAoYXR0cmlidXRlcyAm
IERvbnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICBzZXRJc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOwotCi0gICAgYXV0byBy
ZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAg
ICAgICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7Ci0KLSAgICBQcm9wZXJ0eU9mZnNl
dCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0
eSk7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3
T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zm
c2V0TWF5Q2hhbmdlKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJu
IG5ld09mZnNldDsKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsg
fSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5
TmFtZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRp
b24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKLSAgICBpZiAoIXBvc2l0aW9uLmZpcnN0
KQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPnJl
bW92ZShwb3NpdGlvbik7Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0KG9m
ZnNldCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0K
LQotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXImLCBWTSYgdm0sIHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIEFTU0VSVCgh
cHJvcGVydHlUYWJsZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBwcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5
KSk7CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpn
ZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBw
cm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBk
ZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxl
KQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBib29sIGtub3duVW5pcXVlID0gcHJvcGVy
dHlOYW1lcy5jYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpOwotCi0gICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgQVNTRVJU
KCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhKGl0ZXIt
PmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwogICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0
eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbigpIHx8ICFpdGVyLT5rZXktPmlzU3ltYm9sKCkp
OwogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUuaW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcygpKSB7CkBAIC0xMTE0LDYgKzEwMjIsOSBAQCB2b2lkIFN0
cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkp
CiAgICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKQEAg
LTEyNzYsOTIgKzExODcsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIoUHJp
bnRTCiAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwogfQogCi0jaWYgRE9fUFJPUEVSVFlN
QVBfQ09OU1RFTkNZX0NIRUNLCi0KLXZvaWQgUHJvcGVydHlUYWJsZTo6Y2hlY2tDb25zaXN0ZW5j
eSgpCi17Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID49IFByb3BlcnR5VGFibGU6Ok1pbmltdW1U
YWJsZVNpemUpOwotICAgIEFTU0VSVChtX2luZGV4TWFzayk7Ci0gICAgQVNTRVJUKG1faW5kZXhT
aXplID09IG1faW5kZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJUKCEobV9pbmRleFNpemUgJiBtX2lu
ZGV4TWFzaykpOwotCi0gICAgQVNTRVJUKG1fa2V5Q291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsK
LSAgICBBU1NFUlQobV9rZXlDb3VudCArIG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8g
Mik7Ci0gICAgQVNTRVJUKG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gNCk7Ci0KLSAg
ICB1bnNpZ25lZCBpbmRleENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3Vu
dCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX2luZGV4U2l6ZTsgKythKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX2luZGV4W2FdOwotICAgICAgICBpZiAo
ZW50cnlJbmRleCA9PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZEVudHJ5SW5kZXgo
KSkgewotICAgICAgICAgICAgKytkZWxldGVkSW5kZXhDb3VudDsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IDwgZGVsZXRlZEVudHJ5
SW5kZXgoKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IC0gMSA8PSB1c2VkQ291bnQoKSk7
Ci0gICAgICAgICsraW5kZXhDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGIgPSBhICsg
MTsgYiAhPSBtX2luZGV4U2l6ZTsgKytiKQotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhbYl0g
IT0gZW50cnlJbmRleCk7Ci0gICAgfQotICAgIEFTU0VSVChpbmRleENvdW50ID09IG1fa2V5Q291
bnQpOwotICAgIEFTU0VSVChkZWxldGVkSW5kZXhDb3VudCA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0K
LSAgICBBU1NFUlQoIXRhYmxlKClbZGVsZXRlZEVudHJ5SW5kZXgoKSAtIDFdLmtleSk7Ci0KLSAg
ICB1bnNpZ25lZCBub25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9
IDA7IGMgPCB1c2VkQ291bnQoKTsgKytjKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IHRh
YmxlKClbY10ua2V5OwotICAgICAgICBpZiAocmVwID09IFBST1BFUlRZX01BUF9ERUxFVEVEX0VO
VFJZX0tFWSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICArK25vbkVtcHR5RW50cnlD
b3VudDsKLSAgICAgICAgdW5zaWduZWQgaSA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCk7
Ci0gICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4Owot
ICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1faW5kZXhbaSAm
IG1faW5kZXhNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRyeUluZGV4ICE9IFByb3BlcnR5
VGFibGU6OkVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVwID09IHRhYmxlKClb
ZW50cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlmIChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKElkZW50aWZp
ZXJSZXBIYXNoOjpoYXNoKHJlcCkpOwotICAgICAgICAgICAgaSArPSBrOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChlbnRyeUluZGV4ID09IGMgKyAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
bm9uRW1wdHlFbnRyeUNvdW50ID09IG1fa2V5Q291bnQpOwotfQotCi12b2lkIFN0cnVjdHVyZTo6
Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0g
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc1F1
aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSkgewotICAgICAgICBQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgICAg
ICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGl0ZXIt
PmF0dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5rZXkt
PmlzU3ltYm9sKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5j
aGVja0NvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6
Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotfQot
Ci0jZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KIGJvb2wgQ2xhc3NJ
bmZvOjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAg
Zm9yIChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxNyArMTgzLDE5IEBAIHB1YmxpYzoKICAgICBKU19F
WFBPUlRfUFJJVkFURSBib29sIGlzU2VhbGVkKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc0Zyb3plbihWTSYpOwogICAgIGJvb2wgaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkgY29u
c3QgeyByZXR1cm4gIWRpZFByZXZlbnRFeHRlbnNpb25zKCk7IH0KLSAgICBib29sIHB1dFdpbGxH
cm93T3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiwgSlNPYmplY3QqKTsKIAogICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24u
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAg
ICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJv
cGVydHlOYW1lKTsKKyAgICAvLyBWZXJzaW9ucyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBp
dCBhZnRlciBtYWtpbmcgdGhlIGNoYW5nZSBidXQgd2hpbGUgc3RpbGwgaG9sZGluZworICAgIC8v
IHRoZSBsb2NrLiBUaGUgY2FsbGJhY2sgaXMgbm90IGNhbGxlZCBpZiB0aGVyZSBpcyBubyBjaGFu
Z2UgYmVpbmcgbWFkZSwgbGlrZSBpZiB5b3UgY2FsbAorICAgIC8vIHJlbW92ZVByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oKSBhbmQgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZC4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0
IEZ1bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0
IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIGNvbnN0
IEZ1bmMmKTsKICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwg
SlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUp
OyB9CiAgICAgICAgIAogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGlj
dGlvbmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KQEAgLTIyOSw4ICsyMzEsOCBA
QCBwdWJsaWM6CiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291
dE9mTGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
dHlwZUluZm8oKS5pc09iamVjdCgpOyB9CiAKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpICYgQWxsQXJyYXlUeXBlczsg
fQotICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0
b3J5KCkgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpOyB9CiAgICAgICAgIAogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkgY29uc3QKICAgICB7CkBAIC00MzMsOSArNDM1LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0K
ICAgICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSAr
IFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHN0YXRp
YyBwdHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCkBAIC01NzksNiArNTgxLDgg
QEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1bXBDb250ZXh0SGVhZGVyKFByaW50
U3RyZWFtJik7CiAgICAgCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBt
X2xvY2s7IH0KKyAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAt
NjMzLDQ0ICs2MzcsNDUgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQsIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9w
ZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFBy
b3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9w
ZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+JiBw
cm9wZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNs
b25lSWZQaW5uZWQoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShW
TSYpOwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYp
OwotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkoVk0mIHZtLCBEZWZlckdDJikKKyAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBsb2NrLCBvciBu
b3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBQ
cm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eShWTSYgdm0pCiAgICAg
ewotICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgQVNTRVJUKGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSk7Ci0gICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpICYm
IHByZXZpb3VzSUQoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOwor
ICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
LmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFwcmV2aW91
c0lEKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1hdGVy
aWFsaXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiYg
dGFibGUpCisgICAgCisgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBu
b3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlU
YWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYgdm0pCiAgICAgewotICAgICAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKSk7Ci0gICAgICAgIHRhYmxlID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAgICAgICBp
ZiAoIXRhYmxlICYmIHByZXZpb3VzSUQoKSkgewotICAgICAgICAgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwotICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7Ci0gICAg
ICAgICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgp
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQotICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5Rm9yUGlubmluZyhWTSYgdm0sIERlZmVyR0MmKQorICAgIAorICAgIFByb3Bl
cnR5VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICBjaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAg
ICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CisgICAgICAgIHJldHVybiBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUuZ2V0KCk7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2lsbCBncmFi
IHRoZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2su
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7CisgICAgCisgICAgdm9p
ZCBzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIAor
ICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7
CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7CiAK
ICAgICB2b2lkIHNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7CkBAIC02OTcsOCArNzAyLDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQoSlNHbG9i
YWxPYmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0Owog
ICAgIGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90
eXBlQ2hhaW4pIGNvbnN0OwogICAgICAgICAKLSAgICB2b2lkIHBpbigpOwotICAgIHZvaWQgcGlu
Rm9yQ2FjaGluZygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcGluKFZNJiwgUHJvcGVy
dHlUYWJsZSopOworICAgIHZvaWQgcGluRm9yQ2FjaGluZyhWTSYsIFByb3BlcnR5VGFibGUqKTsK
ICAgICAKICAgICBib29sIGlzUmFyZURhdGEoSlNDZWxsKiBjZWxsKSBjb25zdAogICAgIHsKQEAg
LTcxMCw3ICs3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1fcHJldmlv
dXNPclJhcmVEYXRhLmdldCgpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgYm9vbCBjaGVja09m
ZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFs
bG9jYXRlUmFyZURhdGEoVk0mKTsKQEAgLTc0MCw3ICs3NDUsNyBAQCBwcml2YXRlOgogCiAgICAg
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCi0gICAgLy8gU2hv
dWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1h
eSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KKyAgICAvLyBTaG91bGQgYmUgYWNjZXNz
ZWQgdGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNl
dCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgogICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3Qg
R0Mgd2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgogICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJREJsb2IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxMCArNDAsMTAgQEAgcHVibGlj
OgogICAgICAgICB1LmRvdWJsZVdvcmQgPSAweGJiYWRiZWVmOwogICAgIH0KIAotICAgIFN0cnVj
dHVyZUlEQmxvYihTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCwgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQorICAgIFN0cnVjdHVyZUlEQmxvYihTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnksIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKICAgICB7CiAgICAgICAgIHUuZmllbGRz
LnN0cnVjdHVyZUlEID0gc3RydWN0dXJlSUQ7Ci0gICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlw
ZSA9IGluZGV4aW5nVHlwZTsKKyAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7CiAgICAgICAgIHUuZmllbGRz
LnR5cGUgPSB0eXBlSW5mby50eXBlKCk7CiAgICAgICAgIHUuZmllbGRzLmlubGluZVR5cGVGbGFn
cyA9IHR5cGVJbmZvLmlubGluZVR5cGVGbGFncygpOwogICAgICAgICB1LmZpZWxkcy5kZWZhdWx0
Q2VsbFN0YXRlID0gQ2VsbFN0YXRlOjpOZXdXaGl0ZTsKQEAgLTUyLDggKzUyLDggQEAgcHVibGlj
OgogICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUlEQmxvYiYgb3RoZXIpIHsgdS5k
b3VibGVXb3JkID0gb3RoZXIudS5kb3VibGVXb3JkOyB9CiAgICAgCiAgICAgU3RydWN0dXJlSUQg
c3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5zdHJ1Y3R1cmVJRDsgfQotICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRl
eGluZ1R5cGU7IH0KLSAgICB2b2lkIHNldEluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlKSB7IHUuZmllbGRzLmluZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsgfQorICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4g
dS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsgfQorICAgIHZvaWQgc2V0SW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsgfQogICAgIEpTVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gdS5maWVsZHMudHlwZTsgfQogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgaW5s
aW5lVHlwZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5saW5lVHlwZUZsYWdzOyB9
CiAgICAgCkBAIC02NywxNiArNjcsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuc3RydWN0dXJlSUQpOwogICAgIH0K
IAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMg
cHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmlu
ZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURC
bG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICB9CiAKIHBy
aXZhdGU6CiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgU3RydWN0
dXJlSUQgc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
OworICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7
CiAgICAgICAgICAgICBKU1R5cGUgdHlwZTsKICAgICAgICAgICAgIFR5cGVJbmZvOjpJbmxpbmVU
eXBlRmxhZ3MgaW5saW5lVHlwZUZsYWdzOwogICAgICAgICAgICAgQ2VsbFN0YXRlIGRlZmF1bHRD
ZWxsU3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw4ICs5
Myw3IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOwogCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUp
OworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxl
SWZOb3RFbXB0eSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQogICAgICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKIApAQCAtMjE5LDMxICsyMTgsNiBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1
cmU6OmlzVmFsaWQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7CiB9CiAKLWlubGluZSBib29sIFN0
cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICBjaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7Ci0KLSAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRP
ZkxpbmVTaXplKCkpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldCht
X29mZnNldCk7Ci0gICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRT
aXplKTsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7
Ci0gICAgfQotCi0gICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gcHJvcGVydHlU
YWJsZSgpLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkt
Pmhhc0RlbGV0ZWRPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkpOwotICAg
IHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgp
OwotfQotCi1BTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgU3RydWN0
dXJlOjpwcm9wZXJ0eVRhYmxlKCkKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
OwotfQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKExJS0VMWSghaGFzUmFyZURhdGEoKSkpCkBAIC0y
NzEsNyArMjQ1LDcgQEAgaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydAog
CiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkg
Y29uc3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlLmdldCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAg
QVNTRVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC0yOTIsNiArMjY2LDExIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2UKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKK3sKKyAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7Cit9CisKIGlubGluZSBzaXplX3QgbmV4dE91dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQogewogICAgIGlmICghY3Vy
cmVudENhcGFjaXR5KQpAQCAtMjk5LDExICsyNzgsNiBAQCBpbmxpbmUgc2l6ZV90IG5leHRPdXRP
ZkxpbmVTdG9yYWdlQ2FwYWNpCiAgICAgcmV0dXJuIGN1cnJlbnRDYXBhY2l0eSAqIG91dE9mTGlu
ZUdyb3d0aEZhY3RvcjsKIH0KIAotaW5saW5lIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5l
d091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpCi17Ci0gICAgcmV0dXJuIG5leHRPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkob3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci19Ci0KIGlubGluZSB2b2lkIFN0
cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
SlNTdHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KQogewog
ICAgIGlmICghaGFzUmFyZURhdGEoKSkKQEAgLTMxMSw0ICsyODUsODUgQEAgaW5saW5lIHZvaWQg
U3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZwogICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRv
U3RyaW5nVmFsdWUoZXhlYywgdm0sIHRoaXMsIHZhbHVlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3Qp
OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOworCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICAKKyAgICBzZXRQcm9wZXJ0eVRhYmxl
KHZtLCB0YWJsZSk7CisgICAgCisgICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZt
LCBwcm9wZXJ0eU5hbWUpKSk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgaWYgKGF0
dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKKyAgICAgICAg
c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKKwor
ICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOworCisgICAgUHJvcGVydHlPZmZzZXQg
bmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgCisg
ICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVz
KSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAg
ICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgbmV3T2Zmc2V0
KTsKKyAgICByZXR1cm4gbmV3T2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBhdXRv
IHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAgICAKKyAgICAvLyBXZSBPTkxZIHJlbW92ZSBm
cm9tIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcywgd2hpY2ggd2lsbCBoYXZlIGEgcGlubmVkIHBy
b3BlcnR5IHRhYmxlLgorICAgIC8vIFRoZSBvbmx5IHdheSBmb3IgdGhlbSBub3QgdG8gaGF2ZSBh
IHRhYmxlIGlzIGlmIHRoZXkgYXJlIGVtcHR5LgorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
cHJvcGVydHlUYWJsZU9yTnVsbCgpOworCisgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CisKKyAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0
aW9uID0gdGFibGUtPmZpbmQocmVwKTsKKyAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQorICAgICAg
ICByZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OworCisgICAgdGFibGUtPnJlbW92ZShwb3NpdGlvbik7
CisgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKKworICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworICAgIHJldHVybiBvZmZzZXQ7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sK
KyAgICBwaW4odm0sIGVuc3VyZVByb3BlcnR5VGFibGUodm0pKTsKKyAgICAKKyAgICByZXR1cm4g
YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworICAgIEFTU0VSVChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CisgICAgQVNTRVJUKHByb3Bl
cnR5VGFibGVPck51bGwoKSk7CisgICAgCisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUs
IGZ1bmMpOworfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5VGFibGUoVk0m
IHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKK3sKKyAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUu
c2V0TWF5QmVOdWxsKHZtLCB0aGlzLCB0YWJsZSk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE2LTExLTExICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIEdDIHNob3VsZCBiZSBvcHRpb25hbGx5IGNv
bmN1cnJlbnQgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQ1NAorCisgICAgICAgIFJldmlld2VkIGJ5IEdl
b2ZmcmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgSSB3ZW50IHRv
IHN1Y2ggZ3JlYXQgcGFpbnMgdG8gbWFrZSBXVEY6OkxvY2sgZml0IGluIHR3byBiaXRzIGlzIHRo
YXQgSQorICAgICAgICBrbmV3IHRoYXQgSSB3b3VsZCBldmVudHVhbGx5IG5lZWQgdG8gc3R1ZmYg
b25lIGludG8gc29tZSBtaXNjZWxsYW5lb3VzIGJpdHMgb2YgdGhlCisgICAgICAgIEpTQ2VsbCBo
ZWFkZXIuIFRoYXQgdGltZSBoYXMgY29tZSwgYmVjYXVzZSB0aGUgY29uY3VycmVudCBHQyBoYXMg
bnVtZXJvdXMgcmFjZQorICAgICAgICBjb25kaXRpb25zIGluIHZpc2l0Q2hpbGRyZW4gdGhhdCBj
YW4gYmUgdHJpdmlhbGx5IGZpeGVkIGlmIGVhY2ggb2JqZWN0IGp1c3QgaGFzIGFuCisgICAgICAg
IGludGVybmFsIGxvY2suIFNvbWUgY2VsbCB0eXBlcyBtaWdodCB1c2UgaXQgdG8gc2ltcGx5IHBy
b3RlY3QgdGhlaXIgZW50aXJlIHZpc2l0Q2hpbGRyZW4KKyAgICAgICAgZnVuY3Rpb24gYW5kIGFu
eXRoaW5nIHRoYXQgbXV0YXRlcyB0aGUgZmllbGRzIGl0IHRvdWNoZXMsIHdoaWxlIG90aGVyIGNl
bGwgdHlwZXMgbWlnaHQKKyAgICAgICAgdXNlIGl0IGFzIGEgImxvY2sgb2YgbGFzdCByZXNvcnQi
IHRvIGhhbmRsZSBjb3JuZXIgY2FzZXMgb2YgYW4gb3RoZXJ3aXNlIHdhaXQtZnJlZSBvcgorICAg
ICAgICBsb2NrLWZyZWUgYWxnb3JpdGhtLiBSaWdodCBub3csIGl0J3MgdXNlZCB0byBwcm90ZWN0
IGNlcnRhaW4gdHJhbnNmb3JtYXRpb25zIGludm9sdmluZworICAgICAgICBpbmRleGluZyBzdG9y
YWdlLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGhhcHBlbiwgSSBmYWN0b3JlZCB0
aGUgV1RGOjpMb2NrIGFsZ29yaXRobSBpbnRvIGEgTG9ja0FsZ29yaXRobSBzdHJ1Y3QgdGhhdAor
ICAgICAgICBpcyB0ZW1wbGF0aXplZCBvbiBsb2NrIHR5cGUgKHVpbnQ4X3QgZm9yIFdURjo6TG9j
ayksIHRoZSBpc0hlbGRCaXQgdmFsdWUgKDEgZm9yCisgICAgICAgIFdURjo6TG9jayksIGFuZCB0
aGUgaGFzUGFya2VkQml0IHZhbHVlICgyIGZvciBXVEY6OkxvY2spLiBUaGlzIGNvdWxkIGhhdmUg
YmVlbiBkb25lIGFzCisgICAgICAgIGEgdGVtcGxhdGl6ZWQgTG9jayBjbGFzcyB0aGF0IGJhc2lj
YWxseSBjb250YWlucyBBdG9taWM8TG9ja1R5cGU+LiBZb3UgY291bGQgdGhlbiBtYWtlCisgICAg
ICAgIGFueSBmaWVsZCBpbnRvIGEgbG9jayBieSBiaXR3aXNlX2Nhc3RpbmcgaXQgdG8gVGVtcGxh
dGVMb2NrPGZpZWxkIHR5cGUsIGJpdDEsIGJpdDI+LiBCdXQKKyAgICAgICAgdGhpcyBmZWx0IHRv
byBkaXJ0eSwgc28gaW5zdGVhZCwgTG9ja0FsZ29yaXRobSBoYXMgc3RhdGljIG1ldGhvZHMgdGhh
dCB0YWtlCisgICAgICAgIEF0b21pYzxMb2NrVHlwZT4mIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50
LiBJIHRoaW5rIHRoYXQgdGhpcyBtYWtlcyBpdCBtb3JlIG5hdHVyYWwgdG8KKyAgICAgICAgcHJv
amVjdCBhIExvY2tBbGdvcml0aG0gb250byBhbiBleGlzdGluZyBBdG9taWM8PiBmaWVsZC4gU2Fk
bHksIHNvbWUgcGxhY2VzIGhhdmUgdG8gY2FzdAorICAgICAgICB0aGVpciBub24tQXRvbWljPD4g
ZmllbGQgdG8gQXRvbWljPD4gaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yay4gTGlrZSBzbyBtYW55
IG90aGVyIHRoaW5ncworICAgICAgICB3ZSBkbywgdGhpcyBqdXN0IHNob3dzIHRoYXQgdGhlIEMr
KyBzdHlsZSBvZiBsYWJlbGluZyBmaWVsZHMgdGhhdCBhcmUgc3ViamVjdCB0byBhdG9taWMKKyAg
ICAgICAgb3BzIGFzIGF0b21pYyBpcyBjb3VudGVycHJvZHVjdGl2ZS4gTWF5YmUgc29tZSBkYXkg
SSdsbCBjaGFuZ2UgTG9ja0FsZ29yaXRobSB0byB1c2Ugb3VyCisgICAgICAgIG90aGVyIEF0b21p
Y3MgQVBJLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIEF0b21pYzw+LgorICAgICAgICAKKyAgICAg
ICAgV1RGOjpMb2NrIG5vdyB1c2VzIExvY2tBbGdvcml0aG0uIFRoZSBzbG93IHBhdGhzIGFyZSBz
dGlsbCBvdXRsaW5lZC4gSSBkb24ndCBmZWVsIHRvbworICAgICAgICBiYWQgYWJvdXQgdGhlIExv
Y2tBbGdvcml0aG0uaCBoZWFkZXIgYmVpbmcgaW5jbHVkZWQgaW4gc28gbWFueSBwbGFjZXMgYmVj
YXVzZSB3ZSBjaGFuZ2UKKyAgICAgICAgdGhhdCBhbGdvcml0aG0gc28gaW5mcmVxdWVudGx5Lgor
ICAgICAgICAKKyAgICAgICAgQWxzbywgSSBhZGRlZCBhIGhhc0VsYXBzZWQodGltZSkgZnVuY3Rp
b24uIFRoaXMgZnVuY3Rpb24gbWFrZXMgaXQgc28gbXVjaCBtb3JlIG5hdHVyYWwKKyAgICAgICAg
dG8gd3JpdGUgdGltZXNsaWNpbmcgY29kZSwgd2hpY2ggdGhlIGNvbmN1cnJlbnQgR0MgaGFzIHRv
IGRvIGEgbG90IG9mLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9MaXN0RHVtcC5o
OgorICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tT
bG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3cpOgorICAgICAgICAoV1RG
OjpMb2NrQmFzZTo6dW5sb2NrRmFpcmx5U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1
bmxvY2tTbG93SW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0xvY2suaDoKKyAgICAgICAg
KFdURjo6TG9ja0Jhc2U6OmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dHJ5TG9jayk6
CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFz
ZTo6dW5sb2NrRmFpcmx5KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmlzSGVsZCk6CisgICAg
ICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9Mb2NrQWxnb3JpdGhtLmg6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrRmFzdEFzc3VtaW5nWmVybyk6CisgICAg
ICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0KToKKyAgICAgICAgKFdURjo6TG9ja0Fs
Z29yaXRobTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnRyeUxvY2spOgor
ICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKToKKyAg
ICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdCk6CisgICAgICAgIChXVEY6Okxv
Y2tBbGdvcml0aG06OnVubG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9j
a0ZhaXJseSk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmlzTG9ja2VkKToKKyAgICAg
ICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQWxn
b3JpdGhtOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcDoKKyAgICAgICAgKFdURjo6aGFzRWxhcHNlZCk6CisgICAgICAgICogd3RmL1RpbWVX
aXRoRHluYW1pY0Nsb2NrVHlwZS5oOgorCiAyMDE2LTExLTExICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWxsb3cgbXV0YWJsZSBsYW1iZGFz
IGluIEhhc2hNYXA6OmVuc3VyZQpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qIEJl
Z2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAv
KiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJMEYwRkNEREUx
REQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2Nr
QWxnb3JpdGhtLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJh
YmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmgg
Ki87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0Rjcw
MEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CkBA
IC0zNzQsNiArMzc1LDcgQEAKIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICov
CiAJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Tm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEZDREREMUREMTY3Rjkw
MENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2
QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4
QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3
MkMxMTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICovLAogCQkJCTBGRTE2NDY4MUI2
RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKIAkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBF
N0MgLyogTG9jay5oICovLAorCQkJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxn
b3JpdGhtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICov
LAogCQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAq
LywKIAkJCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8sCkBA
IC0xMzIzLDYgKzEzMjYsNyBAQAogCQkJCUE4QTQ3MzlCMTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYx
OEEwQ0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDNBMTUxQTgyNUIwMDQxMjNGRiAvKiBDU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDczOUQxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RjE1MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTExNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRo
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwzNiBA
QCBzdHJ1Y3QgQXRvbWljIHsKICAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2VYb3IoVSBvcGVy
YW5kLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Qp
IHsgcmV0dXJuIHZhbHVlLmZldGNoX3hvcihvcGVyYW5kLCBvcmRlcik7IH0KICAgICAKICAgICBB
TFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2UoVCBuZXdWYWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5leGNoYW5nZShu
ZXdWYWx1ZSwgb3JkZXIpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1
bmMpCisgICAgeworICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxheGVkKTsKKyAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAgICBmdW5jKG5l
d1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKG9sZFZh
bHVlLCBuZXdWYWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYXRpb25SZWxheGVkKGZ1bmMpKSB7IH0K
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCB0cnlUcmFuc2FjdGlvbihjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgVCBv
bGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIFQgbmV3
VmFsdWUgPSBvbGRWYWx1ZTsKKyAgICAgICAgZnVuYyhuZXdWYWx1ZSk7CisgICAgICAgIHJldHVy
biBjb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rp
b24oY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHdoaWxlICghdHJ5VHJhbnNhY3Rp
b24oZnVuYykpIHsgfQorICAgIH0KIAogICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVlOwogfTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RG
X0hFQURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAgTG9j
ay5oCisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAgIE1h
aW5UaHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBM
aXN0RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1
c2luZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcg
V1RGOjpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcg
V1RGOjpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2Vu
ZGlmIC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIxIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAiRGF0
YUxvZy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0
cmVhbS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJl
YWQ+Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tC
YXNlOjpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8v
IFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3Qg
SmlrZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7
Ci0gICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUg
PSBtX2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5
dGVWYWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJn
ZSBpbi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAg
ICAgICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1
cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28g
bXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsK
LSAgICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TmVlZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3Qs
IGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJr
ZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBp
ZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFs
dWUgfCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
V2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBh
cyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJr
UmVzdWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBh
cmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtS
ZXN1bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9r
ZW4+KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMg
aGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAg
ICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMg
cmVsZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3
b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9j
ay4gQnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRo
ZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFs
dWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRy
eSBhZ2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0
ZSk7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJ
bXBsKFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRl
LCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5s
b2NrRmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVS
X0lOTElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykK
LXsKLSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxv
Y2soKSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVv
bmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUg
bG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlm
IHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAg
Zm9yICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xk
Qnl0ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9i
eXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNv
bWVvbmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0
aGUgbG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1
bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9y
IGJhcmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBh
cmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0g
ICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZh
bHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6
dW5wYXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2lu
Z0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxk
Qml0IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxk
IHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYg
KGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRo
ZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2Fp
dGluZy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVh
ZHMpCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwot
ICAgICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5s
b2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0
Zi9Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xv
Y2tfaAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAj
aW5jbHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBA
IC0zNyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsK
IAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3Jp
dGhtOworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVp
cmVzIDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29t
cGV0ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFu
ZCBpcyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5p
bmcgYW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8g
c3RkOjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7
CiBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAo
TElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1pl
cm8obV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wg
dHJ5TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90
IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJl
bnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFs
dWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6
dHJ5TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBz
dGQ6OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAg
ICAvLyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEg
ZmFpciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFko
bV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3
YXMgd2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVu
bG9ja1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6
dW5sb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3co
KTsKICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRl
ZXMgdGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAg
LTEwMywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZv
aWQgdW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkp
IHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNs
b3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
RmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3co
KTsKICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7Cisg
ICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAg
ICB9CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHBy
b3RlY3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwog
ICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tG
YWlybHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0g
ICAgICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7
Ci0gICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAg
ICAgICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVz
dGluZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
QWxnb3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRo
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRo
bV9oCisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNp
bmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIHRo
ZSBhbGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tU
eXBlLCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNzIExv
Y2tBbGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsK
KworcHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxM
b2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFu
Z2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisg
ICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNx
dWlyZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBl
PiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykpKQor
ICAgICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
IHRyeUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVl
ICYgaXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5
dGVWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCB1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgewor
ICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHVu
bG9ja0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBl
IG9sZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAg
ICBpZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVl
LCBvbGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAg
ICAgICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2
b2lkIHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3co
bG9jaywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0
IEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAg
ICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8g
VGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBK
aWtlc1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0g
NDA7CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVu
dEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBvdXJz
ZWx2ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYg
aXNIZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJr
ZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4g
YXJvdW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNvdW50
Kys7CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0
byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0
aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFya2Vk
IGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgICAg
IGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAgICAg
JiYgIWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0
ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1Bhcmtl
ZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAgICAg
UGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQYXJr
aW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJp
dCB8IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtl
ZCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1
bHQudG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5k
ZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAgICAg
ICAgICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhh
dCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAgICAg
ICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBv
cHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8g
b3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxv
b3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSBh
d29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQu
IEVpdGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAgICBG
YWlyLAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9p
ZCB1bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQor
ICAgIHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMg
aW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAg
ICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmln
aHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUgaGVs
ZCBhbmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1
bmxvY2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xkQnl0
ZVZhbHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAg
ICAgICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAgICAg
ICAgICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRC
aXQpKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09
IGlzSGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsob2xkQnl0ZVZhbHVlLCBvbGRCeXRlVmFsdWUgJiB+aXNIZWxkQml0KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25l
IHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKKyAgICAgICAgICAg
IC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1l
IGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFyZ2luZy4KKyAgICAgICAgICAgIC8vIFdoZW4g
d2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEg
Y2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCisgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRz
IHBhcmtlZC4KKyAgICAgICAgICAgIEFTU0VSVCgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlz
SGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJr
T25lKAorICAgICAgICAgICAgICAgICZsb2NrLAorICAgICAgICAgICAgICAgIFsmXSAoUGFya2lu
Z0xvdDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgeworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlz
SGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB3
ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmlnaHQgbm93LgorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoKGxvY2subG9hZCgpICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1Bh
cmtlZEJpdCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRv
QmVGYWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFu
eXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5Owor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIFRva2VuIHsKKyAgICAgICAgQmFyZ2luZ09wcG9y
dHVuaXR5LAorICAgICAgICBEaXJlY3RIYW5kb2ZmCisgICAgfTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OkxvY2tBbGdvcml0aG07CisKKyNlbmRpZiAvLyBXVEZfTG9j
a0FsZ29yaXRobV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhE
eW5hbWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lu
Y2x1ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJQcmludFN0
cmVhbS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2
b2lkIHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwCiAgICAgZmFrZUNvbmRpdGlv
bi53YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCitib29sIGhhc0VsYXBzZWQoY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQoreworICAgIC8vIEF2b2lkIGRvaW5nIG5v
dygpLgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDAp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0ZDo6aXNpbmYodGltZS5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cmV0dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWND
bG9ja1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCwxMiBAQCBwcml2YXRlOgog
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcgV1RGOjpoYXNFbGFwc2VkOwordXNp
bmcgV1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294688</attachid>
            <date>2016-11-13 19:34:08 -0800</date>
            <delta_ts>2016-11-14 11:38:15 -0800</delta_ts>
            <desc>with the object initialization and fewer fences</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>276825</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDcgQEAKIAkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNw
cCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87
IH07CisJCTBGQURERDFEMUREMDFFREUwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFEREQxQzFE
RDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovOyB9OwogCQkwRkFERTY3
MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRp
bC5oICovOyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3
RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFG
N0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMwMDksNiArMzAxMCw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bWVUaGVXb3JsZFNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0
NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01Njk2LDYgKzU2OTgsNyBAQAogCQkJCTBGQTc2MjAzMURCOTI0MjMw
MEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAv
KiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCisJCQkJMEZBREREMUMxREQwMUVEQzAwODI3
NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2
NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0My
QyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBT
bG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTc5MzMsNiArNzkzNiw3IEBACiAJCQkJMEZGQjky
MUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJz
ZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQURERDFEMUREMDFFREUwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzNEMkIwQTFE
MzQzMTYyMDBCQTkxOEMgLyogSGVhcENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZD
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDA5OCw3ICsxMDEwMiw2IEBACiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZG
IC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUx
RDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJ
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENy
YXMKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwogCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gdmFsdWU7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0
LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHZhbHVlKTsKICAgICAg
ICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1
b3VzU2hhcGUpKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGxpbmtDb2RlSW5saW5lCiBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0pOwotCisgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFs
dWVSZWdzKCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkp
OwogICAgICAgICBzdG9yYWdlID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgIH0KLQorICAgIAog
ICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCB2YWx1ZSk7CiAKQEAgLTI2NSw3ICsy
NjUsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRj
aCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CiAKLSAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgaml0LmFuZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHNj
cmF0Y2gpOwogICAgIGF1dG8gYnJhbmNoVG9TbG93UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYXJyYXktPmluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDEx
IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX2FsbG9jYXRvcik7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpCiAgICAgICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBtX2lubGlu
ZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKICAgICAgICAgQVNTRVJUKCFtX3N0
cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghbV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICAgICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwogICAgICAgICBpZiAoaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSB7CkBAIC05
Niw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsK
ICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAg
bV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogICAgIH0KIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkKQEAgLTEwNSwxMiArMTA5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQotICAg
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlubGluZUNh
cGFjaXR5KCk7IH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1faW5s
aW5lQ2FwYWNpdHk7IH0KIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgbV9hbGxv
Y2F0b3IgPSAwOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGlu
ZUNhcGFjaXR5ID0gMDsKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKQEAgLTE0
NSw2ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29k
ZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICB1bnNpZ25l
ZCBtX2lubGluZUNhcGFjaXR5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwot
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAg
ICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlp
ZnlTbG93UGF0aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI0LDcgKzEyNCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIC8vIGJ5dGVjb2Rl
IG9wZXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVl
eGVjdXRlZC4KICAgICAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlv
biBpcyBub3QgdXNlci12aXNpYmxlLgogICAgICAgICAgICAgaml0LT5tX2ppdC5sb2FkOCgKLSAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBtX3N0cnVjdHVyZUdQUik7CisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksCisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmVHUFIpOwogICAgICAg
ICAgICAgbV9iYWRJbmRleGluZ1R5cGVKdW1wLmZpbGwoCiAgICAgICAgICAgICAgICAgaml0LCBq
aXQtPmp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUobV9zdHJ1Y3R1cmVHUFIsIG1fYXJyYXlN
b2RlKSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsg
Ly8gVGhpcyBpcyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0NlbGxfc3Ry
dWN0dXJlSUQpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAgICAgICAg
d3JpdGUoSlNDZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNo
MSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNz
KHNjcmF0Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQo
KSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNo
aWZ0MzIoc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNj
cmF0Y2gyLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gx
LCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0Nl
bGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwogICAgICAg
ICAgICAgICAgIG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgICAgICAg
ICAgICAgbV9qaXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJl
c3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4NjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTA2LDkgKzUwNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpIHsKICAgICAgICAg
SlNDZWxsKiBiYXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogCi0gICAgICAgIGlmIChwcm9wZXJ0
eS5pc1VJbnQzMigpKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eS5pc1VJbnQzMigpKQogICAgICAg
ICAgICAgcmV0dXJuIGdldEJ5VmFsKGV4ZWMsIGJhc2UsIHByb3BlcnR5LmFzVUludDMyKCkpOwot
ICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKKyAgICAgICAgZWxzZSBp
ZiAocHJvcGVydHkuaXNEb3VibGUoKSkgewogICAgICAgICAgICAgZG91YmxlIHByb3BlcnR5QXNE
b3VibGUgPSBwcm9wZXJ0eS5hc0RvdWJsZSgpOwogICAgICAgICAgICAgdWludDMyX3QgcHJvcGVy
dHlBc1VJbnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eUFzRG91YmxlKTsKICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eUFzVUludDMyID09IHByb3BlcnR5QXNEb3VibGUgJiYgaXNJ
bmRleChwcm9wZXJ0eUFzVUludDMyKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRp
b25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3Mo
KQordm9pZCBQbGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7
CisgICAgaWYgKCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90Vmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCkpOworICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2sp
OworfQorCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYg
KCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAg
Ly8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhv
dXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRv
IGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2Nr
cyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2sp
LT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndy
aXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhl
YXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdD
b2RlQmxvY2spOworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVC
bG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAot
ICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhT
bG90VmlzaXRvciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9p
ZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wg
aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAyLDYgKzQxMDIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIFJhcmUgZGF0YSBp
cyBvbmx5IHVzZWQgdG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKICAgICAgICAg
Ly8gV2UgY2FuIGF2b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CiAgICAgICAg
IEdQUlJlZyByYXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKKyAgICAgICAgR1BSUmVnIGlubGlu
ZUNhcGFjaXR5R1BSID0gcmFyZURhdGFHUFI7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoOwogCkBAIC00MTEzLDYgKzQxMTQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKICAg
ICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JH
UFIsIHN0cnVjdHVyZUdQUiwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgaW5saW5lQ2Fw
YWNpdHlHUFIpOworICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BS
LCBpbmxpbmVDYXBhY2l0eUdQUik7CisgICAgICAgIG1faml0LnN0b3JlRmVuY2UoKTsKIAogICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9w
ZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgY2FsbGVlR1BSLCBub2RlLT5pbmxpbmVDYXBh
Y2l0eSgpKSk7CiAgICAgICAgIApAQCAtNDEzNyw2ICs0MTQzLDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVK
U09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsK
KyAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVGZW5jZSgpOwogCiAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwogICAgICAgICAKQEAgLTU5
NjEsMTEgKzU5NjksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3
QQogICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsK
ICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gy
R1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgIAorICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBl
KTsKLSAgICAgICAgICAgIAorICAgIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+
KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAKKyAgICBtX2ppdC5zdG9yZUZlbmNl
KCk7CisgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3VuaXF1ZTxDYWxs
QXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+KAogICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJlc3VsdEdQUiwK
ICAgICAgICAgc3RydWN0dXJlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjksNiArMTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQog
ICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRy
KGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgbV9q
aXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOwogCkBAIC0xNjIsNiArMTYzLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRBbGxvY2F0ZVJhd09iamUKICAgICAKICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCiAgICAg
ICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSk7CisgICAgCisgICAgZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKHN0b3JhZ2VHUFIs
IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgCisgICAgbV9qaXQuc3RvcmVG
ZW5jZSgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0R2V0TGVuZ3RoKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBHUFJSZWcgbGVuZ3RoR1BSLCBib29sIGluY2x1ZGVU
aGlzKQpAQCAtODM4LDcgKzg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXko
Tm9kZSogbm8KICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAu
Z3ByKCk7Ci0gICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKICAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZVJlZyksIDAsCiAgICAgICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2Rl
KHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CkBAIC05MDIsNyArOTA3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSogbm9kZQogICAgICAgICAgICAgbm9kZS0+c3Ry
dWN0dXJlKCkpKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX2ppdC5sb2FkOCgKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7
CiAgICAgICAgIAogICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcFNsb3dGb3JVbndhbnRlZEFy
cmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwogICAgIH0KQEAgLTM5MzAsNiAr
MzkzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICB9
CiAgICAgbV9qaXQuc3RvcmUzMihhbGxvY2F0b3JHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKICAgICAKKyAgICBtX2ppdC5z
dG9yZUZlbmNlKCk7CisgICAgCiAgICAgc3dpdGNoIChudW1PcEdQUnMpIHsKICAgICBjYXNlIDI6
CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKQEAgLTM5NDMsNyAr
Mzk1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgICAgICAKKyAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAg
LTYzNTUsNiArNjM2Miw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgU3Bl
Y3UKICAgICBtX2ppdC5zdG9yZVB0cihzY29wZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBvZmZzZXRPZlNjb3BlQ2hhaW4pKTsKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGV4ZWN1dGFibGUpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNl
dE9mRXhlY3V0YWJsZSkpOwogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0T2ZSYXJlRGF0YSkpOworICAgIAor
ICAgIG1faml0LnN0b3JlRmVuY2UoKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqIG5vZGUpCkBAIC02NTQ2LDYgKzY1NTUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
QWRkcmVzcygKICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIEpTTGV4aWNhbEVudmlyb25tZW50
OjpvZmZzZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkpKSkpOwogICAgIH0KKyAgICAKKyAgICBt
X2ppdC5zdG9yZUZlbmNlKCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKApAQCAtNjYyNSw3ICs2NjM2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUNyZWF0ZURpcmVjdAogICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoRGly
ZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBhY2l0eSkpLCBzY3JhdGNoMUdQUik7
CiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgfQotICAgICAgICAgICAg
CisgICAgICAgIAogICAgICAgICBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkSlNPYmplY3Q8RGly
ZWN0QXJndW1lbnRzPigKICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1
Y3R1cmUpLCBzY3JhdGNoMUdQUiwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLAogICAgICAgICAg
ICAgc2xvd1BhdGgpOwpAQCAtNjY0MCw3ICs2NjUxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNyZWF0ZURpcmVjdAogICAgICAgICAKICAgICBtX2ppdC5zdG9yZVB0cigKICAgICAg
ICAgVHJ1c3RlZEltbVB0cigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBEaXJl
Y3RBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJpZGVzKCkpKTsKLSAgICAgICAgCisgICAgCiAgICAg
aWYgKGxlbmd0aElzS25vd24pIHsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCkBAIC02NzA1LDYgKzY3MTYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKICAgICB9CiAgICAgICAgIAorICAgIG1faml0LnN0b3JlRmVuY2UoKTsKKyAgICAgICAgCiAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkBAIC02OTEzLDcgKzY5MjYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgICAgIG1faml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBz
Y3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1No
YXBlTWFzayksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMy
KEludDMyU2hhcGUpLCBzY3JhdGNoMUdQUik7CiAKQEAgLTY5MzMsNyArNjk0Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QgZG9uZTsKIAotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0
Y2gyR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJn
dW1lbnQsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDJHUFIp
OwogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBz
Y3JhdGNoMkdQUik7CiAgICAgICAgIGF1dG8gaXNEb3VibGVBcnJheSA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaDJHUFIsIFRydXN0ZWRJbW0zMihEb3VibGVT
aGFwZSkpOwogCkBAIC02OTY3LDYgKzY5ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3ByZWFkKE5vZGUqCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGxlbmd0aEdQUikubGlua1RvKGxvb3BTdGFydCwgJm1faml0KTsKICAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlRmVuY2UoKTsKIAogICAgICAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5q
dW1wKCksIHRoaXMsIG9wZXJhdGlvblNwcmVhZEZhc3RBcnJheSwgcmVzdWx0R1BSLCBhcmd1bWVu
dCkpOwpAQCAtNzM4NSwxMSArNzQwMCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
QWxsb2NhdGVQcm9wCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIG1f
aml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2Ny
YXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKKyAg
ICAKKyAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAK
KyAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAogICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKIAog
ICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICBtX2ppdC5zdG9yZUZlbmNl
KCk7CiAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0KQEAgLTc0MzUs
NiArNzQ1Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAg
ICAKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplICsg
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCisgICAgZm9y
IChwdHJkaWZmX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihuZXdTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCisgICAgICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIx
LCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisKICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlz
LCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEsIG5ld1NpemUg
LyBzaXplb2YoSlNWYWx1ZSkpKTsKIApAQCAtNzQ0Myw3ICs3NDY3LDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVl
KSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjIpOwogICAgICAgICBtX2ppdC5zdG9yZVB0
cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0
ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsKICAgICB9CisgICAgICAgIAor
ICAgIG1faml0LnN0b3JlRmVuY2UoKTsKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSk7CisgICAgbV9qaXQuc3RvcmVGZW5jZSgpOwogCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNo
R1BSMSwgbm9kZSk7CiB9CkBAIC03NzMxLDYgKzc3NTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTmV3U3RyaW5nT2JqCiAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNXcmFwcGVyT2JqZWN0OjppbnRlcm5hbFZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKICNlbmRpZgogICAgIAorICAgIG1f
aml0LnN0b3JlRmVuY2UoKTsKKyAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoCiAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3Qs
IHJlc3VsdEdQUiwgb3BlcmFuZEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAKQEAgLTc4
MDgsNiArNzgzNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEK
ICAgICAgICAgVHJ1c3RlZEltbTMyKEZhc3RUeXBlZEFycmF5KSwKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2Rl
KCkpKTsKICAgICAKKyAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CisgICAgCiAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZSksCiAgICAgICAgIHJlc3VsdEdQ
Uiwgc3RydWN0dXJlLCBzaXplR1BSLCBzdG9yYWdlR1BSKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VPU1JFbnRy
eVRvRlRMKCkpCiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKLQorICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVOYXR1cmFsTG9vcHMoKTsKICAgICAgICAgTmF0dXJh
bExvb3BzJiBuYXR1cmFsTG9vcHMgPSAqbV9ncmFwaC5tX25hdHVyYWxMb29wczsKICAgICAgICAg
SGFzaE1hcDxjb25zdCBOYXR1cmFsTG9vcCosIHVuc2lnbmVkPiBuYXR1cmFsTG9vcFRvTG9vcEhp
bnQgPSBidWlsZE5hdHVyYWxMb29wVG9Mb29wSGludE1hcChuYXR1cmFsTG9vcHMpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
REZHV29ya2xpc3QuaCIKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdTYWZl
cG9pbnQuaCIKQEAgLTM4LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0OjpUaHJlYWRCb2R5
IDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7CiBwdWJsaWM6CiAgICAgVGhyZWFkQm9keShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIFdvcmtsaXN0JiB3b3JrbGlzdCwgVGhyZWFkRGF0YSYgZGF0
YSwgQm94PExvY2s+IGxvY2ssIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+IGNvbmRp
dGlvbiwgaW50IHJlbGF0aXZlUHJpb3JpdHkpCkBAIC0zNDksNiArMzQ5LDE3IEBAIHZvaWQgV29y
a2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYKICAgICBjb21wbGV0ZUFsbFJlYWR5UGxh
bnNGb3JWTSh2bSk7CiB9CiAKK3ZvaWQgV29ya2xpc3Q6Om1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xv
Y2spOworICAgIGZvciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsg
aXRlciAhPSBtX3BsYW5zLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgUGxhbiogcGxhbiA9IGl0
ZXItPnZhbHVlLmdldCgpOworICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHBsYW4tPm1hcmtDb2RlQmxvY2tzKHNsb3RWaXNpdG9yKTsK
KyAgICB9Cit9CisKIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiB7
CiAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fbG9jayk7CkBAIC0zNTYsNyArMzY3LDcgQEAgdm9p
ZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bQogICAgICAgICBQbGFuKiBwbGFu
ID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmIChwbGFuLT52bSAhPSAmdm0pCiAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7Cisg
ICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAgfQogfQogCkBAIC01NTMs
NiArNTY0LDE0IEBAIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJiB2bSkKICAgICB9CiB9
CiAKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07
KSB7CisgICAgICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6ZXhpc3RpbmdX
b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQorICAgICAgICAgICAgd29ya2xpc3QtPm1hcmtDb2Rl
QmxvY2tzKHZtLCBzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIHJlbWVtYmVyQ29kZUJs
b2NrcyhWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmts
aXN0cygpOyBpLS07KSB7CkBAIC01NjEsNyArNTgwLDIyIEBAIHZvaWQgcmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKICAgICB9CiB9CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKyNlbHNl
IC8vIEVOQUJMRShERkdfSklUKQorCit2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpCit7
Cit9CisKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0mLCBTbG90VmlzaXRvciYpCit7Cit9CisKK3Zv
aWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJikKK3sKK30KIAogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVGhyZWFkRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9B
dXRvbWF0aWNUaHJlYWQuaD4KQEAgLTQyLDYgKzQwLDggQEAgY2xhc3MgU2xvdFZpc2l0b3I7CiAK
IG5hbWVzcGFjZSBERkcgewogCisjaWYgRU5BQkxFKERGR19KSVQpCisKIGNsYXNzIFdvcmtsaXN0
IDogcHVibGljIFJlZkNvdW50ZWQ8V29ya2xpc3Q+IHsKIHB1YmxpYzoKICAgICBlbnVtIFN0YXRl
IHsgTm90S25vd24sIENvbXBpbGluZywgQ29tcGlsZWQgfTsKQEAgLTU3LDYgKzU3LDcgQEAgcHVi
bGljOgogICAgIC8vIHdvcmtsaXN0LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAg
ICAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKIAorICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoVk0mLCBTbG90VmlzaXRvciYpOwogICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZN
Jik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBsYW5zRm9yVk1BcmVSZWFkeShWTSYpOwpAQCAt
MTYzLDkgKzE2NCwxMSBAQCBpbmxpbmUgV29ya2xpc3QmIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRl
CiAgICAgcmV0dXJuICpyZXN1bHQ7CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwog
dm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKTsKK3ZvaWQgbWFya0NvZGVCbG9ja3MoVk0m
LCBTbG90VmlzaXRvciYpOwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE0
ICs3MywxNCBAQCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpBYnN0cmFjdEhlYXBSZXBvCiAgICAg
LCBhYnNvbHV0ZSgmcm9vdCwgImFic29sdXRlIikKIHsKICAgICAvLyBNYWtlIHN1cmUgdGhhdCBv
dXIgZXhwbGljaXQgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIFN0cnVjdHVyZUlEQmxvYiBtYXRjaCBy
ZWFsaXR5LgotICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQo
KSAmIChzaXplb2YoaW50MzJfdCkgLSAxKSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9p
bmRleGluZ1R5cGUub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUub2Zmc2V0KCkp
OwotICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAyID09
IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0Nl
bGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNl
dCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxs
X2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAxID09IEpTQ2VsbF90eXBlSW5mb1R5cGUu
b2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNj
Lm9mZnNldCgpICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAzID09IEpT
Q2VsbF9jZWxsU3RhdGUub2Zmc2V0KCkpOwogCiAgICAgSlNDZWxsX3N0cnVjdHVyZUlELmNoYW5n
ZVBhcmVudCgmSlNDZWxsX2hlYWRlcik7CiAgICAgSlNDZWxsX3VzZWZ1bEJ5dGVzLmNoYW5nZVBh
cmVudCgmSlNDZWxsX2hlYWRlcik7Ci0gICAgSlNDZWxsX2luZGV4aW5nVHlwZS5jaGFuZ2VQYXJl
bnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CisgICAgSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Mu
Y2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5mb1R5
cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwogICAgIEpTQ2VsbF90eXBlSW5m
b0ZsYWdzLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfY2Vs
bFN0YXRlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKQEAgLTEzNSwyMSArMTM1
LDI3IEBAIHZvaWQgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6Y29tcHV0ZVJhbmcKICAgICAgICAg
ZGF0YUxvZygiQWJzdHJhY3QgSGVhcCBSZXBvc2l0b3J5OlxuIik7CiAgICAgICAgIHJvb3QuZGVl
cER1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICB9CisgICAgCisgICAgYXV0byByYW5nZUZvciA9
IFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwKiBoZWFwKSAtPiBIZWFwUmFuZ2UgeworICAgICAgICBp
ZiAoaGVhcCkKKyAgICAgICAgICAgIHJldHVybiBoZWFwLT5yYW5nZSgpOworICAgICAgICByZXR1
cm4gSGVhcFJhbmdlKCk7CisgICAgfTsKIAogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDog
bV9oZWFwRm9yTWVtb3J5KQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCkt
PnNldFJhbmdlKGVudHJ5LmhlYXAtPnJhbmdlKCkpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCktPnNldFJhbmdlKHJhbmdlRm9yKGVudHJ5LmhlYXApKTsKICAgICBmb3Ig
KEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsUmVhZCkKLSAgICAgICAgZW50cnku
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5n
ZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFk
cyA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDog
bV9oZWFwRm9yQ0NhbGxXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+
KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnku
dmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gcmFuZ2VGb3IoZW50cnku
aGVhcCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50
UmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0
cy5yZWFkcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxQ
YXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsK
ICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvclBhdGNocG9pbnRXcml0ZSkK
LSAgICAgICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0
ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hw
b2ludFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAg
IGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VSZWFkKQotICAgICAgICBl
bnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7
CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5yZWFkID0gcmFuZ2VGb3Io
ZW50cnkuaGVhcCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5j
ZVdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+d3JpdGUgPSBl
bnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4o
KS0+d3JpdGUgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMSArNTksMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAg
IG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvciwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpIFwKICAgICBtYWNybyhKU0NlbGxfY2VsbFN0YXRlLCBKU0NlbGw6OmNlbGxT
dGF0ZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2hlYWRlciwgMCkgXAotICAgIG1hY3Jv
KEpTQ2VsbF9pbmRleGluZ1R5cGUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKKyAg
ICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYywgSlNDZWxsOjppbmRleGluZ1R5cGVB
bmRNaXNjT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfc3RydWN0dXJlSUQsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5mb0ZsYWdzLCBK
U0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF90eXBlSW5m
b1R5cGUsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhKU0NlbGxf
dXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhK
U0NlbGxfdXNlZnVsQnl0ZXMsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBc
CiAgICAgbWFjcm8oSlNGdW5jdGlvbl9leGVjdXRhYmxlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fc2NvcGUsIEpTRnVuY3Rpb246Om9m
ZnNldE9mU2NvcGVDaGFpbigpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9yYXJlRGF0YSwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcg
QEAgSklUQ29kZTo6fkpJVENvZGUoKQogICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAgICAg
ICAgIGRhdGFMb2coY29tbWEsIG1fYjNDb2RlKTsKICAgICAgICAgZGF0YUxvZyhjb21tYSwgbV9h
cml0eUNoZWNrRW50cnlwb2ludCk7CisgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3ODYsNyArMjc4Niw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjb21waWxlUHV0U3RydWN0dXJlKCkKICAgICB7CiAgICAgICAgIG1fZnRsU3Rh
dGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9n
cmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwotCisgICAgICAgIAogICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsK
ICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+
bmV4dDsKICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgPT0gbmV3U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC0zOTQ1
LDYgKzM5NDUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZhc3RPYmplY3QsIG1faGVh
cHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbaV0pOwogICAgICAgICB9CiAgICAgICAg
IAorICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKKyAgICAgICAg
CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9i
amVjdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC00
MDAxLDYgKzQwMDMsOCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9p
bnRlcihleGVjdXRhYmxlKSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX2V4ZWN1dGFi
bGUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0
LCBtX2hlYXBzLkpTRnVuY3Rpb25fcmFyZURhdGEpOwogICAgICAgICAKKyAgICAgICAgbV9vdXQu
ZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgIAogICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwogICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtNDEyOSw2ICs0MTMzLDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGVuZCwgbGFzdE5leHQpOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxs
cHRyKTsKKyAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAgICAg
CkBAIC00MTgyLDYgKzQxODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmVxdWFsKGN1cnJlbnRPZmZzZXQsIG1fb3V0LmNvbnN0SW50MzIoMCkpLCB1bnN1cmUo
Y29udGludWF0aW9uKSwgdW5zdXJlKGxvb3BTdGFydCkpOwogCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNl
KCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQyMTYsNiArNDIyMyw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb21waWxlTmV3T2JqZWN0KCkKICAgICB7CiAgICAgICAgIHNldEpT
VmFsdWUoYWxsb2NhdGVPYmplY3QobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpOworICAgICAgICBtX291
dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTmV3QXJyYXkoKQpAQCAtNDI2OCw2ICs0Mjc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5h
cnJheSk7CisgICAgICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQzNzYsNiArNDM4
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgICAg
IHNldEpTVmFsdWUocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
NDQxNyw3ICs0NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1No
YXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoYXJndW1lbnQsIG1faGVhcHMuSlNDZWxsX2luZGV4
aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdTaGFwZSA9IG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGFyZ3VtZW50LCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjKTsK
ICAgICAgICAgICAgIGluZGV4aW5nU2hhcGUgPSBtX291dC5iaXRBbmQoaW5kZXhpbmdTaGFwZSwg
bV9vdXQuY29uc3RJbnQzMihJbmRleGluZ1NoYXBlTWFzaykpOwogICAgICAgICAgICAgTFZhbHVl
IGlzT0tJbmRleGluZ1R5cGUgPSBtX291dC5iZWxvd09yRXF1YWwoCiAgICAgICAgICAgICAgICAg
bV9vdXQuc3ViKGluZGV4aW5nU2hhcGUsIG1fb3V0LmNvbnN0SW50MzIoSW50MzJTaGFwZSkpLApA
QCAtNDQ4Niw2ICs0NDk2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICAgICAgbV9vdXQuZmVu
Y2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVzdWx0ID0gdm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3ByZWFkR2Vu
ZXJpYyksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCk7CiAKQEAgLTQ1MTgsNiArNDUyOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuZm9ySW5kZXhpbmdUeXBlKG1fbm9k
ZS0+aW5kZXhpbmdUeXBlKCkpLT5hdChpbmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAg
ICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CkBAIC00NTQyLDYgKzQ1NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBwdWJsaWNMZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpLmFycmF5KTsKKyAgICAg
ICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDYwOSw2ICs0NjIyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIoc2l6ZSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hl
YXBzLkpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CiAgICAgICAgICAgICBtX291dC5zdG9yZTMy
KG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5cGVkQXJyYXkpLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVh
cHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwogICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCkBAIC00ODUxLDYgKzQ4NjUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKICAg
ICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgsIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19sZW5n
dGgpOwogICAgICAgICAKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0
cik7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IocmVz
dWx0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTUy
MjksNiArNTI0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbik7CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJhbnNpdGlvbnMu
YWRkTGF6aWx5KAogICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKSwgbV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlh
bnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
QEAgLTUyMzYsNyArNTI1MiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHN0b3JhZ2Ug
PSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKICAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFu
dC5vZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwotCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRh
dGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bikgewogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKS0+aW5kZXhpbmdUeXBlKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZv
clRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZv
KCkudHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsK
QEAgLTUyNDQsNyArNTI2NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHdlYWtT
dHJ1Y3R1cmVJRCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCkpOwogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICB9CiAgICAgICAgIApAQCAtODEwMyw2ICs4MTIyLDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaGF2ZUJ1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cihmYXN0QnV0dGVyZmx5VmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHNwbGF0V29yZHMoCisgICAgICAgICAgICAgICAgICAgIGZhc3RCdXR0ZXJmbHlWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoLXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAtIDEpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigt
MSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0
aWVzLmF0QW55TnVtYmVyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0
b3JMZW5ndGgsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICAKQEAgLTgyNTcsNyArODI4Miw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKICAgICAg
ICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9uJ3Qg
bmVlZCBvbmUuCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgQml0
VmVjdG9yIHNldElubGluZU9mZnNldHM7CiAgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50
cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsg
aS0tOykgewogICAgICAgICAgICAgICAgICAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBk
ZXNjcmlwdG9yID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CkBAIC04MjY2LDExICs4MjkyLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClb
ZGVzY3JpcHRvci5pbmZvKCldICE9IGVudHJ5LmtleSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTFZh
bHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVy
Zmx5OworICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNldElubGluZU9mZnNldHMuc2V0KGVudHJ5Lm9mZnNldCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBiYXNlID0gb2JqZWN0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBidXR0ZXJmbHk7CiAgICAgICAgICAgICAgICAg
ICAgIHN0b3JlUHJvcGVydHkodmFsdWVzW2ldLCBiYXNlLCBkZXNjcmlwdG9yLmluZm8oKSwgZW50
cnkub2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRJbmxp
bmVPZmZzZXRzLmdldChpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291
dC5pbnQ2NFplcm8sIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLCBvYmplY3QsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKGkpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOwpAQCAtODI4MSw2ICs4MzE2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0
aW9uLCBvdXRlckxhc3ROZXh0KTsKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkocG9pbnRl
clR5cGUoKSwgcmVzdWx0cykpOworICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBu
dWxscHRyKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb24oKQpAQCAtODM1Niw2ICs4MzkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCisgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwog
ICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIH0KIApAQCAtODk2Myw3ICs5MDAw
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkpOworCisgICAgICAgIHNwbGF0V29yZHMoCisgICAgICAgICAgICByZXN1bHQsCisg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cigtaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5IC0g
MSksIG1fY29uc3RJbnRQdHIoLTEpLAorICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLCBtX2hl
YXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5m
ZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVz
dWx0LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgbV9vdXQu
ZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIApAQCAtODk5MSw3ICs5MDM2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAg
ICAgIHNwbGF0V29yZHMoCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cigtbmV3U2l6ZSAtIDEpLCBtX2NvbnN0SW50UHRyKC1vbGRTaXplIC0gMSksCisg
ICAgICAgICAgICBtX291dC5pbnQ2NFplcm8sIG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJl
cigpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxw
dHIpOwogICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0
LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICBtX291dC5mZW5jZSgmbV9o
ZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQpAQCAtOTg2MSw2ICs5OTEzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBhbGxv
Y2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwo
YWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKKyAgICAgICAgc3BsYXRXb3JkcygKKyAg
ICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKEpTRmluYWxP
YmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpIC8gOCksCisgICAgICAgICAgICBtX291dC5j
b25zdEludFB0cihKU0ZpbmFsT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIDggKyBz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpLAorICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJv
LAorICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogICAgICAg
ICBtX291dC5zdG9yZVB0cihidXR0ZXJmbHksIHJlc3VsdCwgbV9oZWFwcy5KU09iamVjdF9idXR0
ZXJmbHkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTExOTQzLDcgKzEyMDAx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAg
ICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1f
aGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdU
eXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdU
eXBlQW5kTWlzYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LmFycmF5Q2xhc3MoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDcgKzI3Nyw3IEBAIHN0
YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJy
YXlQcm9maWxlID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5nZXRBcnJh
eVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2Vl
blN0cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICAgICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKICAgICAgICAgICAg
ICAgICBqaXQubHNoaWZ0MzIoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsKICAgICAg
ICAgICAgICAgICBqaXQub3IzMihHUFJJbmZvOjpyZWdUMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29s
dXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMjA4NjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NDYsOSArNDQ2LDEyIEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5
cGVkUG8KICAgICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3RvcmUp
OwogfQogCi1GZW5jZVZhbHVlKiBPdXRwdXQ6OmZlbmNlKCkKK0ZlbmNlVmFsdWUqIE91dHB1dDo6
ZmVuY2UoY29uc3QgQWJzdHJlYWN0SGVhcCogcmVhZCwgY29uc3QgQWJzdHJhY3RIZWFwKiB3cml0
ZSkKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+KG1fcHJvYywg
b3JpZ2luKCkpOworICAgIEZlbmNlVmFsdWUqIHJlc3VsdCA9IG1fYmxvY2stPmFwcGVuZE5ldzxG
ZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZUZlbmNl
UmVhZChyZWFkLCByZXN1bHQpOworICAgIG1faGVhcHMtPmRlY29yYXRlRmVuY2VXcml0ZSh3cml0
ZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIE91dHB1dDo6c3RvcmUz
MkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5
LDcgQEAgcHVibGljOgogCiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMVHlwZSk7CiAg
ICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7Ci0gICAgQjM6OkZlbmNlVmFsdWUq
IGZlbmNlKCk7CisgICAgQjM6OkZlbmNlVmFsdWUqIGZlbmNlKGNvbnN0IEFic3RyYWN0SGVhcCog
cmVhZCwgY29uc3QgQWJzdHJhY3RIZWFwKiB3cml0ZSk7CiAKICAgICBMVmFsdWUgbG9hZDhTaWdu
RXh0MzIoVHlwZWRQb2ludGVyKTsKICAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoVHlwZWRQb2lu
dGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCShyZXZpc2lv
biAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMTQgKzQwLDggQEAgZW51bSBjbGFzcyBDZWxsU3RhdGUgOiB1aW50
OF90IHsKICAgICAvLyBUaGUgb2JqZWN0IGlzIGluIGVkZW4uIER1cmluZyBHQywgdGhpcyBtZWFu
cyB0aGF0IHRoZSBvYmplY3QgaGFzIG5vdCBiZWVuIG1hcmtlZCB5ZXQuCiAgICAgTmV3V2hpdGUg
PSAxLAogCi0gICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5u
ZWQgLSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiB0aGlzIEdDIHRoYXQgd2UgYXJlCi0g
ICAgLy8gZ29pbmcgdG8gc2NhbiBpdC4gSWYgdGhpcyBpcyBhbiBlZGVuIEdDLCB0aGlzIGFsc28g
bWVhbnMgdGhhdCB0aGUgb2JqZWN0IGlzIGluIGVkZW4uCi0gICAgTmV3R3JleSA9IDIsCi0KLSAg
ICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGJ1dCBp
dCBlaXRoZXIgYmVsb25ncyB0byBvbGQgZ2VuIChpZiB0aGlzIGlzIGVkZW4KLSAgICAvLyBHQykg
b3IgaXQgaXMgZ3JleSBhIHNlY29uZCB0aW1lIGluIHRoaXMgY3VycmVudCBHQyAoYmVjYXVzZSBh
IGNvbmN1cnJlbnQgc3RvcmUgYmFycmllciByZXF1ZXN0ZWQKLSAgICAvLyByZS1ncmV5aW5nKS4K
LSAgICBPbGRHcmV5ID0gMworICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2ls
bCBiZSBzY2FubmVkLgorICAgIEdyZXkgPSAyLAogfTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGJsYWNrVGhyZXNob2xkID0gMDsgLy8geCA8PSBibGFja1RocmVzaG9sZCBtZWFucyB4IGlzIEFu
dGhyYWNpdGVPckJsYWNrLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdt
ZW50ZWRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
U2VnbWVudGVkQXJyYXkuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTYyLDMgKzE2NCw0IEBA
IHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCwzNSBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGVhcDo6UmVzdW1l
VGhlV29ybGRTY29wZSB7CitwdWJsaWM6CisgICAgUmVzdW1lVGhlV29ybGRTY29wZShIZWFwJiBo
ZWFwKQorICAgICAgICA6IG1faGVhcChoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25z
Ojp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygoTW9ub3Rvbmlj
VGltZTo6bm93KCkgLSBtX2hlYXAubV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMuLi5d
XG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGVhcC5yZXN1bWVUaGVXb3JsZCgpOworICAgIH0K
KyAgICAKKyAgICB+UmVzdW1lVGhlV29ybGRTY29wZSgpCisgICAgeworICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUNvbmN1cnJlbnRHQygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBtX2hlYXAuc3RvcFRo
ZVdvcmxkKCk7CisKKyAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25z
dCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJh
Z2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNh
dGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAg
LCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6
Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3Rh
Y2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0
KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0Pigp
KQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGlu
ZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVj
dXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRv
ck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9o
ZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExv
Y2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIgKzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJl
ZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVu
Y2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAg
IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2
b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKQogewotICAgIG1fc2xv
dFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOworICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAog
dm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDExNyArNDcxLDE2NCBAQCB2
b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklU
V29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8v
IEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBs
YW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJs
ZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRU
aW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVh
cDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNp
dG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3Ig
aGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0g
ICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7CisgICAgaWYgKG1fY29sbGVjdGlvblNj
b3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgeworICAgICAgICBtX29wYXF1ZVJvb3RzLmNs
ZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygp
OworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5B
QkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNl
bmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVS
KQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0t
PnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQg
dG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8v
IG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJp
ZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGluZ1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3
ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUKLSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sg
dHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIGl0LgotICAgICAgICAgICAg
Ly8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4K
LSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAg
ICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0g
ICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlv
blNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAgICAgbV9vcGFxdWVS
b290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygp
OwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQu
c2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10gKCkgewotICAgICAgICAgICAgICAgIFNs
b3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAg
ICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90Vmlz
aXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtl
X3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2xv
dFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9w
YXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3Ig
PSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10g
KCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRv
ckxvY2spOworICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0
b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
dFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtl
X3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxT
bG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAg
ICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAgICAgICAgICAgICAgICAg
c2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwotICAgICAgICAgICAgICAgICAgICBzbG90
VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7CisgICAgICAgICAgICAg
ICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICAgICAgICAgIHNsb3RW
aXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwor
ICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90
VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgewotICAgICAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWlu
Z1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29u
dmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigp
OworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwogCisgICAg
U2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBkb3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50
UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25v
dG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgTW9ub3Rv
bmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlhbFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBp
dGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dH
QygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24sICIgIik7CisgICAgICAg
IE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0gdG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRU
aW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29u
Y3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAgICAgICAgewotICAgICAgICAgICAgVGltaW5n
U2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBj
b25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2Vu
Y2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBz
Y2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygq
dGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsK
ICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAg
ICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAg
ICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAvLyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBk
b24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZpeHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlz
aXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisg
ICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RW
aXNpdG9yKTsKKyNlbmRpZgogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSB3YW50IHRv
IGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2Rl
IGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2
ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUg
YmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFs
bHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJp
ZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAg
ICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlz
aXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRp
b24oaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290
VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAg
ICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVy
KCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgICAgICB0cmFjZUNvZGVCbG9j
a3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21T
aGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5n
U2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMg
YWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1h
cmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBs
aXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hh
bmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5u
ZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAgICAgICAgICBtX3ZtLT5z
bWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9y
KTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZh
bHVlcykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOworICAg
ICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNp
emUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJv
b3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1f
dm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0t
PmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24o
KSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0
RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ry
b25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0
KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAg
ICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxp
bmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1By
b2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vz
c1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+
dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Cisg
ICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgIAor
ICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisgICAgICAgICAgICBtX3ZtLT50eXBl
UHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgIG1faml0U3R1
YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lm
TmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtT
ZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwor
ICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICBE
Rkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAg
ICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0
eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAgICAgICAKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJl
c2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8gcnVubmluZyByaWdodCBu
b3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsg
dGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0
IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0
aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBm
b3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0aGlzCisgICAgICAgIC8v
IGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0
IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0CisgICAgICAgIC8vIEdDLgorICAgICAgICBt
X2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAg
ICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAgICAKKyAgICAgICAgaWYg
KHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xs
ZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQorICAgICAgICAvLyB3aXRob3V0IGxvY2tz
LiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFj
ay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpW
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y29sbGVj
dG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0
b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisKKyAgICAgICAgeworICAgICAgICAgICAgVGlt
aW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRy
YWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5k
b25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNo
YXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0
aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9y
OjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdv
cmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAgICAgICAgICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTW9u
b3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGNv
bmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVUb1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZM
b29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjMsNyArNjQyLDYgQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhl
clN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewotICAgIG1faml0U3R1YlJv
dXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0K
IApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVhcDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1p
bmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlm
IChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1f
Y29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHVi
Um91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAKICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3Bl
IGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5n
Iik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAg
fQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBK
U0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0s
IG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmlu
Z3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1f
Y29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJp
bmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxs
IHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmQocm9vdHMpOwor
ICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7CiAKICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNv
bnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRv
ci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6
XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb21w
aWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAg
ICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyht
X3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSku
dmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgZGF0YUxvZygiREZH
IFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKICNlbmRpZgogfQogCkBA
IC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9k
ZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJv
b3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9w
cm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmcGFpci5rZXkp
OwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0g
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0
QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1f
bWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlz
dFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
Ci0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2
aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX3Zt
LT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKLSAgICB2
aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7Ci0KLSAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2co
IkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJv
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxl
cyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hh
bmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBt
X3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0K
LQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQotewotI2lmIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxl
ciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICBBU1NFUlQoc2FtcGxpbmdQ
cm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVy
LT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0g
R0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmls
ZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9j
aygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi19Ci0KLXZv
aWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQotewotICAgIGlmICh2bSgpLT50eXBlUHJvZmls
ZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQobV9zbG90Vmlz
aXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUgUHJvZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1f
c2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0g
ICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigpCi17Ci0gICAgbV92bS0+
c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQg
SGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkKLXsKLSAgICBtX2ppdFN0
dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90VmlzaXRvcik7Ci0KLSAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0
b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhl
YXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFRp
bWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOwot
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRp
bWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzIik7Ci0gICAgICAg
ICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3Jr
bGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5k
bGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgUGFyYWxs
ZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgbV9zbG90
VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFp
bkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQog
ewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAg
ICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3IudmlzaXRDb3VudCgpOworICAg
ICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291
bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAg
IGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUu
NmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGltZSk7CiAgICAgfQpAQCAt
ODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdj
UwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAg
ICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRl
ZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zp
c2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0KKyAgICAgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAgICAgICB0aHJlYWRCeXRl
c1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRl
c1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAg
bV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0
KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90Vmlz
aXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVCht
X3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hh
cmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygp
OwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29u
c3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNv
bmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2Vs
bC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8g
SW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRo
ZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3Vy
cmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAg
IC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRy
dWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4K
LSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RW
aXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAg
IGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVy
aW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhh
dCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVz
dCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBn
ZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdp
bGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNh
ZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFu
ZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0
byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRo
aXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fp
bi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUg
b2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0
aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpH
cmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBI
ZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDk0LDI0ICsxMDQwLDE0IEBAIHZvaWQgSGVh
cDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRv
dWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRp
b25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEw
MjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAg
ZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAg
ICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJs
ZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHsKLSAgICAgICAgRGVm
ZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omlu
c3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pKQotICAgICAgICAgICAgc2V0R0NEaWRK
SVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFk
b3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOwotICAgIAogICAg
IEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7
CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdD
OiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CkBAIC0xMTMxLDEyICsxMDY3LDkgQEAgdm9p
ZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZl
T2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAg
ICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlv
bigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9G
aXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAgIAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAg
ICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6
OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzExMDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJ
blRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAg
ICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRl
ciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSku
bWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNv
bmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQogICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzEx
MjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7
CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7Cisg
ICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdv
cmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAg
IHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAg
dm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsK
KyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURU
YWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmco
KTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZv
aWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2Nh
dGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRo
ZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29u
Y3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5k
IG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxv
Y2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgor
ICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3Qg
YWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0
b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBm
YWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0MDgsMjMgKzEzNjQsMTgg
QEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogCiB2b2lkIEhlYXA6OnNldEdDRGlk
SklUKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93
b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RhdGUgJiBzdG9w
cGVkQml0KTsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9s
ZFN0YXRlLCBvbGRTdGF0ZSB8IGdjRGlkSklUQml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAorICAgICAgICBbJl0gKHVuc2lnbmVk
JiBzdGF0ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUgJiBzdG9wcGVkQml0
KTsKKyAgICAgICAgICAgIHN0YXRlIHw9IGdjRGlkSklUQml0OworICAgICAgICB9KTsKIH0KIAog
dm9pZCBIZWFwOjpzZXROZWVkRmluYWxpemUoKQogewotICAgIGZvciAoOzspIHsKLSAgICAgICAg
dW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwotICAgICAgICBpZiAobV93
b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9sZFN0YXRlIHwgbmVlZEZp
bmFsaXplQml0KSkgewotICAgICAgICAgICAgbV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1
bGVTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV93
b3JsZFN0YXRlLmV4Y2hhbmdlT3IobmVlZEZpbmFsaXplQml0KTsKKyAgICBQYXJraW5nTG90Ojp1
bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAgbV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2No
ZWR1bGVTb29uKCk7CiB9CiAKIHZvaWQgSGVhcDo6d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKQEAg
LTE0NDEsMjMgKzEzOTIsMTQgQEAgdm9pZCBIZWFwOjp3YWl0V2hpbGVOZWVkRmluYWxpemUoKQog
ICAgIH0KIH0KIAotdW5zaWduZWQgSGVhcDo6c2V0TXV0YXRvcldhaXRpbmcoKQordm9pZCBIZWFw
OjpzZXRNdXRhdG9yV2FpdGluZygpCiB7Ci0gICAgZm9yICg7OykgewotICAgICAgICB1bnNpZ25l
ZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0
YXRlID0gb2xkU3RhdGUgfCBtdXRhdG9yV2FpdGluZ0JpdDsKLSAgICAgICAgaWYgKG1fd29ybGRT
dGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgfQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZU9yKG11
dGF0b3JXYWl0aW5nQml0KTsKIH0KIAogdm9pZCBIZWFwOjpjbGVhck11dGF0b3JXYWl0aW5nKCkK
IHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0
YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5tdXRhdG9yV2FpdGluZ0JpdCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZUFuZCh+bXV0YXRvcldhaXRp
bmdCaXQpOwogfQogCiB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tI
b2xkZXImKQpAQCAtMTQ2OSwxMCArMTQxMSwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0
b3BwaW5nKGNvbnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdH
Q1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVk
Q29kZSgpOwotICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJn
ZUFsbG9jYXRpb25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NT
Y29wZSgqdGhpcyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAg
ICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxv
Y2F0aW9ucygpOworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVv
dXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKICAgICBpZiAoSGFzT3duUHJvcGVydHlD
YWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hl
LT5jbGVhcigpOwogfQpAQCAtMTU1NCwyMyArMTUwMSw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0
Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVj
dCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKQotewotICAg
IG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZs
dXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0g
Q29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZs
dXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1
ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBt
X29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIu
Zmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5
NTQsNyArMTg4Nyw3IEBAIGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JT
dGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6
OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTk3NiwxMiArMTkwOSw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAg
ICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3Rh
dGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENl
bGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJs
ZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNv
bGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6
OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47
Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAg
Zm9yICg7OykgewpAQCAtMTk5MiwxMiArMTkyMSw4IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQg
SGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6
ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qg
c2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJu
YWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAg
IGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3Rh
dGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3Qq
IGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0y
MDkxLDQgKzIwMTYsMTEgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5M
bwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxl
Y3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uczo6
Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lv
biAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2Nv
cGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhh
bmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAj
aW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUg
IlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUg
IlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIK
QEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7
CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFy
a1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNp
dG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcg
KzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVy
biBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkg
eyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNs
b3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNp
dG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNp
dG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAq
bV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5
Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
R0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwpAQCAtMTY4LDcgKzE3
MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihK
U0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQgYWRkRXhlY3V0YWJsZShFeGVjdXRhYmxlQmFz
ZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xs
ZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgYm9v
bCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsK
QEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2Ug
ZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAg
Ly8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNp
emVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKICNpZiBFTkFCTEUoUkVTT1VS
Q0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4
dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRT
dGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFs
TWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeVNpemUoKSB7
IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAKQEAgLTM5MSw2ICszOTQs
OSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVU
aGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJp
ZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0
YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDEyLDcgKzQx
OCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkRmluYWxpemUoKTsKICAgICB2b2lkIHdh
aXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwogICAgIAotICAgIHVuc2lnbmVkIHNldE11dGF0b3JXYWl0
aW5nKCk7CisgICAgdm9pZCBzZXRNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgY2xlYXJNdXRh
dG9yV2FpdGluZygpOwogICAgIHZvaWQgbm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgTG9ja0hv
bGRlciYpOwogICAgIApAQCAtNDIyLDMxICs0MjgsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rp
b24oT3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVy
ZUlEVGFibGVzKCk7CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZv
aWQgc3RvcEFsbG9jYXRpb24oKTsKICAgICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAg
Ci0gICAgdm9pZCBtYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtU
b0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2
YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAg
ICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2
b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1v
dmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVk
T2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJz
KEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNp
dG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0g
ICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlz
aXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFR5cGVQcm9maWxlcigpOwotICAg
IHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRK
SVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNp
dG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2
b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZW5k
TWFya2luZygpOwogCkBAIC01MTgsNyArNTExLDggQEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVU
aHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCi0gICAgU2xvdFZpc2l0b3IgbV9zbG90Vmlz
aXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZp
c2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJr
U3RhY2s7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxs
ZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51
bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21l
IHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNTcyLDcgKzU2Niw4IEBAIHByaXZhdGU6
CiAKICAgICBMb2NrIG1fbWFya2luZ011dGV4OwogICAgIENvbmRpdGlvbiBtX21hcmtpbmdDb25k
aXRpb25WYXJpYWJsZTsKLSAgICBNYXJrU3RhY2tBcnJheSBtX3NoYXJlZE1hcmtTdGFjazsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0
YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrOwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMg
eyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAw
IH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgeyBmYWxzZSB9OwpAQCAt
NjAwLDYgKzU5NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG11dGF0
b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0aGUgbXV0YXRvciB0byB1c2UgdGhp
cyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8dW5zaWduZWQ+IG1fd29ybGRT
dGF0ZTsKICAgICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQg
eyBmYWxzZSB9OworICAgIE1vbm90b25pY1RpbWUgbV9zdG9wVGltZTsKICAgICAKICAgICBEZXF1
ZTxPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+PiBtX3JlcXVlc3RzOwogICAgIFRpY2tldCBtX2xh
c3RTZXJ2ZWRUaWNrZXQgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsNiArMzYsMzQg
QEAgTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0FycmF5KCkKIHsKIH0KIAordm9pZCBNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAgIAorICAgIC8vIFJlbW92ZSBvdXIgaGVhZCBh
bmQgdGhlIGhlYWQgb2YgdGhlIG90aGVyIGxpc3QuCisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3Qg
SlNDZWxsKj4qIG15SGVhZCA9IG1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIEdDQXJyYXlT
ZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBvdGhlckhlYWQgPSBvdGhlci5tX3NlZ21lbnRzLnJlbW92
ZUhlYWQoKTsKKyAgICBtX251bWJlck9mU2VnbWVudHMtLTsKKyAgICBvdGhlci5tX251bWJlck9m
U2VnbWVudHMtLTsKKyAgICAKKyAgICBvdGhlci5tX3NlZ21lbnRzLmFwcGVuZChtX3NlZ21lbnRz
KTsKKyAgICAKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMgKz0gbV9udW1iZXJPZlNlZ21l
bnRzOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9IDA7CisgICAgCisgICAgLy8gUHV0IHRoZSBv
cmlnaW5hbCBoZWFkcyBiYWNrIGluIHRoZWlyIHBsYWNlcy4KKyAgICBtX3NlZ21lbnRzLnB1c2go
bXlIZWFkKTsKKyAgICBvdGhlci5tX3NlZ21lbnRzLnB1c2gob3RoZXJIZWFkKTsKKyAgICBtX251
bWJlck9mU2VnbWVudHMrKzsKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMrKzsKKyAgICAK
KyAgICB3aGlsZSAoIWlzRW1wdHkoKSkgeworICAgICAgICByZWZpbGwoKTsKKyAgICAgICAgd2hp
bGUgKGNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAgICAgIG90aGVyLmFwcGVuZChyZW1vdmVMYXN0
KCkpOworICAgIH0KK30KKwogdm9pZCBNYXJrU3RhY2tBcnJheTo6ZG9uYXRlU29tZUNlbGxzVG8o
TWFya1N0YWNrQXJyYXkmIG90aGVyKQogewogICAgIC8vIFRyeSB0byBkb25hdGUgYWJvdXQgMSAv
IDIgb2Ygb3VyIGNlbGxzLiBUbyByZWR1Y2UgY29weWluZyBjb3N0cywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4
ICszNSw5IEBAIGNsYXNzIE1hcmtTdGFja0FycmF5IDogcHVibGljIEdDU2VnbWVudGUKIHB1Ymxp
YzoKICAgICBNYXJrU3RhY2tBcnJheSgpOwogCi0gICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhN
YXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtT
dGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CisgICAgdm9pZCB0cmFu
c2ZlclRvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJr
U3RhY2tBcnJheSYpOworICAgIHZvaWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5
Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxs
b2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw2IEBAIHZvaWQqIE1hcmtl
ZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWQKIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5
QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKIHsKICAgICBBU1NFUlQoYmxv
Y2spOwotICAgIEFTU0VSVCghYmxvY2stPmhhc0FueU5ld2x5QWxsb2NhdGVkKCkpOwogICAgIEFT
U0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKICAgICAKICAgICBGcmVlTGlzdCBmcmVlTGlz
dCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcFRvRnJlZUxpc3QpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTQgQEAgTWFya2VkQmxvY2s6Ok1hcmtlZEJs
b2NrKFZNJiB2bSwgSGFuZGxlJgogICAgICwgbV9oYW5kbGUoaGFuZGxlKQogICAgICwgbV92bSgm
dm0pCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyks
ICI6IEFsbG9jYXRlZC5cbiIpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpF
bXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBN
b2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFs
bG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJr
c01vZGUgbWFya3NNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2Rl
IGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShkZXN0
cnVjdGlvbk1vZGUgPT0gRG9lc05vdE5lZWREZXN0cnVjdGlvbiAmJiBzd2VlcE1vZGUgPT0gU3dl
ZXBPbmx5KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIShkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tI
YXNOb0Rlc3RydWN0b3JzICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKICAgICAKICAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAKQEAgLTk5LDcgKzEw
MSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAo
T3B0aW9uczo6dXNlQnVtcEFsbG9jYXRvcigpCiAgICAgICAgICYmIGVtcHR5TW9kZSA9PSBJc0Vt
cHR5CiAgICAgICAgICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBEb2VzTm90SGF2ZU5ld2x5QWxs
b2NhdGVkKSB7Ci0gICAgICAgIEFTU0VSVChtYXJrc01vZGUgPT0gTWFya3NTdGFsZSk7CisgICAg
ICAgIEFTU0VSVChtYXJrc01vZGUgPT0gTWFya3NTdGFsZSB8fCBibG9jay5tX21hcmtzLmlzRW1w
dHkoKSk7CiAgICAgICAgIAogICAgICAgICBjaGFyKiBzdGFydE9mTGFzdENlbGwgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oY2VsbEFsaWduKGJsb2NrLmF0b21zKCkgKyBtX2VuZEF0b20gLSAxKSk7CiAg
ICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFydE9mTGFzdENlbGwgKyBjZWxsU2l6ZSgpOwpA
QCAtMTExLDYgKzExMyw4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxp
emUKICAgICAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eSh0aGlzLCB0cnVlKTsKKyAgICAgICAgaWYgKHNw
YWNlKCktPmlzTWFya2luZygpKQorICAgICAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOwog
ICAgICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6YnVtcChwYXlsb2FkRW5kLCBwYXls
b2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAg
ZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAiLCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGgg
Y2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVz
LCAiOiAiLCByZXN1bHQsICJcbiIpOwpAQCAtMTIzLDE3ICsxMjcsMTEgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgIEZyZWVDZWxsKiBoZWFkID0gMDsKICAg
ICBzaXplX3QgY291bnQgPSAwOwogICAgIGJvb2wgaXNFbXB0eSA9IHRydWU7Ci0gICAgZm9yIChz
aXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxs
KSB7Ci0gICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKLSAgICAgICAgICAgICYmICgo
bWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCi0gICAg
ICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAm
JiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7Ci0gICAgICAgICAgICBpc0VtcHR5ID0gZmFs
c2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKKyAgICBWZWN0
b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CisgICAgYXV0byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6
ZV90IGkpIHsKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxI
ZWFwQ2VsbCo+KCZibG9jay5hdG9tcygpW2ldKTsKIAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25N
b2RlID09IE5lZWRzRGVzdHJ1Y3Rpb24gJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQorICAgICAg
ICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBlbXB0eU1v
ZGUgPT0gTm90RW1wdHkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKS0+
Y2FsbERlc3RydWN0b3IoKnZtKCkpOwogCiAgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBU
b0ZyZWVMaXN0KSB7CkBAIC0xNDQsMTIgKzE0MiwzMyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBoZWFkID0gZnJlZUNlbGw7CiAgICAgICAg
ICAgICArK2NvdW50OwogICAgICAgICB9CisgICAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gZmly
c3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAg
aWYgKGVtcHR5TW9kZSA9PSBOb3RFbXB0eQorICAgICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0g
TWFya3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtzLmdldChpKSkKKyAgICAgICAgICAgICAgICB8
fCAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxv
Y2F0ZWQuZ2V0KGkpKSkpIHsKKyAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZGVzdHJ1Y3Rp
b25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcpCisgICAg
ICAgICAgICBkZWFkQ2VsbHMuYXBwZW5kKGkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBo
YW5kbGVEZWFkQ2VsbChpKTsKICAgICB9Ci0KKyAgICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8g
ZGlzY2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVM
aXN0LAogICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQn
cyBjdXJyZW50bHkgYWxpdmUuCiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3Qg
JiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQogICAgICAgICBtX25l
d2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKKyAgICAKKyAg
ICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2so
KTsKKyAgICAKKyAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNB
bmRDb2xsZWN0b3JJc1J1bm5pbmcpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA6IGRlYWRDZWxs
cykKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOworICAgIH0KIAogICAgIEZyZWVMaXN0
IHJlc3VsdCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQsIGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0xNzcsMTIgKzE5NiwxOCBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChTd2VlCiAgICAgCiAgICAgQVNTRVJU
KCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQodGhpcykpOwogICAgIAotICAgIGlmIChtX2F0dHJp
YnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPE5lZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7
Ci0gICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPERvZXNOb3ROZWVkRGVz
dHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAg
ICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CisgICAgCisgICAgaWYgKG1fYXR0cmlidXRlcy5k
ZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKSB7CisgICAgICAgIGlmIChzcGFjZSgpLT5p
c01hcmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxl
TW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nPihzd2VlcE1vZGUp
OworICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNE
ZXN0cnVjdG9ycz4oc3dlZXBNb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2Vs
ZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzTm9EZXN0cnVjdG9ycz4oc3dlZXBNb2RlKTsKIH0KIAot
dGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KK3RlbXBsYXRlPE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KIEZy
ZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2Rl
KFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYgKHNjcmliYmxlRnJlZUNlbGxzKCkpCkBA
IC0xOTAsNyArMjE1LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxw
ZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZTxkZXN0cnVjdGlvbk1vZGUs
IERvbnRTY3JpYmJsZT4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2Rl
IGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmli
YmxlTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25N
b2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNj
cmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2Vs
ZWN0RW1wdHlNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2
aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVt
cHR5LiBJdCdzIHRoZSBvbmx5CkBAIC0yMDUsNyArMjMwLDcgQEAgRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdEhhc05l
d2x5QWxsb2NhdGVkPE5vdEVtcHR5LCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZT4oc3dl
ZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVt
cHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpI
YW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVz
dHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJi
bGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
SGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAg
ICBpZiAoaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkKQEAgLTIxMyw3ICsyMzgsNyBAQCBGcmVlTGlz
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVy
U2VsZWN0U3dlZXBNb2RlPGVtcHR5TW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUs
IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQ+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1h
cmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBk
ZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJs
ZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9j
YXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+
CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9k
ZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0Zy
ZWVMaXN0KQpAQCAtMjIxLDEwICsyNDYsMTYgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZTxlbXB0
eU1vZGUsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxs
b2NhdGVkTW9kZT4oKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlN
b2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwg
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2Ny
aWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0
ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6
OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2Vl
cE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0
aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9k
ZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NN
b2RlKCkKIHsKLSAgICBpZiAoYXJlTWFya3NTdGFsZSgpKQorICAgIEhlYXBWZXJzaW9uIG1hcmtp
bmdWZXJzaW9uID0gc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24oKTsKKyAgICBib29sIG1hcmtzQXJl
VXNlZnVsID0gIWJsb2NrKCkuYXJlTWFya3NTdGFsZShtYXJraW5nVmVyc2lvbik7CisgICAgCisg
ICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBtYXJrc0FyZVVzZWZ1bCB8PSBi
bG9jaygpLm1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKTsK
KyAgICAKKyAgICBpZiAoIW1hcmtzQXJlVXNlZnVsKQogICAgICAgICByZXR1cm4gc3BlY2lhbGl6
ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1v
ZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NTdGFsZT4oKTsKICAgICByZXR1cm4gc3BlY2lh
bGl6ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9kZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJs
ZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NOb3RTdGFsZT4oKTsKIH0KQEAgLTI0MSwy
NCArMjcyLDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzZXRJc0ZyZWVMaXN0ZQogICAg
IG1faXNGcmVlTGlzdGVkID0gdHJ1ZTsKIH0KIAotY2xhc3MgU2V0TmV3bHlBbGxvY2F0ZWRGdW5j
dG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU2V0
TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotICAgICAg
ICA6IG1fYmxvY2soYmxvY2spCi0gICAgewotICAgIH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBv
cGVyYXRvcigpKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCkgPT0gJm1fYmxvY2stPmJs
b2NrKCkpOwotICAgICAgICBtX2Jsb2NrLT5zZXROZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fYmxvY2s7Ci19OwotCiB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAg
ICBpZiAoZmFsc2UpCkBAIC0yNjYsMTIgKzI3OSwxNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQo
dGhpcykpOwogCiAgICAgaWYgKCFpc0ZyZWVMaXN0ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4i
KTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGVpdGhlciBkaWRuJ3QgdXNlIHRoaXMg
YmxvY2sgYXQgYWxsIGZvciBhbGxvY2F0aW9uIHNpbmNlIGxhc3QgR0MsCiAgICAgICAgIC8vIG9y
IHNvbWVvbmUgaGFkIGFscmVhZHkgZG9uZSBzdG9wQWxsb2NhdGluZygpIGJlZm9yZS4KICAgICAg
ICAgQVNTRVJUKGZyZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIkZyZWUgbGlz
dDogIiwgZnJlZUxpc3QsICJcbiIpOworICAgIAogICAgIC8vIFJvbGwgYmFjayB0byBhIGNvaGVy
ZW50IHN0YXRlIGZvciBIZWFwIGludHJvc3BlY3Rpb24uIENlbGxzIG5ld2x5CiAgICAgLy8gYWxs
b2NhdGVkIGZyb20gb3VyIGZyZWUgbGlzdCBhcmUgbm90IGN1cnJlbnRseSBtYXJrZWQsIHNvIHdl
IG5lZWQgYW5vdGhlcgogICAgIC8vIHdheSB0byB0ZWxsIHdoYXQncyBsaXZlIHZzIGRlYWQuIApA
QCAtMjc5LDEyICsyOTcsMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2Nh
dGluZwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2Nh
dGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24o
KTsKIAotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciBmdW5jdG9yKHRoaXMpOwotICAgIGZv
ckVhY2hDZWxsKGZ1bmN0b3IpOworICAgIGZvckVhY2hDZWxsKAorICAgICAgICBbJl0gKEhlYXBD
ZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgLT4gSXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAg
ICAgIHNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOwogCiAgICAgZm9yRWFjaEZyZWVDZWxsKAog
ICAgICAgICBmcmVlTGlzdCwKICAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCkgeworICAgICAg
ICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwg
UmF3UG9pbnRlcihjZWxsKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRl
c3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgY2VsbC0+emFw
KCk7CiAgICAgICAgICAgICBjbGVhck5ld2x5QWxsb2NhdGVkKGNlbGwpOwpAQCAtMzA3LDEwICsz
MzAsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogCiBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKKyAgICBpZiAo
ZmFsc2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6
OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyFcbiIpOwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCkt
PmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKIAogICAg
IGlmICghaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCJUaGVyZSBhaW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAg
ICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQgYWxyZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdo
ZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgogICAgICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAg
ICB9CkBAIC0zNTQsNiArMzgxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93
KEhlYXBWZQogICAgIAogICAgIGlmIChoYW5kbGUoKS5hbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQo
JmhhbmRsZSgpKQogICAgICAgICB8fCAhbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmco
bWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFM
b2coUmF3UG9pbnRlcih0aGlzKSwgIjogQ2xlYXJpbmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0
aGluZyBlbHNlLlxuIik7CiAgICAgICAgIC8vIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBibG9j
ayBpcyBmdWxsIGFuZCBpcyBhbHJlYWR5IHJlY29nbml6ZWQgYXMgc3VjaCwgb3IgdGhhdCB0aGUK
ICAgICAgICAgLy8gYmxvY2sgZGlkIG5vdCBzdXJ2aXZlIHRoZSBwcmV2aW91cyBHQy4gU28sIHdl
IGNhbiBjbGVhciBtYXJrIGJpdHMgdGhlIG9sZCBmYXNoaW9uZWQKICAgICAgICAgLy8gd2F5LiBO
b3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3Igc3VjaCBhIGJsb2NrIHRvIGhhdmUgbmV3bHlBbGxv
Y2F0ZWQgd2l0aCBhbiB1cC10by0KQEAgLTM2Miw2ICszOTEsOCBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFs
bG9jYXRlZC4KICAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwogICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjog
RG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogICAgICAgICBpZiAoaGFu
ZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7
CiAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29udGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlB
bGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBzZXQgb2YgYml0cwpAQCAtNDI5LDcgKzQ2MCw3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWUKICAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1l
RnJlZUxpc3QhXG4iKTsKICAgICBBU1NFUlQoaXNGcmVlTGlzdGVkKCkpOwogICAgIG1faXNGcmVl
TGlzdGVkID0gZmFsc2U7Ci0gICAgYWxsb2NhdG9yKCktPnNldElzQWxsb2NhdGVkKHRoaXMsIHRy
dWUpOworICAgIGFsbG9jYXRvcigpLT5hdG9taWNTZXRBbmRDaGVja0lzQWxsb2NhdGVkKHRoaXMs
IHRydWUpOwogfQogCiBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5MCwzMCArMTkwLDMyIEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICBIYW5k
bGUoSGVhcCYsIHZvaWQqKTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9u
TW9kZT4KKyAgICAgICAgZW51bSBTd2VlcERlc3RydWN0aW9uTW9kZSB7IEJsb2NrSGFzTm9EZXN0
cnVjdG9ycywgQmxvY2tIYXNEZXN0cnVjdG9ycywgQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxl
Y3RvcklzUnVubmluZyB9OworICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVj
dGlvbk1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2Rl
KFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgICAgICAKICAgICAgICAgZW51bSBTY3Jp
YmJsZU1vZGUgeyBEb250U2NyaWJibGUsIFNjcmliYmxlIH07CiAgICAgICAgICAgICAKLSAgICAg
ICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBs
YXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CiAgICAgICAgIEZyZWVMaXN0
IHN3ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgZW51bSBFbXB0eU1vZGUgeyBJc0VtcHR5LCBOb3RFbXB0eSB9Owog
ICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcERlc3RydWN0aW9u
TW9kZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEhh
c05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgIAogICAgICAg
ICBlbnVtIE5ld2x5QWxsb2NhdGVkTW9kZSB7IEhhc05ld2x5QWxsb2NhdGVkLCBEb2VzTm90SGF2
ZU5ld2x5QWxsb2NhdGVkIH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAg
ICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9k
ZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVj
dFN3ZWVwTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAKLSAgICAgICAgdGVt
cGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2Rl
LCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBN
b2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1v
ZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKCk7CiAgICAg
ICAgIAogICAgICAgICBlbnVtIE1hcmtzTW9kZSB7IE1hcmtzU3RhbGUsIE1hcmtzTm90U3RhbGUg
fTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0
cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+
CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9u
TW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KICAgICAg
ICAgRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcCgpOwogICAgICAgICAgICAgCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9yTWFya2luZygpCiAKIHZvaWQgTWFya2VkU3Bh
Y2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewotICAgIEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAg
ICBmb3JFYWNoQWxsb2NhdG9yKAogICAgICAgICBbJl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2Nh
dG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAgICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFs
bG9jYXRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdv
cmxkU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1
bWVUaGVXb3JsZFNjb3BlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2
b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZp
c2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1fc3RhY2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQo
MCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAg
LCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAs
IG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyAr
ODksNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0
b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgY2xlYXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1h
cmtTdGFja3MoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAg
LTEwOSwxNiArMTA3LDE3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAK
IHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFx
dWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29w
aWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRl
ciA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0
YWNrKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFj
ay5jbGVhcigpOworICAgIG1fY29sbGVjdG9yU3RhY2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JT
dGFjay5jbGVhcigpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZl
Um9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpO
ZXdHcmV5KTsKKyAgICAgICAganNDZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsK
IAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0NlbGwpOwogICAgICAgICByZXR1cm47CkBA
IC0yMTAsNyArMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJr
ZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAg
IC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBn
cmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8gSW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246
IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJl
bWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dy
ZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAg
IGFwcGVuZFRvTWFya1N0YWNrKGNvbnRhaW5lciwgY2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywx
OSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNT
RVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwt
PmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6
Ok5ld0dyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAg
ICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAg
ICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVz
dCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBh
bnl0aGluZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2Ug
ZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRl
ZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKICAgICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxs
KTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChjZWxsKTsKK30KKwordm9pZCBTbG90Vmlz
aXRvcjo6YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAg
ICBtX211dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1h
cmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKQEAgLTI5NCwxMiArMjk2LDE3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50
Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xk
Q2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAg
IGRhdGFMb2coIlZpc2l0aW5nICIsIFJhd1BvaW50ZXIoY2VsbCkpOworICAgICAgICBpZiAobV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICAgICAgZGF0YUxvZygiIChtdXRhdG9yKSIp
OworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KICAgICAKLSAgICAvLyBUaGVyZSBpcyBu
byByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4gR3Jl
eSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlzaXRlZCBieSBvbmUgbWFya2luZyB0aHJl
YWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtpbmcgd2lsbCBjaGFuZ2UgdGhlIHN0YXRl
IG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxyZWFkeSBncmV5LgotICAgIEFTU0VSVCht
X29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkgfHwgbV9vbGRDZWxsU3RhdGUgPT0g
Q2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5ueSBzdG9yeTogaXQncyBwb3NzaWJsZSBm
b3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5LCBpZiB3ZSBiYXJyaWVyIHRoZSBvYmpl
Y3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1lIHRoYXQgaXQncyBtYXJrZWQuIFRoYXQn
cyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1yYXJlIHJhY2UuIEl0J3MKKyAgICAvLyBu
b3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBjb3JyZWN0IG9yIHByb2ZpdGFibGUgdG8g
YmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGJsYWNrLgogICAgIAog
ICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkFudGhyYWNpdGVPckJsYWNrKTsKICAg
ICAKQEAgLTMyNiwyMyArMzMzLDIzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6
dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVp
bGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3Jl
eSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCiAgICAgICAgICAgICBt
X2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxs
KSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
K3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZy
b20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRy
eSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25zZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFz
c3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRhYmxlLgogCiAgICAgLy8gQXZvaWQgbG9j
a2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBo
LgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisgICAgaWYgKGZyb20uc2l6ZSgpIDwgMikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVk
IHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZQogICAgIC8vIHRoYXQg
ZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4KLSAgICBpZiAobV9oZWFwLm1fc2hhcmVk
TWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUg
YW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1MiwyNiArMzU5LDQzIEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBP
dGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29uLCBhbmQgZG9u
YXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9oZWFwLm1fc2hhcmVkTWFya1N0
YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1RvKHRvKTsKIAogICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit7Cisg
ICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3RvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVk
Q29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVLbm93blBhcmFsbGVsKG1fbXV0YXRvclN0
YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayk7Cit9CisKK3ZvaWQgU2xvdFZp
c2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0lu
UGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICghbV9zdGFjay5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFj
ay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQotICAgICAgICAgICAgdmlzaXRDaGls
ZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFj
ay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQo
dGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZpbGwoKTsKKyAgICAgICAgICAgIG1faXNW
aXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBj
b3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Uo
KTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAg
ICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xsZWN0b3JTdGFjay5yZW1vdmVMYXN0KCkp
OworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgLy8gV2Uga25vdyBm
b3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmplY3RzIGJlY2F1c2Ugb2YgdGhlIGJhcnJp
ZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAvLyBtYXJraW5nLiBNYXJraW5nIHdpbGwg
dmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhlIGJhcnJpZXIgd2lsbCB2aXNpdCBpdAor
ICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1lcywgYW5kIGFsd2F5cyBhZnRlciBpdCB3
YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sg
PSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjpt
aW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9tdXRhdG9yU3RhY2suY2Fu
UmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxk
cmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAgICAgIH0KICAgICAgICAgZG9u
YXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAKICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZO
ZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJl
ZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1
bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJh
aW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFs
bGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQxNiw2MCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
cmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCBlaXRo
ZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCiAg
ICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgogICAgICAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsK
KyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFj
aCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFw
Lm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2
ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBJcyB0aGVyZSB3b3JrIHRv
IGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkTWFya1N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRD
b2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwg
IW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21h
cmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2spOworICAgICAgICAgICAgICAgICAgICBt
X2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKGxvY2ssIHRpbWVvdXQp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2ZURyYWluKTsKKworICAgICAgICAgICAg
ICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
U2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRpb24/IElmIHNvLCBsZXQgdGhlIG1hc3Rl
ciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0
YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29s
bGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFw
Lm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAg
ICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAKLSAgICAg
ICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdCgKLSAgICAg
ICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAgICAgICAgICAgICAgICBsb2NrLCB0aW1l
b3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10gewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+
aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIElzIHRoZSBjdXJy
ZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgogICAgICAg
ICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWRE
cmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbV9zdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0
YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAg
ICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAgICAgICAg
Km1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0
aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnN0ZWFsU29t
ZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtT
dGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAg
ICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAgICAgICAgZHJhaW4odGltZW91dCk7CiAgICAg
fQogfQogCkBAIC00NTMsNyArNDg5LDYgQEAgdm9pZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9v
dCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJv
b3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIEFTU0VS
VChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJv
b3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00NjcsMTMgKzUwMiw2IEBAIFRyaVN0YXRlIFNs
b3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QKICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsK
IH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290Q291bnQoKQotewotICAgIEFTU0VSVCgh
bV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5zaXplKCk7Ci19Ci0KIHZvaWQgU2xv
dFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1fb3Bh
cXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1ICs1MjUsMTQgQEAgdm9pZCBTbG90VmlzaXRv
cjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiB9CiAKLXZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWlu
KE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBkb25hdGUoKTsKLSAgICBkcmFpbigpOwor
ICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJv
b3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxk
IG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3RzIGFyZSBub24tZW1wdHkuCiAgICAgewog
ICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2hlYXAubV9vcGFxdWVSb290c011
dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDogbV9vcGFxdWVSb290cykKQEAgLTUyNiwx
MCArNTUzLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRgogICAg
ICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxpemVycy5yZW1vdmVOZXh0KCktPmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogbWFya1N0YWNrKCkpCi0gICAg
ICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAgIG91dC5wcmludCgiQ29sbGVjdG9yOiBbIiwg
cG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtTdGFjaygpKSwgIl0sIE11dGF0b3I6IFsiLCBw
b2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFjaygpKSwgIl0iKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJ
KHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIYW5kbGVU
eXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAgIFNsb3RWaXNpdG9yKEhlYXAmKTsKICAgICB+
U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVy
biBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJr
U3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgTWFya1N0YWNrQXJyYXkm
IG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIGNvbnN0
IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3Rh
Y2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFjazsgfQorICAgIAogICAgIFZNJiB2bSgp
OwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwogICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKQEAg
LTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRP
cGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3Bh
cXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJpU3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJp
U3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKIAotICAgIGJv
b2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0Vt
cHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3Rh
Y2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRpZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQg
cmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0YWNrKCk7CisgICAgdm9pZCBjbGVhck1hcmtT
dGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0NvcGllZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUoKTsKLSAgICB2b2lkIGRyYWluKCk7Ci0g
ICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAgIHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0
aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CisgICAgdm9pZCBkb25hdGVBbmRE
cmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsK
ICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7IFNsYXZlRHJhaW4sIE1hc3RlckRyYWlu
IH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlKTsKKyAgICBlbnVt
IGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9uZSwgVGltZWRPdXQgfTsKKyAgICBTaGFyZWRE
cmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKIAogICAgIHZvaWQgaGFydmVz
dFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6
ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVibGljOgogICAgIAogICAgIEhlYXBWZXJzaW9u
IG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCisg
ICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKwogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAKQEAgLTE0MSwyMSArMTQ1LDIz
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyVHlwZT4KICAgICB2
b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5cGUmLCBKU0NlbGwqKTsKICAgICAKKyAg
ICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhjb25zdCBKU0NlbGwqKTsKKyAgICAKICAg
ICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAgIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwotICAgIHZvaWQgbWVyZ2VPcGFx
dWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRh
YmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAg
ICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7CisgICAgdm9pZCBkb25hdGVLbm93blBhcmFs
bGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8pOwogCi0gICAgTWFy
a1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNr
OworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0YWNrOwogICAgIE9wYXF1ZVJvb3RTZXQg
bV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2li
bGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlz
aXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsKICAgICBzaXplX3QgbV92aXNpdENvdW50
OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwogICAgIApAQCAtMTY1LDcgKzE3MSw3IEBA
IHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxk
ZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9Owot
ICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAgICBib29sIG1faXNWaXNpdGluZ011dGF0
b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvcklubGluZXMuaAko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwxMyArMTA1LDE1IEBAIGlubGluZSB2
b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEKIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCkt
PnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYg
KCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFN
ZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogaW5s
aW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qg
c2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChtX29sZENl
bGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAg
ICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogI2VuZGlm
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICAgICAgaml0LmFib3J0V2l0aFJl
YXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RTdHJ1Y3R1cmUubGlu
aygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJlY3RJbmRleGluZ1R5cGUgPSBqaXQuYnJhbmNo
OChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4aW5nVHlwZSgpKSk7
CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEFISW5kZXhpbmdUeXBl
SXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRleGluZ1R5cGUubGluaygmaml0KTsKIApAQCAt
NDE1LDcgKzQxNSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUK
ICAgICB9CiAjZWxzZQogICAgIC8vIERvIGEgMzItYml0IHdpZGUgc3RvcmUgdG8gaW5pdGlhbGl6
ZSB0aGUgY2VsbCdzIGZpZWxkcy4KLSAgICBqaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0
dXJlUHRyLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpKTsKKyAgICBqaXQuc3RvcmUz
MihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSk7CiAgICAgaml0LnN0b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4ICsxMzE4LDggQEAgcHVibGljOgogICAgICAg
ICBzdG9yZTY0KHNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2Vsc2UKICAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBp
bmZvIGZsYWdzIHVzaW5nIGEgc2luZ2xlIDMyLWJpdCB3aWRlIGxvYWQgYW5kIHN0b3JlLgotICAg
ICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6
OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRj
aCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSkpOworICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJl
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0
Y2gpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRl
c3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSk7CiAKICAgICAgICAgLy8g
U3RvcmUgdGhlIFN0cnVjdHVyZUlECiAgICAgICAgIHN0b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkBA
IC0xNTg5LDYgKzE1ODksMjggQEAgcHVibGljOgogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVk
SW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSwgQWRkcmVzcyhy
ZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0OjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShHUFJSZWcgYmFz
ZUdQUiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FwYWNpdHk7ICsraSkKKyAgICAgICAgICAgIHN0b3JlVHJ1
c3RlZFZhbHVlKEpTVmFsdWUoKSwgQWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJ
bmxpbmVTdG9yYWdlKCkgKyBpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIH0KKwor
ICAgIHZvaWQgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVz
dDMyKFplcm8sIGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7
CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgaW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlKCksIEJhc2VJbmRleChiYXNlR1BSLCBpbmxpbmVD
YXBhY2l0eSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSk7
CisgICAgICAgIGJyYW5jaFRlc3QzMihOb25aZXJvLCBpbmxpbmVDYXBhY2l0eSkubGlua1RvKGxv
b3AsIHRoaXMpOworICAgICAgICBlbXB0eS5saW5rKHRoaXMpOworICAgIH0KKworICAgIHZvaWQg
ZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKEdQUlJlZyBidXR0ZXJmbHlHUFIsIHVuc2ln
bmVkIG91dE9mTGluZUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG91dE9mTGluZUNhcGFjaXR5OyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRW
YWx1ZShKU1ZhbHVlKCksIEFkZHJlc3MoYnV0dGVyZmx5R1BSLCAtc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSAtIChpICsgMSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgfQogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIHdhbmdzSW50NjRIYXNoKEdQUlJlZyBpbnB1dEFuZFJl
c3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZv
aWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlVwogICAgICAgICBzdG9yZTMyKGluZGV4aW5n
VHlwZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAg
IH0KIAotICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIGluZGV4aW5nVHlwZSk7CisgICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lk
IEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdp
c3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAxLDggKzIyMDEsMTAgQEAgY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdy
b3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAg
IG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQp
OworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVT
dG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocmVzdWx0KTsKIH0KIApAQCAtMjIxMSw4ICsyMjEzLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5h
dGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIEJ1dHRlcmZseSog
cmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5
KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVj
dC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4ocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDA4LDcgKzEwMDgsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1
Y3RpCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRX
aXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hl
Y2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMik7CiAgICAgICAgICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQ
dHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAg
ICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUg
d2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcs
MTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAg
ICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNs
b3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0
ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExv
Y2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwog
ICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUs
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1p
dFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWlj
OgpAQCAtMTE1NywxMSArMTE1NywxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKEluc3RyCiAgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAg
IAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwotICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQo
cmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsg
aW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRl
QmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDE1IEBAIHZv
aWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIFNUQVRJQ19BU1NFUlQoRXZh
bENvZGUgPT0gMSk7CiAgICAgU1RBVElDX0FTU0VSVChGdW5jdGlvbkNvZGUgPT0gMik7CiAgICAg
U1RBVElDX0FTU0VSVChNb2R1bGVDb2RlID09IDMpOworICAgIAorICAgIFNUQVRJQ19BU1NFUlQo
SXNBcnJheSA9PSAweDAxKTsKKyAgICBTVEFUSUNfQVNTRVJUKEluZGV4aW5nU2hhcGVNYXNrID09
IDB4MEUpOworICAgIFNUQVRJQ19BU1NFUlQoTm9JbmRleGluZ1NoYXBlID09IDB4MDApOworICAg
IFNUQVRJQ19BU1NFUlQoSW50MzJTaGFwZSA9PSAweDA0KTsKKyAgICBTVEFUSUNfQVNTRVJUKERv
dWJsZVNoYXBlID09IDB4MDYpOworICAgIFNUQVRJQ19BU1NFUlQoQ29udGlndW91c1NoYXBlID09
IDB4MDgpOworICAgIFNUQVRJQ19BU1NFUlQoQXJyYXlTdG9yYWdlU2hhcGUgPT0gMHgwQSk7Cisg
ICAgU1RBVElDX0FTU0VSVChTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPT0gMHgwQyk7CiAKICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8
V3JpdGVCYXJyaWVyPEpTQ2VsbD4qPigweDQwMDApLT5zbG90KCkpKSAtIDB4NDAwMCkpOwogICAg
IHN0YXRpY19hc3NlcnQoUHV0QnlJZFByaW1hcnlUeXBlTWFzayA9PSAweDYsICJMTEludCBhc3N1
bWVzIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgaXMgPT0gMHg2Iik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE1MDUsNiArMTUwNSw3IEBAIF9s
bGludF9vcF9nZXRfYnlfdmFsOgogLm9wR2V0QnlWYWxPdXRPZkJvdW5kczoKICAgICBsb2FkcEZy
b21JbnN0cnVjdGlvbig0LCB0MCkKICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX291dE9m
Qm91bmRzW3QwXQorICAgIGptcCAub3BHZXRCeVZhbFNsb3cKIAogLm9wR2V0QnlWYWxOb3RJbmRl
eGVkU3RvcmFnZToKICAgICAjIEZpcnN0IGxldHMgY2hlY2sgaWYgd2UgZXZlbiBoYXZlIGEgdHlw
ZWQgYXJyYXkuIFRoaXMgbGV0cyB1cyBkbyBzb21lIGJvaWxlcnBsYXRlIHVwIGZyb250LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTQgKzMzMywx
NCBAQCBlbHNlCiBlbmQKIAogIyBDb25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZs
aWVzLgotY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMQotY29uc3QgSW5kZXhpbmdT
aGFwZU1hc2sgICAgICAgID0gMzAKLWNvbnN0IE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDAK
LWNvbnN0IEludDMyU2hhcGUgICAgICAgICAgICAgICA9IDIwCi1jb25zdCBEb3VibGVTaGFwZSAg
ICAgICAgICAgICAgPSAyMgotY29uc3QgQ29udGlndW91c1NoYXBlICAgICAgICAgID0gMjYKLWNv
bnN0IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDI4Ci1jb25zdCBTbG93UHV0QXJyYXlTdG9y
YWdlU2hhcGUgPSAzMAorY29uc3QgSXNBcnJheSAgICAgICAgICAgICAgICAgID0gMHgwMQorY29u
c3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMHgwRQorY29uc3QgTm9JbmRleGluZ1NoYXBl
ICAgICAgICAgID0gMHgwMAorY29uc3QgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0gMHgwNAor
Y29uc3QgRG91YmxlU2hhcGUgICAgICAgICAgICAgID0gMHgwNgorY29uc3QgQ29udGlndW91c1No
YXBlICAgICAgICAgID0gMHgwOAorY29uc3QgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgw
QQorY29uc3QgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID0gMHgwQwogCiAjIFR5cGUgY29uc3Rh
bnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDYKQEAgLTg4Nyw3ICs4ODcsNyBAQCBtYWNybyBhcnJh
eVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwgCiAgICAgY29uc3QgaW5kZXhpbmdUeXBlID0g
Y2VsbEFuZEluZGV4aW5nVHlwZSAKICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbY2Vs
bF0sIHNjcmF0Y2gKICAgICBzdG9yZWkgc2NyYXRjaCwgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVu
U3RydWN0dXJlSURbcHJvZmlsZV0KLSAgICBsb2FkYiBKU0NlbGw6Om1faW5kZXhpbmdUeXBlW2Nl
bGxdLCBpbmRleGluZ1R5cGUKKyAgICBsb2FkYiBKU0NlbGw6Om1faW5kZXhpbmdUeXBlQW5kTWlz
Y1tjZWxsXSwgaW5kZXhpbmdUeXBlCiBlbmQKIAogbWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJ
bkVkZW4oY2VsbCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDYgKzc0LDcgQEAgaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0m
IAogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAgICAgaWYgKGhhc0luZGV4
aW5nSGVhZGVyKQogICAgICAgICAqcmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdI
ZWFkZXI7CisgICAgbWVtc2V0KHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNh
cGFjaXR5LCAwLCBwcm9wZXJ0eUNhcGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTA1LDYgKzEwNiwxMCBAQCBpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3JvCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9y
YWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAogICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3Bl
cnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgdG90YWxTaXplKDAs
IG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIG1lbXNldCgKKyAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3Jh
Z2UoKSAtIG5ld1Byb3BlcnR5Q2FwYWNpdHksCisgICAgICAgIDAsCisgICAgICAgIChuZXdQcm9w
ZXJ0eUNhcGFjaXR5IC0gb2xkUHJvcGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDE1ICs5NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6
Ci0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQogICAgIERlZmVyR0MgbV9kZWZlckdDOwotI2Vs
c2UKLSAgICBzdHJ1Y3QgTm9EZWZlciB7Ci0gICAgICAgIE5vRGVmZXIoSGVhcCYgaGVhcCkgOiBt
X2hlYXAoaGVhcCkgeyB9Ci0gICAgICAgIEhlYXAmIG1faGVhcDsKLSAgICB9OwotICAgIE5vRGVm
ZXIgbV9kZWZlckdDOwotI2VuZGlmCiB9OwogCiBjbGFzcyBDb25jdXJyZW50SklUTG9ja2VyIDog
cHVibGljIENvbmN1cnJlbnRKSVRMb2NrZXJCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0Fy
Z3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDEzIEBAIGJvb2wg
R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3duUHJvcGUKICAgICBUeXBlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5jYW5B
Y2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09i
amVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKKyAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CisgICAgYm9vbCByZXN1bHQg
PSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNs
b3QpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBA
IC0xMjksNyArMTMxLDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4
KAogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KGNlbGwpOwogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0KKyAgICAKICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNz
SW5kZXhRdWlja2x5KGluZGV4KSkgewogICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNr
bHkodm0sIGluZGV4LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1
IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0
aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJ
bmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBFOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAwOwotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3Ig
YXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAg
ICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAg
ICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUg
ICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VT
aGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJy
YXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGlu
Z1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgwRTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAgICAgICA9IDB4MDA7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAgICAgICAgICAgICAgPSAweDAyOyAvLyBP
bmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNo
YXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAgICAgICA9IDB4MDY7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICAgICAgICAgPSAweDA4Oworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgICAgICAgID0g
MHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBl
ICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFw
ZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRl
eGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFw
ZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJl
ck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZv
ciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8v
IG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICA9IDB4MTA7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEw
OworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBs
b2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAg
ICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxv
Y2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkg
dHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgyLDYgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVk
aW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVz
QW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAK
K3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGluZ1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hl
bGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDkgQEAg
Ym9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZShWTSYgdgogICAgIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAg
IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFz
OwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIAorICAgIHNldEJ1
dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA2
MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3Jh
CiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVycmVkIGFyb3VuZCB0aGUgdW5zaGlmdENvdW50
U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMgdGhlIGJ1dHRlcmZseSBpbgogICAgIC8vIGEg
d2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQgd2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQs
IHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKKyAgICBKU0NlbGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKICAgICAKICAgICBp
ZiAobW92ZUZyb250ICYmIHN0b3JhZ2UtPm1faW5kZXhCaWFzID49IGNvdW50KSB7CiAgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQo
c3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAg
ICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOwotICAg
ICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZs
eSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9y
TGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0
dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dD
YXNlKHZtLCBkZWZlckdDLCBtb3ZlRnJvbnQsIGNvdW50KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBA
IGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5k
ZXhdLmNsZWFyKCk7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDgg
KzEwMCwzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CiAgICAgYm9vbCBp
bmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25zdDsKICAgICBib29sIGlzQVBJVmFsdWVXcmFw
cGVyKCkgY29uc3Q7CisgICAgCisgICAgLy8gRWFjaCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2su
IEN1cnJlbnRseSBpdCdzIHNpbXBseSBhdmFpbGFibGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4g
SXQncworICAgIC8vIGEgZnVsbC1ibG93biBXVEY6OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxvY2sg
aXMgY3VycmVudGx5IHVzZWQgaW4gSlNBcnJheSBhbmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRl
cmluZyB3aXRoIHRoZSBTdHJ1Y3R1cmUgbG9jayBpcyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBt
dXN0IGJlIGFjcXVpcmVkIGZpcnN0LgorICAgIHZvaWQgbG9ja0ludGVybmFsTG9jaygpOworICAg
IHZvaWQgdW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgCisgICAgY2xhc3MgSW50ZXJuYWxMb2Nr
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxsKQor
ICAgICAgICAgICAgOiBtX2NlbGwoY2VsbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jZWxs
LT5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5JbnRl
cm5hbExvY2tlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJu
YWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgSlND
ZWxsKiBtX2NlbGw7CisgICAgfTsKIAogICAgIEpTVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdDsKICAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlKCkgY29uc3Q7CiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQoKSBjb25z
dCB7IHJldHVybiBtX3N0cnVjdHVyZUlEOyB9CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBj
b25zdDsKQEAgLTE2Nyw2ICsxOTEsMTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2Vs
bFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcykt
Pm1fY2VsbFN0YXRlID0gZGF0YTsgfQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hh
bmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3
U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VX
ZWFrUmVsYXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisg
ICAgQ2VsbFN0YXRlIGF0b21pY0NvbXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3Rh
dGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBu
ZXdTdGF0ZSk7CisgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNl
dCgpCiAgICAgewpAQCAtMTgzLDkgKzIxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBm
aWVsZC4gQWx3YXlzIHVzZSBhIENBUyBsb29wLCBzaW5jZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQg
dXNpbmcgQ0FTCisgICAgLy8gZnJvbSBvdGhlciB0aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwg
bG9jay4gT25lIGV4Y2VwdGlvbjogeW91IGRvbid0IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAgICAv
LyBvYmplY3QgaGFzIG5vdCBlc2NhcGVkIHlldC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQpAQCAtMjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVy
ZUlEIG1fc3RydWN0dXJlSUQ7Ci0gICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAg
IEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0byB0
aGlzIGZpZWxkLiBBbHdheXMgQ0FTLgogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86
OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBpbmxpbmUgSlNDZWxsOjpK
U0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlubGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9zdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUtPmlkKCkp
Ci0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICwg
bV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkpCiAgICAg
LCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSkKICAgICAs
IG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCkBAIC01Nyw2ICs1Nyw5IEBAIGlubGlu
ZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3QKIAogaW5saW5lIHZvaWQgSlNDZWxs
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CisgICAgLy8gVGhpcyBvYmplY3QgaXMgcmVhZHkg
dG8gYmUgZXNjYXBlZCBzbyB0aGUgY29uY3VycmVudCBHQyBtYXkgc2VlIGl0IGF0IGFueSB0aW1l
LiBXZSBoYXZlCisgICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgbm9uZSBvZiBvdXIgc3RvcmVzIHNp
bmsgYmVsb3cgaGVyZS4KKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogI2lmIEVOQUJMRShH
Q19WQUxJREFUSU9OKQogICAgIEFTU0VSVCh2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAg
ICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcygwKTsKQEAgLTc0LDcgKzc3LDcgQEAgaW5s
aW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIGlmIChzdHJ1Y3R1cmUp
IHsKICNlbmRpZgogICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwotICAg
ICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAg
IG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
OwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFn
cygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEsOSArOTQsMTQgQEAgaW5saW5l
IEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2lu
bGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQorCiBpbmxpbmUgSW5kZXhpbmdU
eXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbmRleGlu
Z1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlwZXM7
CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTE5
NSwxNyArMjAzLDI2IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIoKSAK
ICAgICByZXR1cm4gbV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2
b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitB
TFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlz
LT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJl
KCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0
dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0g
c3RydWN0dXJlLT5pZCgpOwogICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5s
aW5lVHlwZUZsYWdzKCk7CiAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KTsKLSAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAg
SW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpOworICAgIGlmIChtX2luZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5k
ZXhpbmdUeXBlKSB7CisgICAgICAgIEFTU0VSVCghKG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJh
eVR5cGVzQW5kSGlzdG9yeSkpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmRl
eGluZ1R5cGUgb2xkVmFsdWUgPSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgbmV3VmFsdWUgPSAob2xkVmFsdWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3Rv
cnkpIHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAg
ICAgICBpZiAoV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGlu
Z1R5cGVBbmRNaXNjLCBvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVj
dHVyZSk7CiB9CiAKIGlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJs
ZSgpIGNvbnN0CkBAIC0yODQsMTEgKzMwMSwyNiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxE
ZXN0cnVjdG9yKFZNJiB2CiAgICAgaWYgKGlzWmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAg
ICBBU1NFUlQoc3RydWN0dXJlSUQoKSk7Ci0gICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3Ry
dWN0dXJlSXNJbW1vcnRhbCkKLSAgICAgICAgc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1l
dGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxh
Z3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0
cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsK
KyAgICAgICAgZGVzdHJveSh0aGlzKTsKKyAgICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0Kj4odGhpcyktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95
KHRoaXMpOwogICAgIHphcCgpOwogfQogCitpbmxpbmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5h
bExvY2soKQoreworICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0
PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5k
ZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6bG9jaygqbG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpT
Q2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiog
bG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlw
ZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzEx
MiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAg
ICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXpl
KTsKLSAgICAKLSAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0
Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CisKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9
IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RP
UkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4o
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9S
QUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHBy
b3RlY3QgQ29udGlndW91cy0+QXJyYXlTdG9yYWdlIHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQg
bWFrZSB0aGF0CisgICAgICAgIC8vIHJhY2Ugd29yayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAg
IEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgICAgICBJbmRleGluZ1R5
cGUgbmV3VHlwZSA9IHRoaXMtPmluZGV4aW5nVHlwZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0
aGlzLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgc3dpdGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZs
eS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
IC8vIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTCisgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rvciwg
YnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAg
aWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1h
cCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQg
QEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1
dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBX
ZSB3YW50IHRvIGRlZmVuZCBhZ2FpbnN0IG11bHRpcGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhl
IG11dGF0b3I6CisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVy
Zmx5IGFuZCB0aGVuIGluc3RhbGwgYSBzdHJ1Y3R1cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8v
ICAgcHJvcGVydGllcy4gVGhpcyB0cml2aWFsbHkgd29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNv
dWxkIG11dGF0ZSB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBz
dHJ1Y3R1cmUgbG9jayBmb3IKKyAgICAvLyAgIGRpY3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAv
LyAtIFRoZSBidXR0ZXJmbHkgY291bGQgc2hyaW5rLCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBl
biBpZiB0aGUgb2JqZWN0IHdhcyBhIGRpY3Rpb25hcnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlz
IG1lYW5zIHRoYXQgd2Ugd291bGQgZ2V0IHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNx
dWlyZSBhIGxvY2suIFRoYXQKKyAgICAvLyAgIHRyaXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxk
IGxvYWQgdGhlIHN0cnVjdHVyZSBiZWZvcmUgdGhlIG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5
CisgICAgLy8gICBhbmQgdGhlbiBsb2FkIHRoZSBidXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBX
ZSBwcm90ZWN0IGFnYWluc3QgdGhpcyBjYXNlIGJ5IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3Ry
dWN0dXJlIGEgc2Vjb25kIHRpbWUgYmVmb3JlIHNjYW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMg
bWVhbnMgdGhhdCB0aGUgYnV0dGVyZmx5CisgICAgLy8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVy
Zmx5IHRoYXQgdGhlIG11dGF0b3IgaGFkIGluc3RhbGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5n
IHRoZQorICAgIC8vICAgc3R1cmN0dXJlLiBTbyBpZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBh
IG5vbi1kaWN0aW9uYXJ5IHRoZW4gdGhlIGJ1dHRlcmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBo
YXZlIGJlZW4gc2hydW5rLgorICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNE
aWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlv
bmFyeSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZs
eSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExv
YWRGZW5jZSgpOworICAgICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1
Y3R1cmUtPmlkKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNp
dG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5
KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlv
biA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwx
NSArMjM5LDI1IEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAg
ICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZt
KCkpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7
Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHko
dmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0o
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7
CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAg
ICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOwor
ICAgIGVsc2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZs
eSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVj
dC0+c3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5
KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3Rv
cmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUp
CiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0
b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwotCisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAg
IHN0cnVjdHVyZS0+bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
ICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBA
IEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0
ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7
CiAgICAgCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03
MzEsNyArNzc3LDEwIEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7
Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRl
cmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0s
IG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1
Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIApA
QCAtNzQyLDcgKzc5MSwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUlu
aXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsg
aS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJl
KTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAt
NzUzLDcgKzgwNSwxMCBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlh
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVE
b3VibGUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVy
Zmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
c2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHkt
PmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtNzY0LDcgKzgxOSwxMCBAQCBDb250aWd1b3Vz
SlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1
b3VzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CiB9CiAKQEAgLTc5Nyw3ICs4NTUsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3Jl
YXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVj
dG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQg
PSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3Ry
dWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkp
OworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdT
dHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg4MCw3ICs5NDEsMTAgQEAg
QXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0
dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJl
KHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBzdG9yYWdlOwogfQogCkBAIC05MzUsNyAr
OTk5LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9
CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZs
eSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwg
bmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdl
OwogfQogCkBAIC05ODEsNyArMTA0OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252
ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5z
aXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBu
ZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAg
ICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTAwNiw3ICsxMDc2LDIzIEBAIEFycmF5U3Rv
cmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICB9CiAgICAgCiAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKworICAgIC8vIFRo
aXMgaGFzIGEgY3JhenkgcmFjZSB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gV2hlbiBjaGFu
Z2luZyB0aGUgYnV0dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsCisgICAgLy8gdGhlIG11dGF0b3IgYWx3
YXlzIHNldHMgdGhlIHN0cnVjdHVyZSBsYXN0LiBUaGUgY29sbGVjdG9yIHdpbGwgYWx3YXlzIHJl
YWQgdGhlIHN0cnVjdHVyZQorICAgIC8vIGZpcnN0LiBXZSBwcm9iYWJseSBoYXZlIHRvIGZvbGxv
dyB0aGF0IGNvbnZlbnRpb24gaGVyZSBhcyB3ZWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxl
Y3RvcgorICAgIC8vIHdpbGwgc29tZXRpbWVzIHNlZSB0aGUgbmV3IGJ1dHRlcmZseSAodGhlIG9u
ZSB3aXRoIEFycmF5U3RvcmFnZSkgd2l0aCB0aGUgb25seSBzdHJ1Y3R1cmUgKHRoZQorICAgIC8v
IG9uZSB0aGF0IHNheXMgdGhhdCB0aGUgYnV0dGVyZmx5IGlzIENvbnRpZ3VvdXMpLiBXaGVuIHNj
YW5uaW5nIENvbnRpZ3VvdXMsIHRoZSBjb2xsZWN0b3Igd2lsbAorICAgIC8vIG1hcmsgd29yZCBh
dCBhZGRyZXNzZXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBidXR0ZXJmbHkgcG9pbnRl
ciwgdXAgdG8gdGhlIHB1YmxpY0xlbmd0aAorICAgIC8vIGluIHRoZSBidXR0ZXJmbHkuIEJ1dCBh
biBBcnJheVN0b3JhZ2UgaGFzIHNvbWUgbm9uLXBvaW50ZXIgaGVhZGVyIGRhdGEgYXQgbG93IHBv
c2l0aXZlCisgICAgLy8gb2Zmc2V0cyBmcm9tIHRoZSBidXR0ZXJmbHkgLSBzbyB3aGVuIHRoaXMg
cmFjZSBoYXBwZW5zLCB0aGUgY29sbGVjdG9yIHdpbGwgc3VyZWx5IGNyYXNoCisgICAgLy8gYmVj
YXVzZSBpdCB3aWxsIGZhaWwgdG8gZGVjb2RlIHR3byBjb25zZWN1dGl2ZSBpbnQzMnMgYXMgaWYg
aXQgd2FzIGEgSlNWYWx1ZS4KKyAgICAvLworICAgIC8vIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRo
ZSBKU0NlbGwgbG9jayBmb3IgdGhpcyBwdXJwb3NlIQorICAgIAorICAgIEludGVybmFsTG9ja2Vy
IGxvY2tlcih0aGlzKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZs
eSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwg
bmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsx
NTU0LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAg
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAKQEAgLTIwMTksNyArMjEwNSw3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKIAogICAgIFNwYXJzZUFycmF5
VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFy
c2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKLQorICAgIAogICAgIC8vIDEu
IExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0
eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJz
ZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7
CiAgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZh
bHVlOwpAQCAtMjcyNSw3ICsyODExLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JM
ZW5ndGgoVk0mIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAgICAgICBzZXRC
dXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3
QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMjc0Miw3
ICsyODI5LDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAg
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0
b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFz
ID0gbmV3SW5kZXhCaWFzOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
Mjc2Miw2ICsyODUwLDcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0s
IAogICAgIAogICAgIHVuc2lnbmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAgICAgIEJ1dHRl
cmZseTo6YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBv
bGRWZWN0b3JMZW5ndGgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbnVsbHB0cjsK
ICAgICBpZiAoYXZhaWxhYmxlT2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAvLyBUaGlz
IGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGgg
dGhhdCBjYXVzZWQgaW50ZXJuYWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlk
IG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdp
bGwgbWVzcwpAQCAtMjc3NiwxNyArMjg2NSwyNCBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5n
dGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsK
KyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZs
eS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFzRG91Ymxl
KGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JM
ZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+
Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5k
ZXhpbmdQYXlsb2FkPGRvdWJsZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+
PigpW2ldLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKG5ld0J1dHRlcmZseSkgeworICAgICAg
ICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMs
IG5ld0J1dHRlcmZseSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MDIsMTIgKzI4OTgsMTMgQEAgdm9p
ZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHku
Z2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdl
OjpzaXplRm9yKGxlbmd0aCkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0
dGVyZmx5KTsKICAgICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAg
IG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7
CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6YWxs
b2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3Qg
bmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCkBAIC0zMDkyLDE1
ICszMTg5LDM0IEBAIHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAg
ICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09i
amVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZM
aW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBK
U09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+
YnV0dGVyZmx5KCk7Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gdGhpcy0+YnV0dGVyZmx5UHJl
Q2FwYWNpdHkoKTsKLSAgICB2b2lkKiBjdXJyZW50QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVD
YXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7Ci0gICAgdm9pZCogbmV3QmFzZSA9IGJ1
dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworICAg
IC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQg
c3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5vbgorICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0
dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQg
dG8gYmUgaG9sZGluZworICAgIC8vIHRoZSBzdHJ1Y3R1cmUncyBsb2NrIHJpZ2h0IG5vdywgYW5k
IHRoYXQgaGVscHMgYSBiaXQuCisgICAgCisgICAgQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkgPSB0
aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGlu
ZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0
aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hl
YWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVh
ZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzID0gb2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxv
YWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFj
aXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0K
KworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRp
YWxpemVkKHZtLCB0aGlzLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFz
SW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIG1lbW1v
dmUobmV3QmFzZSwgY3VycmVudEJhc2UsIHRoaXMtPmJ1dHRlcmZseVRvdGFsU2l6ZSgpKTsKLSAg
ICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIEJ1dHRlcmZseTo6ZnJv
bUJhc2UobmV3QmFzZSwgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpKTsKKyAg
ICAvLyBObyBuZWVkIHRvIGNvcHkgdGhlIHByZWNhcGFjaXR5LgorICAgIHZvaWQqIGN1cnJlbnRC
YXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAg
IHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlB
ZnRlcik7CisKKyAgICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90
YWxTaXplKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50MzJfdCBK
U09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBv
YmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAgICBib29s
IHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY1By
b3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhF
eGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9m
TGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZv
aWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5Kik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVT
dG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAgICAgCisg
ICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNoYW5nZSB0
aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZvaWQgc2V0
U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4LDcgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlT
dHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJG
bGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0
T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0CiAgICAgewpAQCAtOTkwLDkgKzk4OSw5IEBAIHBy
aXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5l
U2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogCiAgICAgYm9vbCBnZXROb25JbmRleFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNs
b3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJv
b2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRl
clByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlP
ZmZzZXQpOwotICAgIHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNs
b3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CisgICAgdm9pZCBmaWxsQ3VzdG9t
R2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1
Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duU3RhdGljUHJvcGVy
dHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBjb25zdCBIYXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3Bl
cnR5TmFtZSkgY29uc3Q7CkBAIC0xMTEzLDYgKzExMTIsNyBAQCBwcml2YXRlOgogICAgIGV4cGxp
Y2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5
KiBidXR0ZXJmbHkgPSBudWxscHRyKQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUs
IGJ1dHRlcmZseSkKICAgICB7CisgICAgICAgIG1lbXNldChpbmxpbmVTdG9yYWdlKCksIDAsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAg
IH0KIH07CiAKQEAgLTEyMDUsMTQgKzEyMDUsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNX
aXRoU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VS
VChzdHJ1Y3R1cmUpOwotICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7
Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVj
dHVyZSh2bSwgc3RydWN0dXJlKTsKLX0KLQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1
cmUpOwpAQCAtMTIyMCw3ICsxMjEyLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVj
dHVyZShWTSYgdgogICAgIEpTQ2VsbDo6c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQog
Ci1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0
dXJlKFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6
c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0
ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwogfQpAQCAtMTI3MywxNiArMTI2NSwxNiBA
QCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNCiAKIC8vIEl0IGlzIHNh
ZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgUHJvcGVydHlOYW1lIHRoYXQgaXMgYWN0dWFs
bHkgYW4gaW5kZXgsCiAvLyBidXQgaWYgc28gd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIChkb2Vz
bid0IHNlYXJjaCBpbmRleCBzdG9yYWdlKS4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwor
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAg
ICAgIGlmICghVHlwZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdz
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gZ2V0T3duU3Rh
dGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLQorICAgIAog
ICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMgb24gdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJu
aW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpOwogCkBAIC0xMzA3LDkgKzEyOTksOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OmdldE93bk5vbkluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3Qs
IEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVy
U2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAg
ICBpZiAoc3RydWN0dXJlLmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICBpZiAoc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21H
ZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1
LDcgKzEzMTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HCiBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVy
ZSYgc3RydWN0dXJlID0gKm9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAob2JqZWN0LT5nZXRPd25O
b25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQpAQCAtMTM1MywxMCArMTM0NSwxMCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5CiAgICAgICAgICAgICByZXR1cm4gb2Jq
ZWN0LT5nZXROb25JbmRleFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
ICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUoKSAhPSBQcm94eU9iamVjdFR5
cGUpOwotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdl
dChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlm
IChvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgaWYg
KCFwcm90b3R5cGUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBvYmpl
Y3QgPSBhc09iamVjdChwcm90b3R5cGUpOwpAQCAtMTM4NSwxMzIgKzEzNzcsNiBAQCBpbmxpbmUg
SlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiB9CiAKLXRlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1BTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQotewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlz
R2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJU
KCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRo
aXMpKTsKLSAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7Ci0KLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgaWYgKHN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVy
cmVkVHlwZXMoKSk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRl
czsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHBy
b3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAob2Zmc2V0ICE9IGlu
dmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBj
dXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAg
ICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgICAgICBz
bG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYg
KChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29y
KSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMg
JiBDdXN0b21BY2Nlc3NvcikpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpKTsKLSAgICAgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVj
dHVyZUV4dGVuc2libGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdy
b3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCks
IHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBzZXRT
dHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkp
OwotCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCh0aGlz
LT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBv
ZmZzZXQpOwotICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAg
dGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAg
ICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCk7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCi0gICAgICAgIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwotICAgIGlmIChuZXdTdHJ1Y3R1cmUp
IHsKLSAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNp
dGlvbigKLSAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQo
KSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgICAgICAKLSAgICAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1
dHRlcmZseSgpOwotICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAh
PSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
LSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAg
IHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBoYXNJ
bmZlcnJlZFR5cGU7Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Ci0gICAgaWYgKG9mZnNldCAh
PSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBj
dXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUt
PndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotCi0gICAgICAgIGlm
ICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVz
ICYgQ3VzdG9tQWNjZXNzb3IpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYg
UmVhZE9ubHkpKTsKLSAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRy
aWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcykpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
ICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9uIHdhdGNocG9pbnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKLSAg
ICAvLyBzdHJ1Y3R1cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2Vy
dmUgaWYgdGhlIG5ldyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQotICAgIC8vIHdlIHdhbnQuCi0gICAg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBv
aW50RmlyZTsKLSAgICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3Bl
cnR5VHJhbnNpdGlvbigKLSAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7
Ci0gICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAg
ICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0
eVNsb3Q6OlB1dEJ5SWQpOwotICAgIAotICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2Fw
YWNpdHkpOwotICAgIGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwotICAgIGVsc2UgewotICAgICAgICBCdXR0ZXJm
bHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwg
bmV3Q2FwYWNpdHkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0
cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKLSAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgaWYg
KGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWlu
c1JlYWRPbmx5UHJvcGVydGllcygpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFT
U0VSVCh2YWx1ZSk7CkBAIC0xNTQ5LDI0ICsxNDE1LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2Rl
RGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0K
IAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQVNTRVJUKCF2
YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAg
QVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5
KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0g
ICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3Jl
VmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRp
bWl6ZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogQUxXQVlT
X0lOTElORSBKU09iamVjdCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGFzT2JqZWN0KGpzVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNywxMyArMTA3LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVy
dHkKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJv
dG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90
b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUg
PSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAg
aWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90
QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdl
dE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGZhbHNlKTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChM
SUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0g
ZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAgcHJv
dG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElLRUxZ
KHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZh
dWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlT
bG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90b3R5
cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEzNSwxOCArMTM1
LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rp
b25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJl
SURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwog
ICAgICAgICBpZiAoTElLRUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYgKG9iamVjdC0+
Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBz
bG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blBy
b3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlT
bG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJ
S0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBk
ZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVy
dHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90
b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFko
c3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1
bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlw
ZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMTU3LDYgKzE1Nywz
MCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgfQogfQog
CitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQoreworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBB
U1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAgIEJ1dHRlcmZseSogYnV0
dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgYnV0
dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2Fw
YWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0s
IGJ1dHRlcmZseSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25s
eVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsK
KyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKK30KKwogLy8gRUNNQSA4LjYu
Mi4yCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGws
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1
ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewpAQCAtMjA3LDQgKzIzMSwxMzkgQEAgQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpoYXNPd25Qcm9wZQogICAgIHJldHVybiBjb25zdF9jYXN0
PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KTsKIH0KIAordGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KK0FMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
dXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQo
dmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAg
ICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6
OmhlYXAodGhpcykpOworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAo
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
aGFzSW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRB
dHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAg
ICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworCisgICAgICAg
ICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYg
QWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0
cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghKGF0
dHJpYnV0ZXMgJiBSZWFkT25seSkpOworICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwg
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYg
IWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LAorICAgICAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJm
bHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAg
ICAgICAgICAgIGJ1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9s
ZE91dE9mTGluZUNhcGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAg
ICAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgICAg
ICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
c2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5z
UmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhp
cy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUoCisgICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZz
ZXQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxs
U3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQp
OworICAgICAgICAKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOworICAgICAgICBpZiAoY3VycmVu
dENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJy
ZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgIEFTU0VS
VChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0
dXJlKTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsK
KyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAg
ICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgaWYgKChtb2RlID09IFB1
dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zm
c2V0KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAg
IHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dEJ5SWQpOworICAgICAgICB9CisKKyAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7
CisKKyAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmli
dXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3Vy
cmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
KGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOworICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVu
c2libGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ugd2FudCB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhh
cyBzd2l0Y2hlZAorICAgIC8vIHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hw
b2ludHMgdG8gb2JzZXJ2ZSBpZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lCisgICAgLy8g
d2Ugd2FudC4KKyAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBk
ZWZlcnJlZFdhdGNocG9pbnRGaXJlOworICAgIAorICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJh
bnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgp
ID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgCisgICAgdmFsaWRhdGVPZmZzZXQo
b2Zmc2V0KTsKKyAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBzaXplX3Qgb2xkQ2FwYWNpdHkg
PSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5
ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIEFTU0VSVChvbGRDYXBh
Y2l0eSA8PSBuZXdDYXBhY2l0eSk7CisgICAgaWYgKG9sZENhcGFjaXR5ICE9IG5ld0NhcGFjaXR5
KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZM
aW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsK
KyAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgaWYgKGF0dHJpYnV0
ZXMgJiBSZWFkT25seSkKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5
UHJvcGVydGllcygpOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51
bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFs
LCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VDb25jdXJyZW50R0MsIGZhbHNlLCBOb3JtYWws
IG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGNvbGxlY3RDb250aW51b3VzbHksIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEu
NCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJs
aWMgV3JpdGVCYQogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiB9OwogCisvLyBGSVhNRTogVGhp
cyBuZWVkcyB0byBoYXZlIGEgbG9jayBpbiBpdC4KIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNiBAQAogCiAjZGVmaW5lIERVTVBf
U1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MgMAogCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBET19Q
Uk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2Vsc2UKLSNkZWZpbmUgRE9fUFJPUEVSVFlN
QVBfQ09OU1RFTkNZX0NIRUNLIDAKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdURjsKIApAQCAtMTYzLDkgKzE1Nyw5IEBAIHZvaWQgU3RydWN0dXJlOjpk
dW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgaWYgKFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCkpIHsKICAg
ICAgICAgICAgICsrbnVtYmVyV2l0aFByb3BlcnR5TWFwczsKLSAgICAgICAgICAgIHRvdGFsUHJv
cGVydHlNYXBzU2l6ZSArPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+c2l6ZUluTWVtb3J5
KCk7CisgICAgICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1l
bW9yeSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDYsNyArMzAwLDcgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIGZvciAoc3RydWN0dXJlID0gdGhp
czsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkgewogICAg
ICAgICBzdHJ1Y3R1cmUtPm1fbG9jay5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9
IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmdldCgpOworICAgICAgICB0YWJsZSA9IHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsKICAgICAg
ICAgICAgIC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIg
Y2FuIGRvIHRoaW5ncyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQg
bG9zZXMgaXRzIHByb3BlcnR5IHRhYmxlLgpAQCAtMzIxLDMwICszMTUsMzEgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIEFTU0VSVCghdGFibGUpOwogfQog
Ci12b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYgdm0pCitQcm9wZXJ0
eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wg
c2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwotCisgICAgCisgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4
PiBzdHJ1Y3R1cmVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlOwogICAgIAogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0
aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAorICAgIHVuc2lnbmVkIGNh
cGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2Fw
YWNpdHkpOwogICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZt
LCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkp
OworICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBhY2l0eSk7CiAgICAgICAgIHN0
cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGFi
bGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBN
dXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9k
aWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdh
bnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJh
a2VkCiAgICAgLy8gc3RhdGUuCiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrLCB2bS5oZWFwKTsKLSAgICBpZiAoIXRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0
eU1hcChsb2NrZXIsIHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9p
bmxpbmVDYXBhY2l0eSkpOwotICAgIGVsc2UKLSAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdGhpcywgdGFibGUpOworICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQorICAgICAgICB0aGlz
LT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAKICAgICBJbmZlcnJlZFR5cGVUYWJsZSog
dHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKIApAQCAtMzU1LDEwICszNTAs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgICAgICBQ
cm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwg
c3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsK
ICAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMuZ2V0KCkpKQogICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0g
dHJ1ZTsKLSAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9w
ZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOworICAgICAgICB0YWJsZS0+
YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90
Q2hhbmdlKTsKICAgICB9CiAgICAgCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAg
IAorICAgIHJldHVybiB0YWJsZTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYgb2Zmc2V0KQpAQCAtNDczLDcgKzQ3MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjph
ZGROZXdQcm9wZXJ0eVRyYW4KICAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWlu
LnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlw
ZUNoYWluLmdldCgpKTsKICAgICB0cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVy
dHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0
dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQg
PSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFi
bGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBl
VGFibGUuZ2V0KCkpOwogCkBAIC01MjEsMzYgKzUxOCwzMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlUcmFuCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90
b3R5cGVUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJv
dG90eXBlKQogeworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICB0cmFuc2l0aW9uLT5t
X3Byb3RvdHlwZS5zZXQodm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7Ci0KLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKHZtKSk7CisgICAgCisgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKLQorICAgIAogICAg
IHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNp
dGlvbjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAg
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAg
ICAgCisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCiAg
ICAgICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZSgpKTsKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0
cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBQ
cm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2
bSktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50
cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCkBAIC01NjEsMTcgKzU1MiwxNSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBE
aWN0aW9uYXJ5S2luZCBraW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
RmlyZSogZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwog
Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5w
cm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29m
ZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFy
eUtpbmQoa2luZCk7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0
SGFzQmVlbkRpY3Rpb25hcnkodHJ1ZSk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC02MDMsMzEg
KzU5MiwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKIFBy
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
Vk0mIHZtKQogewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAg
ICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRh
YmxlKCktPmNvcHkodm0sIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7Ci0gICAgCi0gICAg
Ly8gSG9sZCB0aGUgbG9jayB3aGlsZSBzdGVhbGluZyB0aGUgdGFibGUgLSBzbyB0aGF0IGdldENv
bmN1cnJlbnRseSgpIG9uIGFub3RoZXIgdGhyZWFkCi0gICAgLy8gd2lsbCBlaXRoZXIgaGF2ZSB0
byBieXBhc3MgdGhpcyBzdHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRvIHVzZSB0aGUgcHJvcGVydHkg
dGFibGUKLSAgICAvLyBiZWZvcmUgaXQgaXMgc3RvbGVuLgotICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZW5Qcm9wZXJ0eVRhYmxl
ID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAgIHByb3BlcnR5VGFibGUoKS5jbGVhcigpOwot
ICAgIHJldHVybiB0YWtlblByb3BlcnR5VGFibGU7CisgICAgLy8gVGhpcyBtdXN0IGFsd2F5cyBy
ZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVy
dHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIGlmIChyZXN1bHQp
IHsKKyAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKKyAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2
bSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGJvb2wgc2V0
UHJvcGVydHlUYWJsZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFi
bGUodm0sIHNldFByb3BlcnR5VGFibGUpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5kKTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBpZiAoY2hh
bmdlc0luZGV4aW5nVHlwZSh0cmFuc2l0aW9uS2luZCkpIHsKICAgICAgICAgaWYgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKSB7
CiAgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUo
c3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFs
T2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlw
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpID09IGluZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVz
dWx0ID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
KGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkVHJhbnNpdGlv
bkZyb21UaGlzU3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNjM4LDcgKzYyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlv
bjsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNp
dGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSkg
ewogICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5hdHRyaWJ1dGVzSW5QcmV2aW91
cygpID09IGF0dHJpYnV0ZXMpOwotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5p
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAg
QVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgICAgICByZXR1cm4gZXhpc3Rp
bmdUcmFuc2l0aW9uOwogICAgIH0KICAgICAKQEAgLTY0Niw3ICs2MzMsNyBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJp
YnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJ
bmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeShpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsK
ICAgICAKICAgICBpZiAocHJldmVudHNFeHRlbnNpb25zKHRyYW5zaXRpb25LaW5kKSkKICAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0RGlkUHJldmVudEV4dGVuc2lvbnModHJ1ZSk7CkBAIC02NTcsMzIg
KzY0NCwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAg
ICAgIC8vIHRhYmxlLCBzaW5jZSBvdXIgbG9naWMgZm9yIHdhbGtpbmcgdGhlIHByb3BlcnR5IHRy
YW5zaXRpb24gY2hhaW4gdG8gcmVtYXRlcmlhbGl6ZSB0aGUKICAgICAgICAgLy8gdGFibGUgZG9l
c24ndCBrbm93IGhvdyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4K
ICAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcodm0pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyh2bSwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW5G
b3JDYWNoaW5nKCk7CiAgICAgICAgIAotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0
ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkpCi0gICAgICAgICAgICAgICAgICAgIGVu
dHJ5LmF0dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c1Jl
YWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEoZW50cnku
YXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmli
dXRlcyB8PSBSZWFkT25seTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgUHJvcGVydHlUYWJsZSog
dGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHRhYmxlKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgewor
ICAgICAgICAgICAgaWYgKHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25L
aW5kKSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7Cisg
ICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNp
dGlvbktpbmQpICYmICEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKKyAgICAgICAgICAg
ICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAg
ICAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zm
c2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlv
bi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0KICAgICAK
ICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktp
bmQpCi0gICAgICAgICYmIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKQotICAgICAgICAmJiAh
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0cmFu
c2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
byh0cnVlKTsKICAgICAKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAg
ICAgdHJhbnNpdGlvbi0+cGluKCk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgdHJhbnNp
dGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkpOwogICAgIGVsc2UgewogICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CiAgICAgICAgIHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKQEAgLTY5OCwxMyAr
NjgyLDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc1NlYWxlZChWTSYgdm0pCiAgICAgaWYgKGlzU3Ry
dWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRh
YmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAo
IXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUt
PmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICgoaXRlci0+YXR0cmli
dXRlcyAmIERvbnREZWxldGUpICE9IERvbnREZWxldGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtNzE3LDEzICs3MDAsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVu
KFZNJiB2bSkKICAgICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlm
Tm90RW1wdHkodm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsK
LSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCkt
PmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAg
ICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnREZWxldGUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgKFJlYWRPbmx5
IHwgQWNjZXNzb3IpKSkKQEAgLTczNiwyMSArNzE4LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpmbGF0dGVuRGljdGlvbmFyeVMKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAg
ICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9m
TGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsK
KyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Cisg
ICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBw
cm9wZXJ0eVRhYmxlKCktPnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0
YWJsZS0+c2l6ZSgpOwogCiAgICAgICAgIC8vIEhvbGRzIG91ciB2YWx1ZXMgY29tcGFjdGVkIGJ5
IGluc2VydGlvbiBvcmRlci4KICAgICAgICAgVmVjdG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9wZXJ0
eUNvdW50KTsKIAogICAgICAgICAvLyBDb3BpZXMgb3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVpciBo
YXNoZWQgbG9jYXRpb25zLCBjb21wYWN0aW5nIHByb3BlcnR5IHRhYmxlIG9mZnNldHMgYXMgd2Ug
Z28uCiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgICAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CiAgICAgICAgIG1fb2Zmc2V0ID0gaW52YWxp
ZE9mZnNldDsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJv
cGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kpIHsKKyAgICAg
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAgICAgICAgICAgdmFsdWVzW2ldID0gb2JqZWN0
LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+
b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAg
ICAgICAgIH0KQEAgLTc1OSw3ICs3NDQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRl
bkRpY3Rpb25hcnlTCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNv
dW50OyBpKyspCiAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgb2Zmc2V0Rm9yUHJv
cGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7CiAKLSAgICAgICAg
cHJvcGVydHlUYWJsZSgpLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CisgICAgICAgIHRhYmxlLT5j
bGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
ICAgICB9CiAKQEAgLTc2OCw1NSArNzUzLDM0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0
dGVuRGljdGlvbmFyeVMKIAogICAgIHNpemVfdCBhZnRlck91dE9mTGluZUNhcGFjaXR5ID0gdGhp
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAotICAgIGlmIChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0
eSAhPSBhZnRlck91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5
KCkgJiYgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgIT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkg
ewogICAgICAgICBBU1NFUlQoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPiBhZnRlck91dE9mTGlu
ZUNhcGFjaXR5KTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0
IGFmdGVyIGZsYXR0ZW5pbmcvY29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0
LAogICAgICAgICAvLyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3Rv
ciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4K
LSAgICAgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNp
dHkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmpl
Y3QtPnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIGlmICgh
YWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0
KSkKKyAgICAgICAgICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAg
ICAgLy8gSWYgdGhlIG9iamVjdCB3YXMgZG93bi1zaXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhl
IGJhc2Ugb2YgdGhlIEJ1dHRlcmZseSBpcyBubyBsb25nZXIgd2l0aGluIHRoZSAKICAgICAgICAg
Ly8gZmlyc3QgQ29waWVkQmxvY2s6OmJsb2NrU2l6ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9u
ZyBhbnN3ZXIgaWYgd2UgdHJ5IHRvIG1hc2sgdGhlIGJhc2UgYmFjayB0byAKICAgICAgICAgLy8g
dGhlIENvcGllZEJsb2NrIGhlYWRlci4gVG8gcHJldmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBt
ZW1tb3ZlIHRoZSBCdXR0ZXJmbHkgZG93bi4KLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0
ZXJmbHkoKSkKLSAgICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcodm0sIGJlZm9yZU91dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxh
dHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9
Ci0KLSAgICByZXR1cm4gdGhpczsKLX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVm
ZXJHQyk7CiAgICAgCi0gICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQotewotICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJldHVybiByZW1v
dmUocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6
OnBpbigpCit2b2lkIFN0cnVjdHVyZTo6cGluKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUp
CiB7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKHRydWUpOworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBjbGVh
clByZXZpb3VzSUQoKTsKICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0KIAotdm9p
ZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoKQordm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hp
bmcoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlU
YWJsZSgpKTsKICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJv
cGVydHlUYWJsZSh2bSwgdGFibGUpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxscHRyOwog
fQogCkBAIC04OTEsMTcgKzg1NSwxMyBAQCB2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVT
bG93KAogICAgIH0KIAogICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9w
ZXJ0eSB0YWJsZS4KLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0KKyAgICBQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Cisg
ICAgCiAgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQg
dGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50Ci0gICAg
Ly8gYWxyZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgotICAgIEFT
U0VSVChwcm9wZXJ0eVRhYmxlKTsKLQotICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3Qg
YmUgcHJlc2VudC4KKyAgICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVz
ZW50LgogICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHBy
b3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsKLQorICAgIAogICAgIGlmIChz
aG91bGRPcHRpbWl6ZSkKICAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53
aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKICAgICBlbHNlIHsK
QEAgLTk0MywxOCArOTAzLDEyIEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Q
cm9wZXIKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5
VGFibGUoVk0mIHZtKQotewotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxl
KCkuZ2V0KCkpOwotfQotCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAg
ICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgp
KTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgIGlmIChQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUpOworICAgIGJvb2wgc2V0UHJvcGVydHlUYWJs
ZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFBy
b3BlcnR5VGFibGUpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJl
bnRseShVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKQEAgLTk4
OSw3MCArOTQzLDI0IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAK
IAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6
OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSkKLSAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVu
dW1lcmF0aW9uKGZhbHNlKTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwot
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxv
Y2tlciwgdm0pOwotCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJs
ZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgp
LT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zm
c2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFk
ZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVu
dEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9w
ZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5k
KHJlcCk7Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRP
ZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zm
c2V0OwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOwotICAgIHByb3Bl
cnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQ
cm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNp
Z25lZCBjYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgUHJv
cGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOworICAgIHJldHVybiByZW1vdmUocHJv
cGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0
KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1
cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25N
b2RlIG1vZGUpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxl
SWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuOwotCisgICAg
CiAgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVG
b3JTdHJ1Y3R1cmUoKTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3Bl
cnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
CisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZv
ciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEFTU0VSVCghaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxs
b3dlZEZvckVudW1lcmF0aW9uKCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsK
ICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRp
b24oKSB8fCAhaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0
cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkg
ewpAQCAtMTExNCw2ICsxMDIyLDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZQogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOwor
ICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7CiAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5pc09iamVjdCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5tX2Nh
Y2hlZFByb3RvdHlwZUNoYWluLmNsZWFyKCk7CkBAIC0xMjc2LDkyICsxMTg3LDYgQEAgdm9pZCBT
dHJ1Y3R1cmU6OmR1bXBDb250ZXh0SGVhZGVyKFByaW50UwogICAgIG91dC5wcmludCgiU3RydWN0
dXJlczoiKTsKIH0KIAotI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCi12b2lk
IFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIEFTU0VSVChtX2luZGV4
U2l6ZSA+PSBQcm9wZXJ0eVRhYmxlOjpNaW5pbXVtVGFibGVTaXplKTsKLSAgICBBU1NFUlQobV9p
bmRleE1hc2spOwotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA9PSBtX2luZGV4TWFzayArIDEpOwot
ICAgIEFTU0VSVCghKG1faW5kZXhTaXplICYgbV9pbmRleE1hc2spKTsKLQotICAgIEFTU0VSVCht
X2tleUNvdW50IDw9IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fa2V5Q291bnQgKyBt
X2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVChtX2RlbGV0ZWRD
b3VudCA8PSBtX2luZGV4U2l6ZSAvIDQpOwotCi0gICAgdW5zaWduZWQgaW5kZXhDb3VudCA9IDA7
Ci0gICAgdW5zaWduZWQgZGVsZXRlZEluZGV4Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQg
YSA9IDA7IGEgIT0gbV9pbmRleFNpemU7ICsrYSkgewotICAgICAgICB1bnNpZ25lZCBlbnRyeUlu
ZGV4ID0gbV9pbmRleFthXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gUHJvcGVydHlUYWJs
ZTo6RW1wdHlFbnRyeUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChl
bnRyeUluZGV4ID09IGRlbGV0ZWRFbnRyeUluZGV4KCkpIHsKLSAgICAgICAgICAgICsrZGVsZXRl
ZEluZGV4Q291bnQ7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoZW50cnlJbmRleCA8IGRlbGV0ZWRFbnRyeUluZGV4KCkpOwotICAgICAgICBBU1NFUlQo
ZW50cnlJbmRleCAtIDEgPD0gdXNlZENvdW50KCkpOwotICAgICAgICArK2luZGV4Q291bnQ7Ci0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBiID0gYSArIDE7IGIgIT0gbV9pbmRleFNpemU7ICsrYikK
LSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4W2JdICE9IGVudHJ5SW5kZXgpOwotICAgIH0KLSAg
ICBBU1NFUlQoaW5kZXhDb3VudCA9PSBtX2tleUNvdW50KTsKLSAgICBBU1NFUlQoZGVsZXRlZElu
ZGV4Q291bnQgPT0gbV9kZWxldGVkQ291bnQpOwotCi0gICAgQVNTRVJUKCF0YWJsZSgpW2RlbGV0
ZWRFbnRyeUluZGV4KCkgLSAxXS5rZXkpOwotCi0gICAgdW5zaWduZWQgbm9uRW1wdHlFbnRyeUNv
dW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdXNlZENvdW50KCk7ICsrYykg
ewotICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSB0YWJsZSgpW2NdLmtleTsKLSAgICAgICAgaWYg
KHJlcCA9PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgKytub25FbXB0eUVudHJ5Q291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkg
PSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApOwotICAgICAgICB1bnNpZ25lZCBrID0gMDsK
LSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgICAgIGVudHJ5SW5kZXggPSBtX2luZGV4W2kgJiBtX2luZGV4TWFza107Ci0gICAgICAgICAg
ICBBU1NFUlQoZW50cnlJbmRleCAhPSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpOwot
ICAgICAgICAgICAgaWYgKHJlcCA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAg
ICAgIGsgPSAxIHwgZG91YmxlSGFzaChJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApKTsKLSAg
ICAgICAgICAgIGkgKz0gazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA9
PSBjICsgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG5vbkVtcHR5RW50cnlDb3VudCA9PSBtX2tl
eUNvdW50KTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAg
IGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZv
ckVudW1lcmF0aW9uKCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
cHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsK
LSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHByb3BlcnR5VGFibGUoKS0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi0j
ZWxzZQotCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAg
IGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLX0KLQotI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQ
X0NPTlNURU5DWV9DSEVDSwotCiBib29sIENsYXNzSW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFk
b25seVByb3BlcnRpZXMoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBjaSA9
IHRoaXM7IGNpOyBjaSA9IGNpLT5wYXJlbnRDbGFzcykgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
MTcgKzE4MywxOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NlYWxl
ZChWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNGcm96ZW4oVk0mKTsKICAgICBi
b29sIGlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFkaWRQcmV2ZW50RXh0
ZW5zaW9ucygpOyB9Ci0gICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKLSAg
ICBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShW
TSYsIEpTT2JqZWN0Kik7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgLy8gVGhl
c2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgLy8gVmVyc2lv
bnMgdGhhdCB0YWtlIGEgZnVuYyB3aWxsIGNhbGwgaXQgYWZ0ZXIgbWFraW5nIHRoZSBjaGFuZ2Ug
YnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcKKyAgICAvLyB0aGUgbG9jay4gVGhlIGNhbGxiYWNrIGlz
IG5vdCBjYWxsZWQgaWYgdGhlcmUgaXMgbm8gY2hhbmdlIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91
IGNhbGwKKyAgICAvLyByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKCkgYW5kIHRoZSBw
cm9wZXJ0eSBpcyBub3QgZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQ
cm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90
b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJv
dG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlz
RGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rp
b25hcnlLaW5kOyB9CkBAIC0yMjksOCArMjMxLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5
cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAg
Ym9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQog
Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5p
bmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5
cGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQor
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAK
ICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAt
NDMzLDkgKzQzNSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJk
aWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5n
VHlwZU9mZnNldCgpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwg
bV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9m
ZnNldCgpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVV
bnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYgKzU4MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0
aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1
cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTYzMyw0NCArNjM3LDQ1IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
CisgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAg
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3Bl
cnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJv
cGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBj
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAg
Ly8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRp
bmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVy
dHlUYWJsZUlmTm90RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBp
bGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwot
ICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUq
IHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwog
ICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVj
ZXNzYXJ5KFZNJiB2bSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMg
bWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBT
dHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUo
Vk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwot
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAg
ICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHBy
b3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkp
IHsKLSAgICAgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1h
dGVyaWFsaXplUHJvcGVydHlNYXAodm0pOwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRh
YmxlKCkuZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3Vs
dCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0K
LSAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0m
IHZtLCBEZWZlckdDJikKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JO
dWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gaW5mbygpKTsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAg
ICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXAodm0pOworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIHdpbGwgZ3JhYiB0aGUgbG9jay4gRG8gbm90IGNhbGwgd2hl
biBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b3BlcnR5VGFibGUqIG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVy
dHlUYWJsZSA9IHRydWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0s
IFByb3BlcnR5VGFibGUqIHRhYmxlKTsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMiw4IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4q
IGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAg
Ci0gICAgdm9pZCBwaW4oKTsKLSAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHBpbihWTSYsIFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZv
ckNhY2hpbmcoVk0mLCBQcm9wZXJ0eVRhYmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRh
KEpTQ2VsbCogY2VsbCkgY29uc3QKICAgICB7CkBAIC03MTAsNyArNzE1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAg
fQotICAgICAgICAKKwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0Owog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03
NDAsNyArNzQ1LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBt
X3RyYW5zaXRpb25UYWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHBy
b3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0
aHJlYWQuCisgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlU
YWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4K
ICAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0
YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJs
ZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0g
MHhiYmFkYmVlZjsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBl
SW5mbykKKyAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8pCiAgICAgewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlE
OwotICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAg
IHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwog
ICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxh
Z3MoKTsKICAgICAgICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3
V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25z
dCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91Ymxl
V29yZDsgfQogICAgIAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1
cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
KCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJ
bmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGlu
Z1R5cGUgPSBpbmRleGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnko
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7
IH0KICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAg
ICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0
dXJuIHUuZmllbGRzLmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2Is
IHUuZmllbGRzLnN0cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGlu
ZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNs
dWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAg
ICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7
CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsK
ICAgICAgICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24g
MjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3Bl
cnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAg
IFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9w
ZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICgh
cHJvcGVydHlUYWJsZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwz
MSArMjE4LDYgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAg
IHJldHVybiBpc1ZhbGlkKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwogfQogCi1pbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZM
aW5lU3RvcmFnZSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNT
RVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVy
T2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQo
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJy
ZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3Rh
bFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6
ZSgpKTsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49
IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5z
aXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0
ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0g
ICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0
dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlm
IChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRj
aHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVj
dHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJs
ZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9w
ZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRh
YmxlKCkpOwpAQCAtMjkyLDYgKzI2NiwxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJl
OjpjaGVja09mZnNlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVy
ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwor
fQorCiBpbmxpbmUgc2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1
cnJlbnRDYXBhY2l0eSkKIHsKICAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSAr
Mjc4LDYgQEAgaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJl
dHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGlu
ZSBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHko
KQotewotICAgIHJldHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNh
cGFjaXR5KCkpOwotfQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5n
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlT
bG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBA
IC0zMTEsNCArMjg1LDg1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJp
bmcKICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlz
LCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1
bmMpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZt
KTsKKworICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7CisgICAgCisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFT
U0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0Fs
bG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKKworICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zm
c2V0KG1faW5saW5lQ2FwYWNpdHkpOworICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBF
bnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworCisgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7
CisgICAgCisgICAgLy8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJp
ZXMsIHdoaWNoIHdpbGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUg
b25seSB3YXkgZm9yIHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0
eS4KKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKwor
ICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJv
cGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7Cisg
ICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Cisg
ICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsK
KworICAgIHRhYmxlLT5yZW1vdmUocG9zaXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zm
c2V0KG9mZnNldCk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tl
ciwgb2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0
eVRhYmxlKHZtKSk7CisgICAgCisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBmdW5jKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0m
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFT
U0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKCkpOworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAor
ICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQg
U3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUp
Cit7CisgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFi
bGUpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoZSByZWFzb24gd2h5IEkgd2VudCB0byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2Ug
V1RGOjpMb2NrIGZpdCBpbiB0d28gYml0cyBpcyB0aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkg
d291bGQgZXZlbnR1YWxseSBuZWVkIHRvIHN0dWZmIG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91
cyBiaXRzIG9mIHRoZQorICAgICAgICBKU0NlbGwgaGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUs
IGJlY2F1c2UgdGhlIGNvbmN1cnJlbnQgR0MgaGFzIG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29u
ZGl0aW9ucyBpbiB2aXNpdENoaWxkcmVuIHRoYXQgY2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBl
YWNoIG9iamVjdCBqdXN0IGhhcyBhbgorICAgICAgICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwg
dHlwZXMgbWlnaHQgdXNlIGl0IHRvIHNpbXBseSBwcm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENo
aWxkcmVuCisgICAgICAgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZp
ZWxkcyBpdCB0b3VjaGVzLCB3aGlsZSBvdGhlciBjZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVz
ZSBpdCBhcyBhICJsb2NrIG9mIGxhc3QgcmVzb3J0IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9m
IGFuIG90aGVyd2lzZSB3YWl0LWZyZWUgb3IKKyAgICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4g
UmlnaHQgbm93LCBpdCdzIHVzZWQgdG8gcHJvdGVjdCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBp
bnZvbHZpbmcKKyAgICAgICAgaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgCisgICAgICAgIFRv
IG1ha2UgdGhpcyBoYXBwZW4sIEkgZmFjdG9yZWQgdGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50
byBhIExvY2tBbGdvcml0aG0gc3RydWN0IHRoYXQKKyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24g
bG9jayB0eXBlICh1aW50OF90IGZvciBXVEY6OkxvY2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgx
IGZvcgorICAgICAgICBXVEY6OkxvY2spLCBhbmQgdGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBm
b3IgV1RGOjpMb2NrKS4gVGhpcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBhcworICAgICAgICBhIHRl
bXBsYXRpemVkIExvY2sgY2xhc3MgdGhhdCBiYXNpY2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tU
eXBlPi4gWW91IGNvdWxkIHRoZW4gbWFrZQorICAgICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sg
YnkgYml0d2lzZV9jYXN0aW5nIGl0IHRvIFRlbXBsYXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBi
aXQyPi4gQnV0CisgICAgICAgIHRoaXMgZmVsdCB0b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tB
bGdvcml0aG0gaGFzIHN0YXRpYyBtZXRob2RzIHRoYXQgdGFrZQorICAgICAgICBBdG9taWM8TG9j
a1R5cGU+JiBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMg
aXQgbW9yZSBuYXR1cmFsIHRvCisgICAgICAgIHByb2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8g
YW4gZXhpc3RpbmcgQXRvbWljPD4gZmllbGQuIFNhZGx5LCBzb21lIHBsYWNlcyBoYXZlIHRvIGNh
c3QKKyAgICAgICAgdGhlaXIgbm9uLUF0b21pYzw+IGZpZWxkIHRvIEF0b21pYzw+IGluIG9yZGVy
IGZvciB0aGlzIHRvIHdvcmsuIExpa2Ugc28gbWFueSBvdGhlciB0aGluZ3MKKyAgICAgICAgd2Ug
ZG8sIHRoaXMganVzdCBzaG93cyB0aGF0IHRoZSBDKysgc3R5bGUgb2YgbGFiZWxpbmcgZmllbGRz
IHRoYXQgYXJlIHN1YmplY3QgdG8gYXRvbWljCisgICAgICAgIG9wcyBhcyBhdG9taWMgaXMgY291
bnRlcnByb2R1Y3RpdmUuIE1heWJlIHNvbWUgZGF5IEknbGwgY2hhbmdlIExvY2tBbGdvcml0aG0g
dG8gdXNlIG91cgorICAgICAgICBvdGhlciBBdG9taWNzIEFQSSwgd2hpY2ggZG9lcyBub3QgcmVx
dWlyZSBBdG9taWM8Pi4KKyAgICAgICAgCisgICAgICAgIFdURjo6TG9jayBub3cgdXNlcyBMb2Nr
QWxnb3JpdGhtLiBUaGUgc2xvdyBwYXRocyBhcmUgc3RpbGwgb3V0bGluZWQuIEkgZG9uJ3QgZmVl
bCB0b28KKyAgICAgICAgYmFkIGFib3V0IHRoZSBMb2NrQWxnb3JpdGhtLmggaGVhZGVyIGJlaW5n
IGluY2x1ZGVkIGluIHNvIG1hbnkgcGxhY2VzIGJlY2F1c2Ugd2UgY2hhbmdlCisgICAgICAgIHRo
YXQgYWxnb3JpdGhtIHNvIGluZnJlcXVlbnRseS4KKyAgICAgICAgCisgICAgICAgIEFsc28sIEkg
YWRkZWQgYSBoYXNFbGFwc2VkKHRpbWUpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGl0
IHNvIG11Y2ggbW9yZSBuYXR1cmFsCisgICAgICAgIHRvIHdyaXRlIHRpbWVzbGljaW5nIGNvZGUs
IHdoaWNoIHRoZSBjb25jdXJyZW50IEdDIGhhcyB0byBkbyBhIGxvdCBvZi4KKworICAgICAgICAq
IFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6
CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tC
YXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNs
b3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwpOiBEZWxldGVkLgor
ICAgICAgICAqIHd0Zi9Mb2NrLmg6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAg
ICAgICAgKFdURjo6TG9ja0Jhc2U6OnRyeUxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
dW5sb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseSk6CisgICAgICAg
IChXVEY6OkxvY2tCYXNlOjppc0hlbGQpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvTG9ja0FsZ29yaXRobS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjps
b2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2spOgorICAgICAgICAo
V1RGOjpMb2NrQWxnb3JpdGhtOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRo
bTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06
OnVubG9ja0Zhc3QpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2spOgorICAg
ICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjppc0xvY2tlZCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06Omxv
Y2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAg
ICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHA6CisgICAgICAgIChXVEY6Omhh
c0VsYXBzZWQpOgorICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDoKKwog
MjAxNi0xMS0xMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFsbG93IG11dGFibGUgbGFtYmRhcyBpbiBIYXNoTWFwOjplbnN1cmUKSW5kZXg6
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAg
LyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxn
b3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJC
NjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3
QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZE
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87
IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBG
MEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJl
Z2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0Yg
LyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlz
dEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAg
Ki8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBG
Q0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMz
MTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBF
MzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9yLmggKi8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAw
NDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICovLApAQCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlB
OEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9n
cmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0
MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAw
Q0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUx
QTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDcz
OUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRv
bWljcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsMzYgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgQUxX
QVlTX0lOTElORSBUIGV4Y2hhbmdlWG9yKFUgb3BlcmFuZCwgc3RkOjptZW1vcnlfb3JkZXIgb3Jk
ZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5mZXRjaF94b3Io
b3BlcmFuZCwgb3JkZXIpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlKFQg
bmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2Vx
X2NzdCkgeyByZXR1cm4gdmFsdWUuZXhjaGFuZ2UobmV3VmFsdWUsIG9yZGVyKTsgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVRy
YW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgVCBvbGRW
YWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIFQgbmV3VmFs
dWUgPSBvbGRWYWx1ZTsKKyAgICAgICAgZnVuYyhuZXdWYWx1ZSk7CisgICAgICAgIHJldHVybiBj
b21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5z
YWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0
cnlUcmFuc2F0aW9uUmVsYXhlZChmdW5jKSkgeyB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3Qg
RnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAg
IGZ1bmMobmV3VmFsdWUpOworICAgICAgICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRW
YWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAg
eworICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYWN0aW9uKGZ1bmMpKSB7IH0KKyAgICB9CiAKICAg
ICBzdGQ6OmF0b21pYzxUPiB2YWx1ZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5n
ZS5oCiAgICAgTGlzdEhhc2hTZXQuaAogICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAog
ICAgIExvY2tlci5oCiAgICAgTUQ1LmgKICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAu
aAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlz
dER1bXBJbkNvbnRleAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7
Ci11c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4
dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNp
bmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5n
IFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xv
Y2suY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTIwICsyNiwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkxvY2suaCIKIAotI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5n
TG90LmgiCi0jaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRp
bmdQcmltaXRpdmVzLmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAot
c3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBM
b2NrQmFzZTo6bG9ja1Nsb3coKQordm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVu
c2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0KLSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBv
dXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAg
IGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAg
ICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAg
ICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJl
bnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0
KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkg
cGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBz
cGluIGFyb3VuZC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJp
dCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsK
LSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBi
eSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGlu
IGFyb3VuZAotICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBm
YWlsZWQgYXQgc2V0dGluZyBpdC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhh
c1BhcmtlZEJpdCkKLSAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRv
IGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4g
cGFyay4KLSAgICAgICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAg
ICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhh
c1BhcmtlZEJpdCk7Ci0gICAgICAgIGlmIChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewot
ICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBs
b2NrIHdhcyBuZXZlciByZWxlYXNlZC4gSXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0
aGUgdGhyZWFkIHRoYXQgZGlkCi0gICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVh
bnMgd2UncmUgZG9uZSEKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0
dW5pdHk6Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0
aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAg
ICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0
IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIgdGhlIGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8v
IG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBs
b29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5l
dmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdl
IGxvb3AKLSAgICAgICAgLy8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1
bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1
bmxvY2tTbG93KCkKIHsKLSAgICB1bmxvY2tTbG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRM
b2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVu
ZmFpcik7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVu
bG9ja1Nsb3dJbXBsKEZhaXIpOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5s
b2NrU2xvd0ltcGwoRmFpcm5lc3MgZmFpcm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhl
cmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9y
IGJlY2F1c2UgdGhlcmUgaXMKLSAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBD
QVMgbG9vcDogZXZlbiBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3Vs
ZAotICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sg
anVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhf
dCBvbGRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChv
bGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0IHx8IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwg
aGFzUGFya2VkQml0KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlz
SGVsZEJpdCkgewotICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlz
SGVsZEJpdCwgMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4
YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAg
ICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1l
IHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVu
IHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBh
IGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBh
cmtlZC4KLSAgICAgICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFy
a2VkQml0KSk7Ci0gICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZt
X2J5dGUsCi0gICAgICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQp
IC0+IGludHB0cl90IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0
aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAot
ICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCBy
aWdodCBub3cuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVs
ZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3Vs
dC50aW1lVG9CZUZhaXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9j
ayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQg
d2FzCi0gICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBEaXJlY3RIYW5kb2ZmOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBt
X2J5dGUuc3RvcmUoaGFzUGFya2VkQml0KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZSgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFy
Z2luZ09wcG9ydHVuaXR5OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9j
a0FsZ29yaXRobTo6RmFpcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNl
L1dURi93dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw4ICsyNiw3IEBACiAjaWZuZGVmIFdURl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAog
Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9j
a0luc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdURiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1
aW50OF90LCAxLCAyPiBEZWZhdWx0TG9ja0FsZ29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5
IGFkYXB0aXZlIG11dGV4IHRoYXQgb25seSByZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQg
aGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUKIC8vIGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVu
Y29udGVuZGVkIGxvY2tpbmcgaXMgaW5saW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250
ZW50aW9uIGlzCiAvLyBoYW5kbGVkIGJ5IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNs
b3cgcGF0aCB0aGF0IGlzIGNvbXBldGV0aXZlIHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAt
NTMsMjMgKzU0LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2
b2lkIGxvY2soKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hh
bmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAg
ICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExv
Y2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAg
bG9ja1Nsb3coKTsKICAgICB9CiAKICAgICBib29sIHRyeUxvY2soKQogICAgIHsKLSAgICAgICAg
Zm9yICg7OykgewotICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRl
LmxvYWQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29t
cGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNI
ZWxkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAK
ICAgICAvLyBOZWVkIHRoaXMgdmVyc2lvbiBmb3Igc3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEy
ICs3OSw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcg
Y3JpdGljYWwgc2VjdGlvbnMgYWx3YXlzIGdldCBhIGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9j
aygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAg
ICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChV
TkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9i
eXRlKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBp
cyBsaWtlIHVubG9jaygpIGJ1dCBpdCBndWFyYW50ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2Nr
IGZhaXJseS4gRm9yIHNob3J0IGNyaXRpY2FsCkBAIC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBM
b2NrQmFzZSB7CiAgICAgLy8gd2FudC4KICAgICB2b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewot
ICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwg
MCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJl
bGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkp
CisgICAgICAgICAgICB1bmxvY2tGYWlybHlTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hl
bGQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5
X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tB
bGdvcml0aG06OmlzTG9ja2VkKG1fYnl0ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgp
IGNvbnN0CkBAIC0xMjYsMjEgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBo
YXNQYXJrZWRCaXQgPSAyOwotCisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9j
a1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVu
dW0gRmFpcm5lc3MgewotICAgICAgICBGYWlyLAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAg
IHZvaWQgdW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewot
ICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCi0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9
OwogCiAgICAgLy8gTWV0aG9kIHVzZWQgZm9yIHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVs
bHlSZXNldCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgV1RGX0xvY2tBbGdvcml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29y
aXRobV9oCisKKyNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpM
b2NrLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBM
b2NrVHlwZSBoYXNQYXJrZWRCaXQ+CitjbGFzcyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1h
c2sgPSBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBsb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2Nr
RmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xk
VmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlm
IChvbGRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBp
c0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIWxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIGxvY2tTbG93KGxvY2sp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1
cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6
bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhB
dG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFy
ZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4m
IGxvY2spCisgICAgeworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxv
Y2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBz
dGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
dW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkoIXVubG9ja0Zhc3QobG9jaykpKQorICAgICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZh
aXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExv
Y2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChs
b2NrKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgYm9vbCBpc0xvY2tlZChjb25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJl
KSAmIGlzSGVsZEJpdDsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IGxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBzcGluQ291bnQgPSAwOworCisgICAgICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91
dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsK
KworICAgICAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAg
ICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5
dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9v
IG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgICAgIGlmICgh
KGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1p
dCkgeworICAgICAgICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgICAgIHN0ZDo6
dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0
aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3Vu
ZAorICAgICAgICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFp
bGVkIGF0IHNldHRpbmcgaXQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYg
aGFzUGFya2VkQml0KQorICAgICAgICAgICAgICAgICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3Qg
dGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBj
YXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFy
a1Jlc3VsdCA9CisgICAgICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxv
Y2ssIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAg
ICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sg
d2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0
aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVh
bnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2Nr
ZWQobG9jaykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
Y2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxl
YXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3
b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9j
ay4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBz
byB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQg
YmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAg
ICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAgICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAg
fTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxk
IGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91
c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisgICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywg
d2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhl
bGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0
dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAm
IG1hc2spID09IGlzSGVsZEJpdAorICAgICAgICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBt
YXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgIAorICAgICAgICAg
ICAgaWYgKChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZh
bHVlICYgfmlzSGVsZEJpdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU29tZW9u
ZSBpcyBwYXJrZWQuIFVucGFyayBleGFjdGx5IG9uZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBs
b2NrIHRvIHRoYXQgdGhyZWFkCisgICAgICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1
bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9y
IGJhcmdpbmcuCisgICAgICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRo
ZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGls
bAorICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBwYXJrZWQuCisgICAgICAgICAgICBBU1NF
UlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsK
KyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKKyAgICAgICAgICAgICAgICAmbG9j
aywKKyAgICAgICAgICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQp
IC0+IGludHB0cl90IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9u
ZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVyIHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJp
dCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJp
dHMgc2V0IHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChsb2NrLmxvYWQo
KSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZh
aXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0
aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB3YWl0aW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KExvY2tUeXBlJiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICY9
IH5tYXNrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1v
cmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQ
YXJrZWRCaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZW51
bSBUb2tlbiB7CisgICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKKyAgICAgICAgRGlyZWN0SGFu
ZG9mZgorICAgIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpMb2Nr
QWxnb3JpdGhtOworCisjZW5kaWYgLy8gV1RGX0xvY2tBbGdvcml0aG1faAorCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJDb25kaXRpb24uaCIKICNpbmNs
dWRlICJMb2NrLmgiCiAjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlIDxjZmxvYXQ+
CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKQEAgLTEyOCw2ICsxMzEsMTcgQEAgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5
bmFtaWNDbG9ja1R5cAogICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCB0aW1l
KTsKIH0KIAorYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYg
dGltZSkKK3sKKyAgICAvLyBBdm9pZCBkb2luZyBub3coKS4KKyAgICBpZiAoISh0aW1lID4gdGlt
ZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcygwKSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0aW1lIDw9IHRpbWUubm93V2l0
aFNhbWVDbG9jaygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJpdmF0ZToKIAogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
c2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CiAKK1dURl9FWFBPUlRfUFJJ
VkFURSBib29sIGhhc0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNlZDsKK3VzaW5nIFdURjo6c2xlZXA7CiAKICNlbmRpZiAv
LyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294724</attachid>
            <date>2016-11-14 11:38:15 -0800</date>
            <delta_ts>2016-11-14 14:03:45 -0800</delta_ts>
            <desc>it&apos;s a splay speed-up</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>280956</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODY1MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDcgQEAKIAkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNw
cCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87
IH07CisJCTBGQURERDFEMUREMDFFREUwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFEREQxQzFE
RDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovOyB9OwogCQkwRkFERTY3
MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRp
bC5oICovOyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3
RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFG
N0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMwMDksNiArMzAxMCw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bWVUaGVXb3JsZFNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0
NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01Njk2LDYgKzU2OTgsNyBAQAogCQkJCTBGQTc2MjAzMURCOTI0MjMw
MEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAv
KiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCisJCQkJMEZBREREMUMxREQwMUVEQzAwODI3
NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2
NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0My
QyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBT
bG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTc5MzMsNiArNzkzNiw3IEBACiAJCQkJMEZGQjky
MUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJz
ZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQURERDFEMUREMDFFREUwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzNEMkIwQTFE
MzQzMTYyMDBCQTkxOEMgLyogSGVhcENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZD
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDA5OCw3ICsxMDEwMiw2IEBACiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZG
IC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUx
RDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJ
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENy
YXMKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwogCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gdmFsdWU7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0
LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHZhbHVlKTsKICAgICAg
ICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1
b3VzU2hhcGUpKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGxpbmtDb2RlSW5saW5lCiBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0pOwotCisgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFs
dWVSZWdzKCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkp
OwogICAgICAgICBzdG9yYWdlID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgIH0KLQorICAgIAog
ICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCB2YWx1ZSk7CiAKQEAgLTI2NSw3ICsy
NjUsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRj
aCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CiAKLSAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgaml0LmFuZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHNj
cmF0Y2gpOwogICAgIGF1dG8gYnJhbmNoVG9TbG93UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYXJyYXktPmluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDEx
IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX2FsbG9jYXRvcik7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpCiAgICAgICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBtX2lubGlu
ZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKICAgICAgICAgQVNTRVJUKCFtX3N0
cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghbV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICAgICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwogICAgICAgICBpZiAoaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSB7CkBAIC05
Niw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsK
ICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAg
bV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogICAgIH0KIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkKQEAgLTEwNSwxMiArMTA5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQotICAg
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlubGluZUNh
cGFjaXR5KCk7IH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1faW5s
aW5lQ2FwYWNpdHk7IH0KIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgbV9hbGxv
Y2F0b3IgPSAwOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGlu
ZUNhcGFjaXR5ID0gMDsKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKQEAgLTE0
NSw2ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29k
ZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICB1bnNpZ25l
ZCBtX2lubGluZUNhcGFjaXR5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwot
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAg
ICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsK
QEAgLTEyNTcsMTIgKzEyNTcsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxs
b2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChyZWFsbG9j
YXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdl
IGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3Jh
Z2UpLgotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBz
Y3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCkBAIC0x
MjgxLDYgKzEyODIsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbmV3U2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGFsbG9jYXRpbmcgb3V0LW9mLWxp
bmUgdXNpbmcgYW4gb3BlcmF0aW9uLgogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKQEAgLTEzNTMsOCArMTM1Nyw5IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3
IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1
cmVzIHRoYXQKICAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMg
cG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAg
ICAgICAgLy8gcGF0aC4KLSAgICAgICAgICAgIAorICAgICAgICAgICAgaml0LnN0b3JlRmVuY2Uo
KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAg
ICBqaXQuc3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1aW50MzJf
dCBzdHJ1Y3R1cmVCaXRzID0gYml0d2lzZV9jYXN0PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUoKS0+
aWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5aWZ5U2xvd1Bh
dGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyNCw3ICsxMjQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAvLyBi
eXRlY29kZSBvcGVyYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGlzIGFycmF5aWZpY2F0aW9uIGJl
aW5nIHJlZXhlY3V0ZWQuCiAgICAgICAgICAgICAvLyBUaGF0J3MgZmluZSwgc2luY2UgYXJyYXlp
ZmljYXRpb24gaXMgbm90IHVzZXItdmlzaWJsZS4KICAgICAgICAgICAgIGppdC0+bV9qaXQubG9h
ZDgoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlR1BSLCBK
U0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgbV9zdHJ1Y3R1cmVHUFIpOworICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlR1BSKTsK
ICAgICAgICAgICAgIG1fYmFkSW5kZXhpbmdUeXBlSnVtcC5maWxsKAogICAgICAgICAgICAgICAg
IGppdCwgaml0LT5qdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKG1fc3RydWN0dXJlR1BSLCBt
X2FycmF5TW9kZSkpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRl
cmZseSk7IC8vIFRoaXMgaXMgYSBzdG9yZS1zdG9yZSBmZW5jZS4KICAgICAgICAgd3JpdGUoSlND
ZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgd3JpdGUoSlNDZWxsX3R5cGVJbmZvVHlwZSk7CiAg
ICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb0ZsYWdzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKHNjcmF0Y2gxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVu
U3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2gxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwg
c2NyYXRjaDEpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6
QWRkcmVzcyhzY3JhdGNoMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIG1f
aml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQu
b3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9m
aWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAyMDg2NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihz
Y3JhdGNoMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1
ZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1
dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwNiw5ICs1MDYsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxsKCkpKSB7CiAg
ICAgICAgIEpTQ2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKIAotICAgICAgICBpZiAo
cHJvcGVydHkuaXNVSW50MzIoKSkgeworICAgICAgICBpZiAocHJvcGVydHkuaXNVSW50MzIoKSkK
ICAgICAgICAgICAgIHJldHVybiBnZXRCeVZhbChleGVjLCBiYXNlLCBwcm9wZXJ0eS5hc1VJbnQz
MigpKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CisgICAgICAg
IGVsc2UgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKICAgICAgICAgICAgIGRvdWJsZSBwcm9w
ZXJ0eUFzRG91YmxlID0gcHJvcGVydHkuYXNEb3VibGUoKTsKICAgICAgICAgICAgIHVpbnQzMl90
IHByb3BlcnR5QXNVSW50MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlBc0RvdWJs
ZSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydHlBc1VJbnQzMiA9PSBwcm9wZXJ0eUFzRG91Ymxl
ICYmIGlzSW5kZXgocHJvcGVydHlBc1VJbnQzMikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMCwxNiArNjEwLDM0IEBAIENv
bXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBpbGF0aW9uS2V5KGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxhbjo6cmVtZW1iZXJDb2Rl
QmxvY2tzKCkKK3ZvaWQgUGxhbjo6bWFya0NvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNp
dG9yKQogeworICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBh
IENvZGVCbG9jayB3aXRob3V0IHBlcmZvcm1pbmcKKyAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVy
LiBTbywgd2UgbmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKKyAgICAvLyBh
bGwgb3VyIENvZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KKworICAgIHNsb3RW
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jayk7CisgICAg
c2xvdFZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKTsKKyAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCisgICAgICAgIHNs
b3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKK30KKwordm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQorewor
ICAgIGlmICghaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAogICAgIC8vIENvbXBpbGF0aW9uIHdyaXRlcyBsb3RzIG9mIHZhbHVlcyB0byBhIENvZGVCbG9j
ayB3aXRob3V0IHBlcmZvcm1pbmcKICAgICAvLyBhbiBleHBsaWNpdCBiYXJyaWVyLiBTbywgd2Ug
bmVlZCB0byBiZSBwZXNzaW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQKICAgICAvLyBhbGwgb3VyIENv
ZGVCbG9ja3MgbXVzdCBiZSB2aXNpdGVkIGR1cmluZyBHQy4KIAotICAgIEhlYXA6OmhlYXAoY29k
ZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0gICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICB2bS5oZWFw
LndyaXRlQmFycmllcihjb2RlQmxvY2spOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVC
bG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQotICAg
ICAgICBIZWFwOjpoZWFwKHByb2ZpbGVkREZHQ29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKHByb2Zp
bGVkREZHQ29kZUJsb2NrKTsKKyAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIocHJvZmlsZWRE
RkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw4IEBAIHN0cnVjdCBQbGFuIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBDb21waWxhdGlvbktleSBrZXkoKTsK
ICAgICAKLSAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgIHZvaWQgbWFya0NvZGVC
bG9ja3MoU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwog
ICAgIHZvaWQgY2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKICAg
ICBib29sIGlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCk7CiAgICAgdm9pZCBjYW5jZWwoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEwMiw2ICs0MTAyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAvLyBSYXJl
IGRhdGEgaXMgb25seSB1c2VkIHRvIGFjY2VzcyB0aGUgYWxsb2NhdG9yICYgc3RydWN0dXJlCiAg
ICAgICAgIC8vIFdlIGNhbiBhdm9pZCB1c2luZyBhbiBhZGRpdGlvbmFsIEdQUiB0aGlzIHdheQog
ICAgICAgICBHUFJSZWcgcmFyZURhdGFHUFIgPSBzdHJ1Y3R1cmVHUFI7CisgICAgICAgIEdQUlJl
ZyBpbmxpbmVDYXBhY2l0eUdQUiA9IHJhcmVEYXRhR1BSOwogCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIApAQCAtNDExMyw2ICs0MTE0LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYWxsb2NhdG9yR1BS
KSk7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgbnVsbHB0ciwgYWxs
b2NhdG9yR1BSLCBzdHJ1Y3R1cmVHUFIsIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIsIHNs
b3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0
YUdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhyYXJlRGF0
YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgp
ICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIGlu
bGluZUNhcGFjaXR5R1BSKTsKKyAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKHJlc3VsdEdQUiwgaW5saW5lQ2FwYWNpdHlHUFIpOworICAgICAgICBtX2ppdC5zdG9yZUZl
bmNlKCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9k
ZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogICAgICAgICAKQEAgLTQxMzcsNiArNDE0Myw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQ
UiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BS
LCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0LnN0
b3JlRmVuY2UoKTsKIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwo
c2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUp
KTsKICAgICAgICAgCkBAIC01OTYxLDExICs1OTY5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBbGxvY2F0ZU5ld0EKICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0KSk7CiAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBzY3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKKyAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKGluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICAKKyAgICAKICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdDxKU0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
c3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgCisg
ICAgbV9qaXQuc3RvcmVGZW5jZSgpOworICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHN0
ZDo6bWFrZV91bmlxdWU8Q2FsbEFycmF5QWxsb2NhdG9yV2l0aFZhcmlhYmxlU2l6ZVNsb3dQYXRo
R2VuZXJhdG9yPigKICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdBcnJheVdp
dGhTaXplLCByZXN1bHRHUFIsCiAgICAgICAgIHN0cnVjdHVyZSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRBbGxvY2F0ZVJhd09iamUKICAgICBpZiAoYWxsb2NhdG9yUHRyKSB7CiAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIHNjcmF0Y2hHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIHNsb3dD
YXNlcyk7CisgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRH
UFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKIApAQCAtMTYyLDYgKzE2MywxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgCiAgICAgaWYgKGhhc0lu
ZGV4aW5nSGVhZGVyKQogICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihudW1FbGVt
ZW50cyksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIAorICAgIG1faml0LmVtaXRJbml0aWFsaXplT3V0
T2ZMaW5lU3RvcmFnZShzdG9yYWdlR1BSLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OworICAgIAorICAgIG1faml0LnN0b3JlRmVuY2UoKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEdldExlbmd0aChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVn
IGxlbmd0aEdQUiwgYm9vbCBpbmNsdWRlVGhpcykKQEAgLTgzOCw3ICs4NDMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCAwLAogICAgICAgICAgICAganVt
cFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwpA
QCAtOTAyLDcgKzkwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9qaXQubG9hZDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2Rl
KCkpKTsKICAgICB9CkBAIC0zOTMwLDYgKzM5MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWFrZVJvcGUoTm9kCiAgICAgfQogICAgIG1faml0LnN0b3JlMzIoYWxsb2NhdG9yR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSk7CiAgICAgCisgICAgbV9qaXQuc3RvcmVGZW5jZSgpOworICAgIAogICAgIHN3aXRjaCAo
bnVtT3BHUFJzKSB7CiAgICAgY2FzZSAyOgogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwoCkBAIC0zOTQzLDcgKzM5NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWFrZVJvcGUoTm9kCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwogfQogCkBAIC02MzU1LDYgKzYzNjIsOCBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2xhc3NUeXBlPiB2b2lkIFNwZWN1CiAgICAgbV9qaXQuc3RvcmVQdHIoc2NvcGVHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0T2ZTY29wZUNoYWluKSk7CiAg
ICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSwgSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRPZkV4ZWN1dGFibGUpKTsKICAgICBtX2ppdC5zdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9m
ZnNldE9mUmFyZURhdGEpKTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKiBub2RlKQpAQCAtNjU0
Niw2ICs2NTU1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YQog
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZShTY29wZU9mZnNldChp
KSkpKTsKICAgICB9CisgICAgCisgICAgbV9qaXQuc3RvcmVGZW5jZSgpOwogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTY2MjUsNyArNjYzNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWlu
Q2FwYWNpdHkpKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRl
VmFyaWFibGVTaXplZEpTT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCiAgICAgICAgICAgICByZXN1
bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BS
LCBzY3JhdGNoMkdQUiwKICAgICAgICAgICAgIHNsb3dQYXRoKTsKQEAgLTY2NDAsNyArNjY1MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgCiAg
ICAgbV9qaXQuc3RvcmVQdHIoCiAgICAgICAgIFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygp
KSk7Ci0gICAgICAgIAorICAgIAogICAgIGlmIChsZW5ndGhJc0tub3duKSB7CiAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtNjcwNSw2
ICs2NzE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdAogICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgICAgICAKKyAgICBtX2ppdC5z
dG9yZUZlbmNlKCk7CisgICAgICAgIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
IH0KIApAQCAtNjkxMyw3ICs2OTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNw
cmVhZChOb2RlKgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
IAotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5hbmQz
MihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoMUdQUik7CiAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihJbnQzMlNoYXBlKSwgc2NyYXRjaDFHUFIpOwogCkBA
IC02OTMzLDcgKzY5NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5v
ZGUqCiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAKLSAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaDJHUFIpOwogICAgICAgICBhdXRvIGlzRG91
YmxlQXJyYXkgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gy
R1BSLCBUcnVzdGVkSW1tMzIoRG91YmxlU2hhcGUpKTsKIApAQCAtNjk2Nyw2ICs2OTgwLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBsZW5ndGhHUFIpLmxpbmtU
byhsb29wU3RhcnQsICZtX2ppdCk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CiAK
ICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwobV9qaXQuanVtcCgpLCB0aGlzLCBvcGVyYXRpb25TcHJlYWRGYXN0
QXJyYXksIHJlc3VsdEdQUiwgYXJndW1lbnQpKTsKQEAgLTczODUsMTEgKzc0MDAsMTcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIGFs
bG9jYXRvciwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgbV9qaXQu
YWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZSArIHNpemVvZihJbmRleGluZ0hl
YWRlcikpLCBzY3JhdGNoR1BSMSk7CisgICAgCisgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0g
MDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplKTsgb2Zmc2V0ICs9IHNpemVv
Zih2b2lkKikpCisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZih2b2lkKikpKSk7CisgICAgCisgICAgbV9qaXQuc3RvcmVGZW5jZSgpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksIHNjcmF0Y2hHUFIxKSk7CiAKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSk7CisgICAgbV9qaXQuc3RvcmVGZW5jZSgpOwogCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNo
R1BSMSwgbm9kZSk7CiB9CkBAIC03NDM1LDYgKzc0NTYsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNo
R1BSMSk7CiAgICAgICAgIAorICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IG9sZFNpemU7IG9m
ZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obmV3U2l6ZSk7IG9mZnNldCArPSBzaXplb2Yo
dm9pZCopKQorICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBz
aXplb2Yodm9pZCopKSkpOworCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNs
b3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAKQEAgLTc0NDMs
NyArNzQ2NywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIy
KTsKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lk
KikpKSk7CiAgICAgfQorICAgICAgICAKKyAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CiAgICAgbV9q
aXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgIG1faml0LnN0b3JlRmVuY2UoKTsKIAog
ICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5vZGUpOwogfQpAQCAtNzczMSw2ICs3NzU4
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iagogICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxW
YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7CiAjZW5kaWYKICAgICAKKyAgICBtX2ppdC5zdG9yZUZlbmNlKCk7CisgICAgCiAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93UGF0aCwgdGhpcywg
b3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIsIG9wZXJhbmRHUFIsIG5vZGUtPnN0
cnVjdHVyZSgpKSk7CiAgICAgCkBAIC03ODA4LDYgKzc4MzcsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0VHlwZWRB
cnJheSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSk7CiAgICAgCisgICAgbV9qaXQuc3RvcmVGZW5j
ZSgpOworICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBl
KHR5cGUpLAogICAgICAgICByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc2l6ZUdQUiwgc3RvcmFnZUdQ
UikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgpKQogICAgICAgICAgICAgbGV2ZWwgPSBG
VEw6OkNhbkNvbXBpbGU7Ci0KKyAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJh
bExvb3BzKCk7CiAgICAgICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzID0gKm1fZ3JhcGgu
bV9uYXR1cmFsTG9vcHM7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNp
Z25lZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50ID0gYnVpbGROYXR1cmFsTG9vcFRvTG9vcEhpbnRN
YXAobmF0dXJhbExvb3BzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29y
a2xpc3QuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLQogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0
YXRlLmgiCiAjaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCkBAIC0zOCw2ICszNiw4IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBj
bGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVi
bGljOgogICAgIFRocmVhZEJvZHkoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCBXb3JrbGlzdCYg
d29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21h
dGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24sIGludCByZWxhdGl2ZVByaW9yaXR5KQpAQCAt
MzQ5LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
CiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCit2b2lkIFdvcmtsaXN0
OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAg
ICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7
CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBs
YW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5tYXJr
Q29kZUJsb2NrcyhzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIFdvcmtsaXN0OjpyZW1l
bWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2sp
OwpAQCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhW
TSYgdm0KICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBp
ZiAocGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4t
PnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3Mo
dm0pOwogICAgIH0KIH0KIApAQCAtNTUzLDYgKzU2NCwxNCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxh
bnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQogCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwg
U2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6
bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCog
d29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAg
ICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJsb2Nrcyh2bSwgc2xvdFZpc2l0b3IpOworICAgIH0K
K30KKwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewpAQCAtNTYxLDcgKzU4MCwy
MiBAQCB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiAgICAgfQogfQogCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBjb21w
bGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQoreworfQorCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwg
U2xvdFZpc2l0b3ImKQoreworfQorCit2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlz
aW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVO
QUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RocmVh
ZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4
IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShE
RkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7
CiBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcsIENvbXBpbGVk
IH07CkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVB
bGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZN
Jik7CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKICAgICB2
b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFu
c0ZvclZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2Myw5ICsxNjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0
JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQogICAgIHJldHVybiAqcmVzdWx0OwogfQogCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7
Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJD
b2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQgQEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eTo6QWJzdHJhY3RIZWFwUmVwbwogICAgICwgYWJzb2x1dGUoJnJvb3QsICJhYnNvbHV0ZSIpCiB7
CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxpY2l0IGFzc3VtcHRpb25zIGFib3V0IHRo
ZSBTdHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4KLSAgICBSRUxFQVNFX0FTU0VSVCghKEpT
Q2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMSA9PSBKU0Nl
bGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5k
ZXhpbmdUeXBlLm9mZnNldCgpICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0g
SlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxf
aW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSAmIChzaXplb2YoaW50MzJfdCkgLSAxKSkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsg
MSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChK
U0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSArIDIgPT0gSlNDZWxsX3R5cGVJbmZv
RmxhZ3Mub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVB
bmRNaXNjLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKIAogICAg
IEpTQ2VsbF9zdHJ1Y3R1cmVJRC5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF9oZWFkZXIpOwogICAgIEpT
Q2VsbF91c2VmdWxCeXRlcy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF9oZWFkZXIpOwotICAgIEpTQ2Vs
bF9pbmRleGluZ1R5cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIEpT
Q2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVz
KTsKICAgICBKU0NlbGxfdHlwZUluZm9UeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5
dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CkBAIC0xMzUsMjEgKzEzNSwyNyBAQCB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRv
cnk6OmNvbXB1dGVSYW5nCiAgICAgICAgIGRhdGFMb2coIkFic3RyYWN0IEhlYXAgUmVwb3NpdG9y
eTpcbiIpOwogICAgICAgICByb290LmRlZXBEdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQor
ICAgIAorICAgIGF1dG8gcmFuZ2VGb3IgPSBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCkg
LT4gSGVhcFJhbmdlIHsKKyAgICAgICAgaWYgKGhlYXApCisgICAgICAgICAgICByZXR1cm4gaGVh
cC0+cmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgpOworICAgIH07CiAKICAgICBm
b3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvck1lbW9yeSkKLSAgICAgICAgZW50cnku
dmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5zZXRSYW5nZShlbnRyeS5oZWFwLT5yYW5nZSgpKTsK
KyAgICAgICAgZW50cnkudmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5zZXRSYW5nZShyYW5nZUZv
cihlbnRyeS5oZWFwKSk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JD
Q2FsbFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3Rz
LnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPEND
YWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBm
b3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsV3JpdGUpCi0gICAgICAgIGVu
dHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAt
PnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3Rz
LndyaXRlcyA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVu
dHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxQ
YXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRz
ID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBt
X2hlYXBGb3JQYXRjaHBvaW50V3JpdGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBv
aW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAg
ICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBy
YW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvckZlbmNlUmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJl
YWQgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VW
YWx1ZT4oKS0+cmVhZCA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZh
bHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFz
PEZlbmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDExIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3Is
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxs
X2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2Vs
bF9oZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1p
c2MsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlND
ZWxsX3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNy
byhKU0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlw
ZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4
aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJs
ZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0
aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3Jv
KEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAg
ICAgICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOworICAgICAgICBk
YXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nzg2LDcgKzI3ODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZVB1dFN0cnVjdHVyZSgp
CiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxp
bmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2Rl
KTsKLQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUt
PnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
ID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xk
U3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5ld1N0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOwpAQCAtMzk0NSw2ICszOTQ1LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVz
W2ldKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMu
cm9vdCwgbnVsbHB0cik7CisgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIApAQCAtNDAwMSw2ICs0MDAzLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZhc3RPYmplY3QsIG1f
aGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9v
dXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3JhcmVEYXRhKTsK
ICAgICAgICAgCisgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwor
ICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihmYXN0T2JqZWN0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAg
ICAKQEAgLTQxMjksNiArNDEzMyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhlbmQsIGxhc3ROZXh0KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbV9vdXQu
ZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgIAogICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogICAgIApAQCAtNDE4Miw2ICs0MTg4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChjdXJyZW50T2Zmc2V0LCBtX291
dC5jb25zdEludDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQp
KTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoYXJyYXkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC00MjE2LDYgKzQyMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZU5ld09iamVj
dCgpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3Ry
dWN0dXJlKCkpKTsKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKQEAgLTQyNjgsNiArNDI3
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOworICAgICAgICAgICAgbV9vdXQuZmVuY2Uo
Jm1faGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC00Mzc2LDYgKzQzODUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9v
dCwgbnVsbHB0cik7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ0MTcsNyArNDQyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCi0gICAg
ICAgICAgICBMVmFsdWUgaW5kZXhpbmdTaGFwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGFyZ3Vt
ZW50LCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4aW5nU2hhcGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudCwgbV9oZWFwcy5KU0Nl
bGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgICAgICAgICBpbmRleGluZ1NoYXBlID0gbV9v
dXQuYml0QW5kKGluZGV4aW5nU2hhcGUsIG1fb3V0LmNvbnN0SW50MzIoSW5kZXhpbmdTaGFwZU1h
c2spKTsKICAgICAgICAgICAgIExWYWx1ZSBpc09LSW5kZXhpbmdUeXBlID0gbV9vdXQuYmVsb3dP
ckVxdWFsKAogICAgICAgICAgICAgICAgIG1fb3V0LnN1YihpbmRleGluZ1NoYXBlLCBtX291dC5j
b25zdEludDMyKEludDMyU2hhcGUpKSwKQEAgLTQ0ODYsNiArNDQ5Niw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAg
ICAgICAgICAgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KTsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblNwcmVhZEdlbmVyaWMpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpOwog
CkBAIC00NTE4LDYgKzQ1MjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2hl
YXBzLmZvckluZGV4aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuZmVuY2UoJm1f
aGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGFycmF5VmFsdWVz
LmFycmF5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDU0Miw2ICs0NTU0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcHVibGljTGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBl
RHVyaW5nQWxsb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpKS5hcnJheSk7CisgICAgICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290
LCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTQ2MDksNiArNDYyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHNp
emUsIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwog
ICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5
KSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwogICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRy
KTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
ZmFzdFJlc3VsdFZhbHVlKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IApAQCAtNDg1MSw2ICs0ODY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlc3VsdCwgbV9o
ZWFwcy5KU1N0cmluZ19mbGFncyk7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCByZXN1
bHQsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKICAgICAgICAgCisgICAgICAgIG1fb3V0LmZl
bmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgCkBAIC01MjI5LDYgKzUyNDQsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAog
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC01MjM2LDcgKzUyNTIsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKLQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVBy
b3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlh
bnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CkBAIC01MjQ0LDcgKzUyNjQsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTgxMDMsNiArODEy
MiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGhh
dmVCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzcGxhdFdvcmRzKAorICAgICAgICAgICAgICAgICAg
ICBmYXN0QnV0dGVyZmx5VmFsdWUsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoLXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAtIDEpLAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKC0xKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50
NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSk7CiAKICAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hl
YXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIApAQCAtODI1Nyw3
ICs4MjgyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9i
amVjdChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8v
IERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAorCisgICAgICAgICAgICBCaXRWZWN0b3Igc2V0SW5saW5lT2Zmc2V0czsKICAgICAgICAg
ICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGll
c0NvbmN1cnJlbnRseSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsK
QEAgLTgyNjYsMTEgKzgyOTIsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkZXNjcmlwdG9yLmluZm8oKV0gIT0gZW50cnkua2V5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9m
ZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBi
YXNlOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoZW50cnkub2Zmc2V0
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5saW5lT2Zmc2V0cy5zZXQoZW50cnku
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvYmplY3Q7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJ1dHRl
cmZseTsKICAgICAgICAgICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2Us
IGRlc2NyaXB0b3IuaW5mbygpLCBlbnRyeS5vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNldElubGluZU9mZnNldHMuZ2V0KGkpKQorICAgICAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgbV9vdXQuYWRkcmVzcyhtX2hlYXBz
LnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShp
KSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKG91dGVy
Q29udGludWF0aW9uKTsKQEAgLTgyODEsNiArODMxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7
CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHJlc3VsdHMpKTsK
KyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgfQogCiAg
ICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCkKQEAgLTgzNTYsNiAr
ODM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBt
X291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKICAgICAgICAgc2V0SlNWYWx1ZShh
Y3RpdmF0aW9uKTsKICAgICB9CiAKQEAgLTg5MzQsNyArODk3MSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGlu
aXRMb29wKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsSW5kZXgg
PSBtX291dC5hbmNob3IoZW5kKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxQb2lu
dGVyID0gbV9vdXQuYW5jaG9yKGJhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5h
bFBvaW50ZXIgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5hZGQoYmFzZSwgbV9v
dXQuc2hsKG1fb3V0LnNpZ25FeHQzMlRvUHRyKGJlZ2luKSwgbV9vdXQuY29uc3RJbnQzMigzKSkp
KTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGVuZCwgYmVnaW4pLCB1bnN1
cmUoaW5pdExvb3ApLCB1bnN1cmUoaW5pdERvbmUpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGluaXRMb29wLCBpbml0RG9uZSk7CkBAIC04OTYzLDcgKzkwMDEsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7
CisKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoLWluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAtIDEpLCBtX291dC5j
b25zdEludDMyKC0xKSwKKyAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9w
ZXJ0aWVzLmF0QW55TnVtYmVyKCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1f
aGVhcHMucm9vdCwgbnVsbHB0cik7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2Jq
ZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIG1fb3V0LmZlbmNlKCZt
X2hlYXBzLnJvb3QsIG51bGxwdHIpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKQEAgLTg5OTEsNyArOTAzNywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3Rv
cmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJl
cigpLCByZXN1bHQsIG9mZnNldCkpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzcGxh
dFdvcmRzKAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MigtbmV3U2l6ZSAtIDEpLCBtX291dC5jb25zdEludDMyKC1vbGRTaXplIC0gMSksCisgICAgICAg
ICAgICBtX291dC5pbnQ2NFplcm8sIG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOwog
ICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5y
b290LCBudWxscHRyKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtOTg2MSw2ICs5OTE0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3Is
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKICAgICB7CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2Nh
dG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAgICAg
ICAgIHJlc3VsdCwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNGaW5hbE9iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyA4KSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoSlNGaW5hbE9iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyA4ICsgc3RydWN0dXJl
LT5pbmxpbmVDYXBhY2l0eSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywKKyAgICAg
ICAgICAgIG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpKTsKICAgICAgICAgbV9vdXQu
c3RvcmVQdHIoYnV0dGVyZmx5LCByZXN1bHQsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xMTk0Myw3ICsxMjAwMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExW
YWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpT
Q2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1p
c2MpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNs
YXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxl
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0
LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAg
ICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJl
c3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDYgKzM2NywxMSBAQCBMVmFsdWUgT3V0cHV0OjpzaWduRXh0MzJUbzY0KExWYWx1ZSB2YWx1CiAg
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNFeHQz
Miwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAorTFZhbHVlIE91dHB1dDo6c2lnbkV4dDMyVG9QdHIo
TFZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBzaWduRXh0MzJUbzY0KHZhbHVlKTsKK30KKwog
TFZhbHVlIE91dHB1dDo6emVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpCiB7CiAgICAg
aWYgKHZhbHVlLT50eXBlKCkgPT0gdHlwZSkKQEAgLTQ0Niw5ICs0NTEsMTIgQEAgdm9pZCBPdXRw
dXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVt
b3J5KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKLUZlbmNlVmFsdWUqIE91dHB1dDo6ZmVu
Y2UoKQorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZShjb25zdCBBYnN0cmFjdEhlYXAqIHJlYWQs
IGNvbnN0IEFic3RyYWN0SGVhcCogd3JpdGUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKKyAgICBGZW5jZVZhbHVlKiByZXN1
bHQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7Cisg
ICAgbV9oZWFwcy0+ZGVjb3JhdGVGZW5jZVJlYWQocmVhZCwgcmVzdWx0KTsKKyAgICBtX2hlYXBz
LT5kZWNvcmF0ZUZlbmNlV3JpdGUod3JpdGUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIg
cG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgZG91Ymxl
VG9VSW50KExWYWx1ZSk7CiAKICAgICBMVmFsdWUgc2lnbkV4dDMyVG82NChMVmFsdWUpOworICAg
IExWYWx1ZSBzaWduRXh0MzJUb1B0cihMVmFsdWUpOwogICAgIExWYWx1ZSB6ZXJvRXh0KExWYWx1
ZSwgTFR5cGUpOwogICAgIExWYWx1ZSB6ZXJvRXh0UHRyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
emVyb0V4dCh2YWx1ZSwgQjM6OkludDY0KTsgfQogICAgIExWYWx1ZSBpbnRUb0RvdWJsZShMVmFs
dWUpOwpAQCAtMTg5LDcgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExWYWx1ZSBsb2FkKFR5cGVk
UG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIpOwot
ICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZShj
b25zdCBBYnN0cmFjdEhlYXAqIHJlYWQsIGNvbnN0IEFic3RyYWN0SGVhcCogd3JpdGUpOwogCiAg
ICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4
WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
ZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCw4IEBAIGVudW0gY2xh
c3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBE
dXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQg
eWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGku
ZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4gdGhp
cyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4g
ZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgotICAg
IE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxs
IGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBp
cyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1
cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCi0g
ICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAgICAvLyBUaGUgb2JqZWN0IGlz
IGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBHcmV5ID0gMiwKIH07CiAKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJl
c2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Eb3VibHlM
aW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVibGljOgorICAgIFJlc3VtZVRo
ZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7Cisg
ICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxp
c2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQorICAg
IHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisK
IG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICog
TUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwg
bV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6
bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3Rk
OjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04p
CiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwg
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC00MTYsMTIg
KzQ0OCwxMiBAQCB2b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZv
aWQgSGVhcDo6aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhh
cnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bEZpbmFsaXplcnMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFs
RmluYWxpemVycygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25k
aXRpb25hbEZpbmFsaXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmco
KQpAQCAtNDM5LDExNyArNDcxLDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMo
KQogI2lmIEVOQUJMRShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRl
QWxsRm9yVk0oKm1fdm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgREZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAK
LXZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFy
a1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtS
b290c1RpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2Nv
cGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50
Iik7CiAgICAgCi0gICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNp
dG9yKTsKKyAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdl
bmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNl
Iik7CisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkg
eworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2st
PmNsZWFyKCk7CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVt
ZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0j
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxl
ciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGls
IHdlJ3JlIGRvbmUKLSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIn
cyBkYXRhIGJlY2F1c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGlu
Z1Byb2ZpbGVyJ3Mgc3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUK
LSAgICAgICAgICAgIC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5j
ZSB0byBtYXJrIGl0LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lk
ZSB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKS5sb2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNz
VW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
CiAKLSAgICAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVs
bCkgewotICAgICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5N
YXJraW5nKCk7Ci0KLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
Ci0KLSAgICAgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhp
c10gKCkgewotICAgICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFi
bGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RG
TW92ZShuZXdWaXNpdG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0
b3JzLnRha2VMYXN0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNl
dEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmICht
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3
VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBz
bG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChH
Q1RocmVhZFR5cGU6OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQo
R0NUaHJlYWRUeXBlOjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNp
dG9yKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygp
OwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpz
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2lu
ZygpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZp
c2l0b3I6OlNsYXZlRHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0
b3JMb2NrKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNp
dG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1f
cGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFy
YWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CiAKLSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAg
ICB9Ci0gICAgCi0gICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUo
KnRoaXMsICJIZWFwOjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9z
bG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3It
PmRpZFN0YXJ0TWFya2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBk
b3VibGUgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91Ymxl
IHJhdGlvU3RlcCA9IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlh
bFRpbWU7CisgICAgZm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMi
LCBpdGVyYXRpb24sICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0g
dG9wT2ZMb29wVGltZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0
aW87CisgICAgICAgIHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAg
ICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29w
ZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAg
ICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRp
dmVSb290cyBjb25zZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBs
ZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFj
a1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290
cyhjb25zZXJ2YXRpdmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAv
LyBOb3cgd2UgdmlzaXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZp
eHBvaW50IGl0ZXJhdGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRT
ZXQoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5z
dXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAgICAg
Ly8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBp
dCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRoYXQg
d2Uga25vdyBmb3Igc3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAgICAg
ICAgbV9jb2RlQmxvY2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgICAg
ICB2aXNpdFNtYWxsU3RyaW5ncygpOwotICAgICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMoaGVh
cFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNp
dG9yKTsKLSAgICAgICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAg
dmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0SGFuZGxl
U3RhY2soaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7
Ci0gICAgICAgIHZpc2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tl
bigpOwotICAgICAgICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAg
ICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWlu
KTsKLSAgICB9Ci0gICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2Nv
cGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8v
IFdlYWsgcmVmZXJlbmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5l
c3MgZGVwZW5kcyBvbgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2Jq
ZWN0IGdyYXBoLgotICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAg
ICAgaWYgKG1fdm0tPnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25T
Y29wZSkpCisgICAgICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgIGhlYXBSb290Vmlz
aXRvci52aXNpdCgmcGFpci5rZXkpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtM
aXN0U2V0ICYmIG1fbWFya0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3Vt
ZW50QnVmZmVyOjptYXJrTGlzdHMoaGVhcFJvb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
aGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgaWYgKG1fdm0tPmxhc3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRv
ci52aXNpdChtX3ZtLT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisg
ICAgICAgIG1faGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOwor
ICAgICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFC
TEUoU0FNUExJTkdfUFJPRklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAg
ICAgc2FtcGxpbmdQcm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAg
ICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FN
UExJTkdfUFJPRklMRVIpCisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVy
KCkpCisgICAgICAgICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVj
dG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0
aW5lcygqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0
byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAg
IHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAg
ICAgbV9vYmplY3RTcGFjZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAg
IGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RX
ZWFrUmVmZXJlbmNlcygpOworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9j
b2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNl
cnZhdGl2ZWx5IGVuc3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUK
KyAgICAgICAgLy8gcnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3Vy
ZSB0byBkbyBpdCAqYWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28g
dGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28s
IHRoaXMgaGFzIHRvIGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sg
LSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28g
d2FudCB0byBkbyB0aGlzCisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0
aGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0
CisgICAgICAgIC8vIEdDLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1f
dm0pOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFj
a3MgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFk
KQorICAgICAgICAvLyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIu
CisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RW
aXNpdG9yLT5tdXRhdG9yTWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAg
IAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisK
KyAgICAgICAgeworICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVs
TW9kZUVuYWJsZXIgZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAg
ICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOwor
ICAgICAgICAgICAgU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQo
U2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYg
KGRyYWluUmVzdWx0ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgewor
ICAgICAgICAgICAgICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgq
dGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5k
RHJhaW4oKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZy
b21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3Rv
bmljVGltZTo6bm93KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRp
bWVUb1Jlc3VtZTsKKyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQog
CiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRl
eCk7CkBAIC01NjMsNyArNjQyLDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQogCiB2b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IHJvb3RzKQogewotICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9t
YWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJv
dXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsKIH0KIApAQCAtNTkwLDYgKzY2OCw3IEBAIHZvaWQgSGVh
cDo6YmVnaW5NYXJraW5nKCkKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6OmJlZ2luTWFya2luZyIpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0
aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fY29kZUJsb2Nrcy0+Y2xlYXJNYXJrc0ZvckZ1bGxD
b2xsZWN0aW9uKCk7CisgICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICAK
ICAgICB7CiAgICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29wZSgqdGhpcywg
Im1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7CkBAIC01OTcsNDIgKzY3NiwyMiBAQCB2b2lk
IEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Ns
b3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KIHZvaWQgSGVhcDo6dmlz
aXRDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9z
bG90VmlzaXRvci5hcHBlbmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFw
cGVuZChyb290cyk7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZl
cmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBk
YXRhTG9nKCJDb25zZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7
CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQog
ewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVy
T2ZXb3JrbGlzdHMoKTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5k
ZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0
b3JTbG90VmlzaXRvcik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNp
dG9yKTsKKyAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKICNlbmRpZgogfQogCkBAIC03MDUsMTMyICs3NjQsMTAgQEAgdm9pZCBIZWFw
OjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2
aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17
Ci0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBS
b290VmlzaXRvci52aXNpdCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0
czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQt
PnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1h
cmtMaXN0cyh2aXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1
ZmZlcnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5k
RHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFk
ZHJlc3NPZkV4Y2VwdGlvbigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxh
c3RFeGNlcHRpb24oKSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6
OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9y
KTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1f
aGFuZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25n
IEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0g
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBk
YXRhTG9nKCJIYW5kbGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZp
c2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJv
ZmlsZXIoKQotewotI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxp
bmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkg
ewotICAgICAgICBBU1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkp
OwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAg
ICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxp
bmdQcm9maWxlci0+Z2V0TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQot
ewotICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJv
ZmlsZXJMb2coKS0+dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUg
UHJvZmlsZXIgdmlzaXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hh
ZG93Q2hpY2tlbigpCi17Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4o
bV9zbG90VmlzaXRvcik7Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1
YlJvdXRpbmVzKCkKLXsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91
dGluZXMobV9zbG90VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1
YiBSb3V0aW5lczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25h
dGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6dmlzaXRXZWFrSGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFj
ZS52aXNpdFdlYWtTZXRzIik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1Nl
dHModmlzaXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7
Ci0gICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAg
IGlmIChtX3Nsb3RWaXNpdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAg
ICAgIGRhdGFMb2coIkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgewotICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZp
c2l0b3IpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAg
ICAgICAgICAgbV9zbG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3Rl
ckRyYWluKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RD
b3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xv
dFZpc2l0b3IudmlzaXRDb3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29s
bGVjdG9yU2xvdFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0
aHJlYWRWaXNpdENvdW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9i
amVjdHMgYWZ0ZXIgR0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4odmlzaXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkg
LSBnY1N0YXJ0VGltZSk7CiAgICAgfQpAQCAtODM4LDE5ICs3NzUsMjIgQEAgdm9pZCBIZWFwOjp1
cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAw
OwogCi0gICAgbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0
ZXNWaXNpdGVkKCkgKyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNp
dGVkVGhpc0N5Y2xlID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNp
dGVkKCkgKworICAgICAgICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFs
Qnl0ZXNWaXNpdGVkICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQg
SGVhcDo6ZW5kTWFya2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVs
VmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRv
ci0+cmVzZXQoKTsKIAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgp
KTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAg
IG1fb2JqZWN0U3BhY2UuZW5kTWFya2luZygpOwpAQCAtOTg4LDE0ICs5MjgsMjAgQEAgdm9pZCBI
ZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsK
ICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpB
bnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBn
cmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdy
ZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4g
b2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMg
d2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0
d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0
YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0
X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50
bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUg
aW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAg
Ly8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJs
YWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21l
IHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcg
cGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3
YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0
aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0
IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVj
dG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2Jq
ZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29t
ZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVu
Zm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2st
PmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0x
MDk0LDI0ICsxMDQwLDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAg
ICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25p
Y1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFM
b2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9
IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0
eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFC
TEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwot
ICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1f
dm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgp
LT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAg
ICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24g
c2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7
CkBAIC0xMTMxLDEyICsxMDY3LDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAg
ICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpC
ZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7
Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3Rz
KGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAg
IAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVP
YmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzEx
MDYsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1l
TVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAg
ICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRh
dGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIs
IChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQog
ICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzExMjksMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29y
bGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygp
OwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOwor
CisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1
ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1f
b2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogewor
ICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24g
Y3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0
aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBu
by1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAg
ICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3lj
bGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3Bh
Y2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVj
dG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2
ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVh
ZHMoKTsKQEAgLTE0MDgsMjMgKzEzNjQsMTggQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxp
emUoKQogCiB2b2lkIEhlYXA6OnNldEdDRGlkSklUKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQob2xkU3RhdGUgJiBzdG9wcGVkQml0KTsKLSAgICAgICAgaWYgKG1fd29ybGRT
dGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSB8IGdjRGlkSklUQml0
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0
aW9uKAorICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhdGUgJiBzdG9wcGVkQml0KTsKKyAgICAgICAgICAgIHN0YXRlIHw9IGdjRGlk
SklUQml0OworICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpzZXROZWVkRmluYWxpemUoKQog
ewotICAgIGZvciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3Rh
dGUubG9hZCgpOwotICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWso
b2xkU3RhdGUsIG9sZFN0YXRlIHwgbmVlZEZpbmFsaXplQml0KSkgewotICAgICAgICAgICAgbV9z
dG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobmVlZEZpbmFs
aXplQml0KTsKKyAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAg
bV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7CiB9CiAKIHZvaWQgSGVhcDo6
d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKQEAgLTE0NDEsMjMgKzEzOTIsMTQgQEAgdm9pZCBIZWFw
Ojp3YWl0V2hpbGVOZWVkRmluYWxpemUoKQogICAgIH0KIH0KIAotdW5zaWduZWQgSGVhcDo6c2V0
TXV0YXRvcldhaXRpbmcoKQordm9pZCBIZWFwOjpzZXRNdXRhdG9yV2FpdGluZygpCiB7Ci0gICAg
Zm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2Fk
KCk7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YXRlID0gb2xkU3RhdGUgfCBtdXRhdG9yV2FpdGlu
Z0JpdDsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0
YXRlLCBuZXdTdGF0ZSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgfQorICAg
IG1fd29ybGRTdGF0ZS5leGNoYW5nZU9yKG11dGF0b3JXYWl0aW5nQml0KTsKIH0KIAogdm9pZCBI
ZWFwOjpjbGVhck11dGF0b3JXYWl0aW5nKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVu
c2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29y
bGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5tdXRhdG9y
V2FpdGluZ0JpdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fd29ybGRTdGF0
ZS5leGNoYW5nZUFuZCh+bXV0YXRvcldhaXRpbmdCaXQpOwogfQogCiB2b2lkIEhlYXA6Om5vdGlm
eVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTQ2OSwxMCArMTQxMSwxNSBA
QCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvCiAKIHZvaWQgSGVhcDo6
ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsK
LSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwotICAgIGRlbGV0ZVNvdXJjZVByb3Zp
ZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRpb25zKCk7CisgICAgeworICAgICAg
ICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7CisgICAgICAgIGRlbGV0ZVVu
bWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVz
KCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAgIH0KKyAgICAKKyAgICBp
ZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMo
KTsKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9w
ZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogfQpAQCAtMTU1NCwyMyArMTUw
MSw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAg
b2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xk
U3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRh
YmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAg
ICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAg
ICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6
OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7
CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6
OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5NTQsNyArMTg4Nyw3IEBAIGJvb2wgSGVhcDo6Y2Fu
Q29sbGVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xs
ZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8
IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRh
dG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk3NiwxMiArMTkwOSw4IEBAIGJvb2wgSGVh
cDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBt
dXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUp
Cit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQg
d2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9u
U2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRl
OjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9l
eHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk5MiwxMiArMTkyMSw4
IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVO
QUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNp
dGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50
IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGlu
IHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNp
emU7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0yMDkxLDQgKzIwMTYsMTEgQEAgdm9pZCBIZWFwOjpz
ZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9p
ZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0
ID0gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAg
ICBjb2xsZWN0QXN5bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUu
aCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVm
Q291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAog
I2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUg
IlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1
YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGlt
ZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRT
cGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGlu
ZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQog
Ci0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9z
bG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsg
cmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11
dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNr
KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZp
dHlDYWxsYmFjaygpOwpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQg
YWRkRXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVU
b0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBp
c0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoK
ICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1h
eSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJl
cG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3Qp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNp
emVfdCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJ
IHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUg
dGhpcyBwcm9jZXNzLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxN
ZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNp
emVfdCBleHRlcm5hbE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsg
fQogI2VuZGlmCiAKQEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRo
ZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJl
c3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7
CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0
YXRvcigpOwogICAgIApAQCAtNDEyLDcgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRO
ZWVkRmluYWxpemUoKTsKICAgICB2b2lkIHdhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwogICAgIAot
ICAgIHVuc2lnbmVkIHNldE11dGF0b3JXYWl0aW5nKCk7CisgICAgdm9pZCBzZXRNdXRhdG9yV2Fp
dGluZygpOwogICAgIHZvaWQgY2xlYXJNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgbm90aWZ5
VGhyZWFkU3RvcHBpbmcoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIApAQCAtNDIyLDMxICs0Mjgs
MTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsK
ICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7
Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7CiAgICAgdm9pZCBmbHVzaFdy
aXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKICAgICB2b2lk
IHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBtYXJrUm9vdHMoZG91YmxlIGdj
U3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7
CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9p
ZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhl
clNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5N
YXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgIHZv
aWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMo
KTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAg
ICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQg
dmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ0hh
bmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBS
b290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgdm9p
ZCB2aXNpdFR5cGVQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0g
ICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZp
c2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2lu
dChIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUg
Z2NTdGFydFRpbWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTgsNyArNTExLDgg
QEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAg
Ci0gICAgU2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
dFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAKICAgICAvLyBXZSBwb29sIHRoZSBz
bG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1
bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNl
ZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpA
QCAtNTcyLDcgKzU2Niw4IEBAIHByaXZhdGU6CiAKICAgICBMb2NrIG1fbWFya2luZ011dGV4Owog
ICAgIENvbmRpdGlvbiBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZTsKLSAgICBNYXJrU3RhY2tB
cnJheSBtX3NoYXJlZE1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJy
YXk+IG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJr
U3RhY2tBcnJheT4gbV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrOwogICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMgeyAwIH07CiAgICAgYm9vbCBtX3BhcmFsbGVsTWFya2Vy
c1Nob3VsZEV4aXQgeyBmYWxzZSB9OwpAQCAtNjAwLDYgKzU5NSw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG11dGF0b3JXYWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFs
bG93cyB0aGUgbXV0YXRvciB0byB1c2UgdGhpcyBhcyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAg
ICBBdG9taWM8dW5zaWduZWQ+IG1fd29ybGRTdGF0ZTsKICAgICBib29sIG1fY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIE1vbm90b25pY1RpbWUg
bV9zdG9wVGltZTsKICAgICAKICAgICBEZXF1ZTxPcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+PiBt
X3JlcXVlc3RzOwogICAgIFRpY2tldCBtX2xhc3RTZXJ2ZWRUaWNrZXQgeyAwIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzYsNiArMzYsMzQgQEAgTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0Fy
cmF5KCkKIHsKIH0KIAordm9pZCBNYXJrU3RhY2tBcnJheTo6dHJhbnNmZXJUbyhNYXJrU3RhY2tB
cnJheSYgb3RoZXIpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGhpcyAhPSAmb3RoZXIpOworICAg
IAorICAgIC8vIFJlbW92ZSBvdXIgaGVhZCBhbmQgdGhlIGhlYWQgb2YgdGhlIG90aGVyIGxpc3Qu
CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG15SGVhZCA9IG1fc2VnbWVudHMu
cmVtb3ZlSGVhZCgpOworICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBvdGhlckhl
YWQgPSBvdGhlci5tX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBtX251bWJlck9mU2VnbWVu
dHMtLTsKKyAgICBvdGhlci5tX251bWJlck9mU2VnbWVudHMtLTsKKyAgICAKKyAgICBvdGhlci5t
X3NlZ21lbnRzLmFwcGVuZChtX3NlZ21lbnRzKTsKKyAgICAKKyAgICBvdGhlci5tX251bWJlck9m
U2VnbWVudHMgKz0gbV9udW1iZXJPZlNlZ21lbnRzOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cyA9
IDA7CisgICAgCisgICAgLy8gUHV0IHRoZSBvcmlnaW5hbCBoZWFkcyBiYWNrIGluIHRoZWlyIHBs
YWNlcy4KKyAgICBtX3NlZ21lbnRzLnB1c2gobXlIZWFkKTsKKyAgICBvdGhlci5tX3NlZ21lbnRz
LnB1c2gob3RoZXJIZWFkKTsKKyAgICBtX251bWJlck9mU2VnbWVudHMrKzsKKyAgICBvdGhlci5t
X251bWJlck9mU2VnbWVudHMrKzsKKyAgICAKKyAgICB3aGlsZSAoIWlzRW1wdHkoKSkgeworICAg
ICAgICByZWZpbGwoKTsKKyAgICAgICAgd2hpbGUgKGNhblJlbW92ZUxhc3QoKSkKKyAgICAgICAg
ICAgIG90aGVyLmFwcGVuZChyZW1vdmVMYXN0KCkpOworICAgIH0KK30KKwogdm9pZCBNYXJrU3Rh
Y2tBcnJheTo6ZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQogewogICAg
IC8vIFRyeSB0byBkb25hdGUgYWJvdXQgMSAvIDIgb2Ygb3VyIGNlbGxzLiBUbyByZWR1Y2UgY29w
eWluZyBjb3N0cywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw4ICszNSw5IEBAIGNsYXNzIE1hcmtTdGFja0FycmF5
IDogcHVibGljIEdDU2VnbWVudGUKIHB1YmxpYzoKICAgICBNYXJrU3RhY2tBcnJheSgpOwogCi0g
ICAgdm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpOwotICAgIHZv
aWQgc3RlYWxTb21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5JiBvdGhlciwgc2l6ZV90IGlkbGVU
aHJlYWRDb3VudCk7CisgICAgdm9pZCB0cmFuc2ZlclRvKE1hcmtTdGFja0FycmF5Jik7CisgICAg
dm9pZCBkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgc3RlYWxT
b21lQ2VsbHNGcm9tKE1hcmtTdGFja0FycmF5Jiwgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDcgKzEzNyw2IEBAIHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6YWxsb2NhdGVJbihNYXJrZWQK
IHZvaWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxl
KiBibG9jaykKIHsKICAgICBBU1NFUlQoYmxvY2spOwotICAgIEFTU0VSVCghYmxvY2stPmhhc0Fu
eU5ld2x5QWxsb2NhdGVkKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsK
ICAgICAKICAgICBGcmVlTGlzdCBmcmVlTGlzdCA9IGJsb2NrLT5zd2VlcChNYXJrZWRCbG9jazo6
SGFuZGxlOjpTd2VlcFRvRnJlZUxpc3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIs
MTQgQEAgTWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJgogICAgICwgbV9o
YW5kbGUoaGFuZGxlKQogICAgICwgbV92bSgmdm0pCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOwogfQogCi10ZW1w
bGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rp
b25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NNb2RlPgordGVtcGxhdGU8TWFy
a2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVj
dGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1v
ZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUg
bmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpNYXJrc01vZGUgbWFya3NN
b2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShkZXN0cnVjdGlvbk1vZGUgPT0gRG9lc05vdE5lZWREZXN0
cnVjdGlvbiAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IShkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzICYmIHN3ZWVwTW9kZSA9
PSBTd2VlcE9ubHkpKTsKICAgICAKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJT
Y29wZShmYWxzZSk7CiAKQEAgLTk5LDcgKzEwMSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemUKICAgICBpZiAoT3B0aW9uczo6dXNlQnVtcEFsbG9jYXRvcigpCiAg
ICAgICAgICYmIGVtcHR5TW9kZSA9PSBJc0VtcHR5CiAgICAgICAgICYmIG5ld2x5QWxsb2NhdGVk
TW9kZSA9PSBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkKSB7Ci0gICAgICAgIEFTU0VSVChtYXJr
c01vZGUgPT0gTWFya3NTdGFsZSk7CisgICAgICAgIEFTU0VSVChtYXJrc01vZGUgPT0gTWFya3NT
dGFsZSB8fCBibG9jay5tX21hcmtzLmlzRW1wdHkoKSk7CiAgICAgICAgIAogICAgICAgICBjaGFy
KiBzdGFydE9mTGFzdENlbGwgPSBzdGF0aWNfY2FzdDxjaGFyKj4oY2VsbEFsaWduKGJsb2NrLmF0
b21zKCkgKyBtX2VuZEF0b20gLSAxKSk7CiAgICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFy
dE9mTGFzdENlbGwgKyBjZWxsU2l6ZSgpOwpAQCAtMTExLDYgKzExMyw4IEBAIEZyZWVMaXN0IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAgIHNldElzRnJlZUxpc3Rl
ZCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2FsbG9jYXRvci0+c2V0SXNFbXB0eSh0
aGlzLCB0cnVlKTsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICAg
ICAgYmxvY2subV9sb2NrLnVubG9jaygpOwogICAgICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVl
TGlzdDo6YnVtcChwYXlsb2FkRW5kLCBwYXlsb2FkRW5kIC0gcGF5bG9hZEJlZ2luKTsKICAgICAg
ICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZygiUXVpY2tseSBzd2VwdCBibG9jayAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplKCksICIgYW5k
IGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCByZXN1bHQsICJcbiIpOwpAQCAtMTIz
LDE3ICsxMjcsMTEgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQog
ICAgIEZyZWVDZWxsKiBoZWFkID0gMDsKICAgICBzaXplX3QgY291bnQgPSAwOwogICAgIGJvb2wg
aXNFbXB0eSA9IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAgIGlmIChlbXB0eU1vZGUgPT0g
Tm90RW1wdHkKLSAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYg
YmxvY2subV9tYXJrcy5nZXQoaSkpCi0gICAgICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVk
TW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7
Ci0gICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICAKKyAgICBWZWN0b3I8c2l6ZV90PiBkZWFkQ2VsbHM7CisgICAgYXV0
byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKICAgICAgICAgSGVhcENlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZibG9jay5hdG9tcygpW2ldKTsK
IAotICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IE5lZWRzRGVzdHJ1Y3Rpb24gJiYgZW1w
dHlNb2RlID09IE5vdEVtcHR5KQorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2Nr
SGFzTm9EZXN0cnVjdG9ycyAmJiBlbXB0eU1vZGUgPT0gTm90RW1wdHkpCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxKU0NlbGwqPihjZWxsKS0+Y2FsbERlc3RydWN0b3IoKnZtKCkpOwogCiAgICAg
ICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KSB7CkBAIC0xNDQsMTIgKzE0Miwz
MyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAg
ICBoZWFkID0gZnJlZUNlbGw7CiAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICB9CisgICAg
fTsKKyAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0g
bV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYgKGVtcHR5TW9kZSA9PSBOb3RFbXB0eQorICAg
ICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtz
LmdldChpKSkKKyAgICAgICAgICAgICAgICB8fCAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05l
d2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0ZWQuZ2V0KGkpKSkpIHsKKyAgICAgICAgICAg
IGlzRW1wdHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNB
bmRDb2xsZWN0b3JJc1J1bm5pbmcpCisgICAgICAgICAgICBkZWFkQ2VsbHMuYXBwZW5kKGkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlzY2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0
cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0LAogICAgIC8vIG90aGVyd2lzZSB3ZSB3b3Vs
ZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBjdXJyZW50bHkgYWxpdmUuCiAgICAgaWYgKHN3
ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05l
d2x5QWxsb2NhdGVkKQogICAgICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNw
YWNlOjpudWxsVmVyc2lvbjsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisg
ICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKKyAgICAKKyAgICBpZiAoZGVzdHJ1Y3Rpb25N
b2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA6IGRlYWRDZWxscykKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxs
KGkpOworICAgIH0KIAogICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVMaXN0OjpsaXN0KGhlYWQs
IGNvdW50ICogY2VsbFNpemUoKSk7CiAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxp
c3QpCkBAIC0xNzcsMTIgKzE5NiwxOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcChTd2VlCiAgICAgCiAgICAgQVNTRVJUKCFtX2FsbG9jYXRvci0+aXNBbGxvY2F0ZWQodGhp
cykpOwogICAgIAotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0
cnVjdGlvbikKLSAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPE5l
ZWRzRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7Ci0gICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0
U2NyaWJibGVNb2RlPERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24+KHN3ZWVwTW9kZSk7CisgICAgaWYg
KHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7Cisg
ICAgCisgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9u
KSB7CisgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29s
bGVjdG9ySXNSdW5uaW5nPihzd2VlcE1vZGUpOworICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJT
ZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9ycz4oc3dlZXBNb2RlKTsKKyAgICB9
CisgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzTm9EZXN0
cnVjdG9ycz4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rp
b25Nb2RlIGRlc3RydWN0aW9uTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAg
aWYgKHNjcmliYmxlRnJlZUNlbGxzKCkpCkBAIC0xOTAsNyArMjE1LDcgQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVj
dEVtcHR5TW9kZTxkZXN0cnVjdGlvbk1vZGUsIERvbnRTY3JpYmJsZT4oc3dlZXBNb2RlKTsKIH0K
IAotdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6
OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3ZWVwTW9kZSBzd2VlcE1v
ZGUpCiB7CiAgICAgLy8gSXQncyBub3Qgb2J2aW91cywgYnV0IHRoaXMgaXMgdGhlIG9ubHkgd2F5
IHRvIGtub3cgaWYgdGhlIGJsb2NrIGlzIGVtcHR5LiBJdCdzIHRoZSBvbmx5CkBAIC0yMDUsNyAr
MjMwLDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJl
dHVybiBzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkPE5vdEVtcHR5LCBkZXN0cnVj
dGlvbk1vZGUsIHNjcmliYmxlTW9kZT4oc3dlZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2Vk
QmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3Ry
dWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9k
ZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwg
TWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZT4KIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQo
U3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBpZiAoaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkK
QEAgLTIxMyw3ICsyMzgsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhl
bHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlPGVtcHR5TW9kZSwgZGVz
dHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQ+KHN3
ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBl
bXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5l
d2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNj
cmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2Nh
dGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojpzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAg
IGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMjIxLDEwICsyNDYsMTYgQEAg
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2Vl
cEhlbHBlclNlbGVjdE1hcmtzTW9kZTxlbXB0eU1vZGUsIFN3ZWVwT25seSwgZGVzdHJ1Y3Rpb25N
b2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZT4oKTsKIH0KIAotdGVtcGxhdGU8
TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3Rl
bXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3
ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxv
Y2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKCkKIHsKLSAgICBpZiAoYXJlTWFya3NTdGFs
ZSgpKQorICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uID0gc3BhY2UoKS0+bWFya2luZ1Zl
cnNpb24oKTsKKyAgICBib29sIG1hcmtzQXJlVXNlZnVsID0gIWJsb2NrKCkuYXJlTWFya3NTdGFs
ZShtYXJraW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQor
ICAgICAgICBtYXJrc0FyZVVzZWZ1bCB8PSBibG9jaygpLm1hcmtzQ29udmV5TGl2ZW5lc3NEdXJp
bmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoIW1hcmtzQXJlVXNlZnVs
KQogICAgICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9kZSwg
ZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NT
dGFsZT4oKTsKICAgICByZXR1cm4gc3BlY2lhbGl6ZWRTd2VlcDxlbXB0eU1vZGUsIHN3ZWVwTW9k
ZSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGUsIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFy
a3NOb3RTdGFsZT4oKTsKIH0KQEAgLTI0MSwyNCArMjcyLDYgQEAgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzZXRJc0ZyZWVMaXN0ZQogICAgIG1faXNGcmVlTGlzdGVkID0gdHJ1ZTsKIH0KIAot
Y2xhc3MgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lk
RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgU2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKE1hcmtlZEJs
b2NrOjpIYW5kbGUqIGJsb2NrKQotICAgICAgICA6IG1fYmxvY2soYmxvY2spCi0gICAgewotICAg
IH0KLQotICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEhlYXBDZWxsKiBjZWxsLCBIZWFw
Q2VsbDo6S2luZCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChNYXJrZWRCbG9jazo6Ymxv
Y2tGb3IoY2VsbCkgPT0gJm1fYmxvY2stPmJsb2NrKCkpOwotICAgICAgICBtX2Jsb2NrLT5zZXRO
ZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIG1fYmxv
Y2s7Ci19OwotCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKGNvbnN0
IEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAgICBpZiAoZmFsc2UpCkBAIC0yNjYsMTIgKzI3OSwx
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgQVNTRVJU
KCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykpOwogCiAgICAgaWYgKCFpc0ZyZWVMaXN0
ZWQoKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJUaGVyZSBh
aW4ndCBubyBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHdlIGVpdGhlciBkaWRuJ3QgdXNlIHRoaXMgYmxvY2sgYXQgYWxsIGZvciBhbGxvY2F0aW9uIHNp
bmNlIGxhc3QgR0MsCiAgICAgICAgIC8vIG9yIHNvbWVvbmUgaGFkIGFscmVhZHkgZG9uZSBzdG9w
QWxsb2NhdGluZygpIGJlZm9yZS4KICAgICAgICAgQVNTRVJUKGZyZWVMaXN0LmFsbG9jYXRpb25X
aWxsRmFpbCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKKyAgICBpZiAoZmFsc2Up
CisgICAgICAgIGRhdGFMb2coIkZyZWUgbGlzdDogIiwgZnJlZUxpc3QsICJcbiIpOworICAgIAog
ICAgIC8vIFJvbGwgYmFjayB0byBhIGNvaGVyZW50IHN0YXRlIGZvciBIZWFwIGludHJvc3BlY3Rp
b24uIENlbGxzIG5ld2x5CiAgICAgLy8gYWxsb2NhdGVkIGZyb20gb3VyIGZyZWUgbGlzdCBhcmUg
bm90IGN1cnJlbnRseSBtYXJrZWQsIHNvIHdlIG5lZWQgYW5vdGhlcgogICAgIC8vIHdheSB0byB0
ZWxsIHdoYXQncyBsaXZlIHZzIGRlYWQuIApAQCAtMjc5LDEyICsyOTcsMTcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xl
YXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3Bh
Y2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKIAotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVu
Y3RvciBmdW5jdG9yKHRoaXMpOwotICAgIGZvckVhY2hDZWxsKGZ1bmN0b3IpOworICAgIGZvckVh
Y2hDZWxsKAorICAgICAgICBbJl0gKEhlYXBDZWxsKiBjZWxsLCBIZWFwQ2VsbDo6S2luZCkgLT4g
SXRlcmF0aW9uU3RhdHVzIHsKKyAgICAgICAgICAgIHNldE5ld2x5QWxsb2NhdGVkKGNlbGwpOwor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OwogCiAgICAgZm9yRWFjaEZyZWVDZWxsKAogICAgICAgICBmcmVlTGlzdCwKICAgICAgICAgWyZd
IChIZWFwQ2VsbCogY2VsbCkgeworICAgICAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRlcihjZWxsKSwgIlxuIik7CiAgICAg
ICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24p
CiAgICAgICAgICAgICAgICAgY2VsbC0+emFwKCk7CiAgICAgICAgICAgICBjbGVhck5ld2x5QWxs
b2NhdGVkKGNlbGwpOwpAQCAtMzA3LDEwICszMzAsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpsYXN0Q2hhbmNlVG9GaQogCiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1
bWVBbGxvY2F0aW5nKCkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coUmF3UG9p
bnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyFcbiIp
OwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICBBU1NF
UlQoIWlzRnJlZUxpc3RlZCgpKTsKIAogICAgIGlmICghaGFzQW55TmV3bHlBbGxvY2F0ZWQoKSkg
eworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJUaGVyZSBhaW4ndCBu
byBuZXdseSBhbGxvY2F0ZWQuXG4iKTsKICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYWQgYWxy
ZWFkeSBleGhhdXN0ZWQgdGhlIGJsb2NrIHdoZW4gd2Ugc3RvcHBlZCBhbGxvY2F0aW9uLgogICAg
ICAgICByZXR1cm4gRnJlZUxpc3QoKTsKICAgICB9CkBAIC0zNTQsNiArMzgxLDggQEAgdm9pZCBN
YXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgIAogICAgIGlmIChoYW5kbGUo
KS5hbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQoJmhhbmRsZSgpKQogICAgICAgICB8fCAhbWFya3ND
b252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobWFya2luZ1ZlcnNpb24pKSB7CisgICAgICAgIGlm
IChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQ2xlYXJp
bmcgbWFya3Mgd2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLlxuIik7CiAgICAgICAgIC8vIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBibG9jayBpcyBmdWxsIGFuZCBpcyBhbHJlYWR5IHJlY29n
bml6ZWQgYXMgc3VjaCwgb3IgdGhhdCB0aGUKICAgICAgICAgLy8gYmxvY2sgZGlkIG5vdCBzdXJ2
aXZlIHRoZSBwcmV2aW91cyBHQy4gU28sIHdlIGNhbiBjbGVhciBtYXJrIGJpdHMgdGhlIG9sZCBm
YXNoaW9uZWQKICAgICAgICAgLy8gd2F5LiBOb3RlIHRoYXQgaXQncyBwb3NzaWJsZSBmb3Igc3Vj
aCBhIGJsb2NrIHRvIGhhdmUgbmV3bHlBbGxvY2F0ZWQgd2l0aCBhbiB1cC10by0KQEAgLTM2Miw2
ICszOTEsOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAg
ICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFsbG9jYXRlZC4KICAgICAgICAgbV9tYXJrcy5jbGVh
ckFsbCgpOwogICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRh
dGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxuIik7CiAgICAgICAgIEhl
YXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IHNwYWNlKCktPm5ld2x5QWxsb2NhdGVk
VmVyc2lvbigpOwogICAgICAgICBpZiAoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb24g
PT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CiAgICAgICAgICAgICAvLyBNZXJnZSB0aGUgY29u
dGVudHMgb2YgbWFya2VkIGludG8gbmV3bHlBbGxvY2F0ZWQuIElmIHdlIGdldCB0aGUgZnVsbCBz
ZXQgb2YgYml0cwpAQCAtNDI5LDcgKzQ2MCw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6
ZGlkQ29uc3VtZUZyZWUKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAgICBBU1NFUlQoaXNG
cmVlTGlzdGVkKCkpOwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7Ci0gICAgYWxsb2NhdG9y
KCktPnNldElzQWxsb2NhdGVkKHRoaXMsIHRydWUpOworICAgIGFsbG9jYXRvcigpLT5hdG9taWNT
ZXRBbmRDaGVja0lzQWxsb2NhdGVkKHRoaXMsIHRydWUpOwogfQogCiBzaXplX3QgTWFya2VkQmxv
Y2s6Om1hcmtDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwzMCArMTkwLDMyIEBAIHB1YmxpYzoK
ICAgICBwcml2YXRlOgogICAgICAgICBIYW5kbGUoSGVhcCYsIHZvaWQqKTsKICAgICAgICAgCi0g
ICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZT4KKyAgICAgICAgZW51bSBTd2VlcERlc3Ry
dWN0aW9uTW9kZSB7IEJsb2NrSGFzTm9EZXN0cnVjdG9ycywgQmxvY2tIYXNEZXN0cnVjdG9ycywg
QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZyB9OworICAgICAgICAKKyAg
ICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVjdGlvbk1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3
ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgZW51bSBTY3JpYmJsZU1vZGUgeyBEb250U2NyaWJibGUsIFNjcmli
YmxlIH07CiAgICAgICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlLCBT
Y3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3Jp
YmJsZU1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0RW1wdHlNb2RlKFN3
ZWVwTW9kZSA9IFN3ZWVwT25seSk7CiAgICAgICAgICAgICAKICAgICAgICAgZW51bSBFbXB0eU1v
ZGUgeyBJc0VtcHR5LCBOb3RFbXB0eSB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1w
dHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8
RW1wdHlNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBG
cmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSA9IFN3
ZWVwT25seSk7CiAgICAgICAgIAogICAgICAgICBlbnVtIE5ld2x5QWxsb2NhdGVkTW9kZSB7IEhh
c05ld2x5QWxsb2NhdGVkLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkIH07CiAgICAgICAgIAot
ICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2Rl
LCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBE
ZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAg
ICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9u
bHkpOwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERl
c3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CisgICAgICAg
IHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2Ny
aWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CiAgICAgICAgIEZyZWVMaXN0IHN3ZWVwSGVs
cGVyU2VsZWN0TWFya3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBlbnVtIE1hcmtzTW9kZSB7
IE1hcmtzU3RhbGUsIE1hcmtzTm90U3RhbGUgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRl
PEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwg
U3dlZXBNb2RlLCBTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9j
YXRlZE1vZGUsIE1hcmtzTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3BlY2lhbGl6ZWRTd2VlcCgp
OwogICAgICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQxMiw3ICs0MTIsNiBAQCB2b2lkIE1hcmtlZFNwYWNlOjpwcmVwYXJlRm9y
TWFya2luZygpCiAKIHZvaWQgTWFya2VkU3BhY2U6OnJlc3VtZUFsbG9jYXRpbmcoKQogewotICAg
IEFTU0VSVChpc0l0ZXJhdGluZygpKTsKICAgICBmb3JFYWNoQWxsb2NhdG9yKAogICAgICAgICBb
Jl0gKE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yKSAtPiBJdGVyYXRpb25TdGF0dXMgewogICAg
ICAgICAgICAgYWxsb2NhdG9yLnJlc3VtZUFsbG9jYXRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNl
bmRpZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1fc3Rh
Y2soKQotICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAg
ICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJ
blBhcmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6
OmluaXRpYWxWZXJzaW9uKQpAQCAtOTEsNyArODksNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0
b3IoSGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgY2xl
YXJNYXJrU3RhY2soKTsKKyAgICBjbGVhck1hcmtTdGFja3MoKTsKIH0KIAogdm9pZCBTbG90Vmlz
aXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAgLTEwOSwxNiArMTA3LDE3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNW
aXNpdGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAw
OwogICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1
cnJlbnRDZWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFy
TWFya1N0YWNrcygpCiB7Ci0gICAgbV9zdGFjay5jbGVhcigpOworICAgIG1fY29sbGVjdG9yU3Rh
Y2suY2xlYXIoKTsKKyAgICBtX211dGF0b3JTdGFjay5jbGVhcigpOwogfQogCiB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAt
MTQ4LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNDZWxs
LT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAgICAganNDZWxsLT5zZXRD
ZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKIAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhq
c0NlbGwpOwogICAgICAgICByZXR1cm47CkBAIC0yMTAsNyArMjA5LDcgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9i
amVjdCBpcyBncmV5IGFuZCB0aGF0OgogICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzog
aXQncyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8g
SW4gY2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1l
IGdyZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNl
dENlbGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShD
ZWxsU3RhdGU6OkdyZXkpOwogICAgIAogICAgIGFwcGVuZFRvTWFya1N0YWNrKGNvbnRhaW5lciwg
Y2VsbCk7CiB9CkBAIC0yMjgsMTYgKzIyNywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5
KGNlbGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxs
LT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkg
PT0gQ2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0g
Q2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAg
IAotICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMg
dGhlc2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0
IHdvbid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0
Q291bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKICAg
ICAKLSAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVu
ZChjZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNr
KGNvbnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX211dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7
CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkK
QEAgLTI5NCwxMiArMjk2LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlz
aXRDaGkKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRo
aXMsIGNlbGwpOwogICAgIAotICAgIG1fb2xkQ2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7
CisgICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFMb2coIlZpc2l0aW5nICIsIFJhd1BvaW50
ZXIoY2VsbCkpOworICAgICAgICBpZiAobV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAg
ICAgICAgZGF0YUxvZygiIChtdXRhdG9yKSIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAg
IH0KICAgICAKLSAgICAvLyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBj
YW5ub3QgY2hhbmdlIHJpZ2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8g
dmlzaXRlZCBieSBvbmUgbWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1h
cmtpbmcgd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMg
YWxyZWFkeSBncmV5LgotICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9s
ZEdyZXkgfHwgbV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBG
dW5ueSBzdG9yeTogaXQncyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJl
YWR5LCBpZiB3ZSBiYXJyaWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0
aW1lIHRoYXQgaXQncyBtYXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBl
ci1yYXJlIHJhY2UuIEl0J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBi
ZSBjb3JyZWN0IG9yIHByb2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxy
ZWFkeQorICAgIC8vIGJsYWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3Rh
dGU6OkFudGhyYWNpdGVPckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzMzLDIzIEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYg
KFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2Vs
bFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdN
dXRhdG9yU3RhY2spCiAgICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5v
ZGUoY29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAg
ICAvLyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBj
b25zZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9m
aXRhYmxlLgogCiAgICAgLy8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBk
ZWFkIGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIp
CisgICAgaWYgKGZyb20uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYg
dGhlcmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRp
dmUgYW5kIGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJs
ZS4KLSAgICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8u
c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9u
IHRoZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1
MiwyNiArMzU5LDQzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFk
IHdpbGwgZ28gaWRsZSBzb29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNl
bGxzVG8obV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxs
c1RvKHRvKTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlB
bGwoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6
ZG9uYXRlS25vd25QYXJhbGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxl
Y3RvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25h
dGVLbm93blBhcmFsbGVsKG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1h
cmtTdGFjayk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGlt
ZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxl
ICghbV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fu
c0JldHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3du
LS07KQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7Cisg
ICAgd2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNr
LmlzRW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2Nv
bGxlY3RvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5y
ZWZpbGwoKTsKKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVt
YmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVM
YXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9j
b2xsZWN0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0
b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgp
OworICAgICAgICAgICAgLy8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBv
YmplY3RzIGJlY2F1c2Ugb2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAg
ICAvLyBtYXJraW5nLiBNYXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4g
VGhlIGJhcnJpZXIgd2lsbCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0
aW1lcywgYW5kIGFsd2F5cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAg
ICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJh
bGFuY2UoKTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykK
KyAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3Qo
KSk7CisgICAgICAgIH0KICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAg
ICAKICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90Vmlz
aXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitT
bG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJl
ZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQx
Niw2MCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAg
ICAgICAgICAgLy8gV2FpdCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3Ig
dW50aWwgdGhlcmUgaXMgc29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRv
LgogICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNo
YXJlZERyYWluUmVzdWx0OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFy
a1N0YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3No
YXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8g
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAvLyBJcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAg
ICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxv
Y2spOworICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUud2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBT
bGF2ZURyYWluKTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0Owog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWlu
YXRpb24/IElmIHNvLCBsZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICgh
bV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29u
ZGl0aW9uVmFyaWFibGUud2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAg
ICAgICAgICAgICAgICAgICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhp
c10gewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5t
X3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4g
ZnJvbSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAg
ICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQ
YXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVD
ZWxsc0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtT
dGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAg
ICAgIG1fbXV0YXRvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAq
bV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5n
UGFyYWxsZWxNYXJrZXJzKTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFy
YWxsZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAg
ICAgICAgZHJhaW4odGltZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDg5LDYgQEAgdm9p
ZCBTbG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6
Y29udGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lz
SW5QYXJhbGxlbE1vZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAg
ICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00
NjcsMTMgKzUwMiw2IEBAIFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QK
ICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVS
b290Q291bnQoKQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NF
UlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVS
b290cy5zaXplKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5l
Y2Vzc2FyeSgpCiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1
ICs1MjUsMTQgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBh
cmFsbGVsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQg
U2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAg
ICBkb25hdGUoKTsKLSAgICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lk
IFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVl
Um9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJv
b3RzIGFyZSBub24tZW1wdHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290
IDogbV9vcGFxdWVSb290cykKQEAgLTUyNiwxMCArNTUzLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmlu
YWxpemVycy5yZW1vdmVOZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZv
aWQgU2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRv
cjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxs
KiBjZWxsIDogbWFya1N0YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAg
IG91dC5wcmludCgiQ29sbGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtT
dGFjaygpKSwgIl0sIE11dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFj
aygpKSwgIl0iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5o
IgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGlt
ZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAg
IFNsb3RWaXNpdG9yKEhlYXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFj
a0FycmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIG1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1h
cmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0
YWNrOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBt
X211dGF0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJr
U3RhY2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFy
a1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JT
dGFjazsgfQorICAgIAogICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0Owog
ICAgIEhlYXAqIGhlYXAoKSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJp
U3RhdGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBv
cGFxdWVSb290Q291bnQoKTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2su
aXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFj
ay5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRp
ZFN0YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0
YWNrKCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zp
c2l0ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRl
c0NvcGllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3Qgdmlz
aXRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25h
dGUoKTsKLSAgICB2b2lkIGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAg
IHZvaWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5p
dHkoKSk7CisgICAgdm9pZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBN
b25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9k
ZSB7IFNsYXZlRHJhaW4sIE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQo
U2hhcmVkRHJhaW5Nb2RlKTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9u
ZSwgVGltZWRPdXQgfTsKKyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hh
cmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZp
bml0eSgpKTsKIAogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVi
bGljOgogICAgIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV9tYXJraW5nVmVyc2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNl
c3NhcnkoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxl
cjsKICAgICAKQEAgLTE0MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQ29udGFpbmVyVHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5l
clR5cGUmLCBKU0NlbGwqKTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFj
ayhjb25zdCBKU0NlbGwqKTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChI
ZWFwQ2VsbCopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVS
b290cygpOwotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9p
ZCBtZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRy
ZW4oY29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7
CisgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJr
U3RhY2tBcnJheSYgdG8pOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJr
U3RhY2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRv
clN0YWNrOwogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmlu
ZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgog
ICAgIAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGll
ZDsKICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2Rl
OwogICAgIApAQCAtMTY1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RC
dWlsZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBt
X2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsK
KyAgICBib29sIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSwxMyArMTA1LDE1IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlv
bmEKIAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChz
aXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29s
ZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisg
ICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4
dGVybmFsTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lz
VmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1v
cnlWaXNpdGVkKHNpemUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAxLDcgKzQwMSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1
cmUKICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAg
ICAgICAgIGNvcnJlY3RTdHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJl
Y3RJbmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1
Y3R1cmVQdHItPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5n
VHlwZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBK
U0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1
cmVQdHItPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJv
cnRXaXRoUmVhc29uKEFISW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRl
eGluZ1R5cGUubGluaygmaml0KTsKIApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgQXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICB9CiAjZWxzZQogICAgIC8vIERvIGEgMzIt
Yml0IHdpZGUgc3RvcmUgdG8gaW5pdGlhbGl6ZSB0aGUgY2VsbCdzIGZpZWxkcy4KLSAgICBqaXQu
c3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5vYmplY3RJbml0aWFsaXphdGlvbkJs
b2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
T2Zmc2V0KCkpKTsKKyAgICBqaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5v
YmplY3RJbml0aWFsaXphdGlvbkJsb2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3Qs
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSk7CiAgICAgaml0LnN0b3JlUHRy
KHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4
ICsxMzE4LDggQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KHNjcmF0Y2gsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2Vsc2UK
ICAgICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbmZvIGZsYWdzIHVzaW5nIGEgc2luZ2xlIDMyLWJp
dCB3aWRlIGxvYWQgYW5kIHN0b3JlLgotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVz
dCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgICAgICBsb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2gs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSk7CiAKICAgICAgICAgLy8gU3RvcmUgdGhlIFN0cnVjdHVyZUlECiAgICAgICAg
IHN0b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkBAIC0xNTg5LDYgKzE1ODksMjggQEAgcHVibGljOgog
ICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2NyYXRj
aEdQUjIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0
OjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRJbml0aWFs
aXplSW5saW5lU3RvcmFnZShHUFJSZWcgYmFzZUdQUiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FwYWNpdHk7
ICsraSkKKyAgICAgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKEpTVmFsdWUoKSwgQWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOworICAgIH0KKworICAgIHZvaWQgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAg
ICAgICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDMyKFplcm8sIGlubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigx
KSwgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlKCks
IEJhc2VJbmRleChiYXNlR1BSLCBpbmxpbmVDYXBhY2l0eSwgVGltZXNFaWdodCwgSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSk7CisgICAgICAgIGJyYW5jaFRlc3QzMihOb25aZXJv
LCBpbmxpbmVDYXBhY2l0eSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICBlbXB0eS5saW5r
KHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdl
KEdQUlJlZyBidXR0ZXJmbHlHUFIsIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dE9mTGluZUNhcGFjaXR5OyArK2kp
CisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlKCksIEFkZHJlc3MoYnV0dGVy
Zmx5R1BSLCAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIChpICsgMSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSk7CisgICAgfQogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIHdhbmdz
SW50NjRIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRl
VwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZM
YXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7CisgICAgbG9hZDgo
QWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIGluZGV4
aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZv
ckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhp
bmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjAxLDggKzIyMDEsMTAgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRl
QgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKIAogICAgIEFT
U0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQnV0
dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0
aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5V2l0aG91dENo
YW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2Jq
ZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFsT3V0T2ZMaW5l
Q2FwYWNpdHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgb2JqZWN0LT5zZXRC
dXR0ZXJmbHkodm0sIHJlc3VsdCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjIxMSw4ICsy
MjEzLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKIAotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93T3V0T2ZMaW5l
U3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgbmV3
U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
dm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmFsbG9jYXRlTW9y
ZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCksIG5ld1NpemUpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgb2JqZWN0
LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCiAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgICAgICAg
ICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJ
bnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1QxKTsKICAgICAg
ICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpA
QCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3Ry
dWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3Rh
bnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwogICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0V3JpdGVC
YXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmlu
aXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8
fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVj
YXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3Rh
dGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdp
c2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9u
WzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0
YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNo
cG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTE1NywxMSArMTE1NywxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3RyCiAgICAgaW50IGluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1l
bnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNiArMTc4LDE1IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0m
IHZtKQogICAgIFNUQVRJQ19BU1NFUlQoRXZhbENvZGUgPT0gMSk7CiAgICAgU1RBVElDX0FTU0VS
VChGdW5jdGlvbkNvZGUgPT0gMik7CiAgICAgU1RBVElDX0FTU0VSVChNb2R1bGVDb2RlID09IDMp
OworICAgIAorICAgIFNUQVRJQ19BU1NFUlQoSXNBcnJheSA9PSAweDAxKTsKKyAgICBTVEFUSUNf
QVNTRVJUKEluZGV4aW5nU2hhcGVNYXNrID09IDB4MEUpOworICAgIFNUQVRJQ19BU1NFUlQoTm9J
bmRleGluZ1NoYXBlID09IDB4MDApOworICAgIFNUQVRJQ19BU1NFUlQoSW50MzJTaGFwZSA9PSAw
eDA0KTsKKyAgICBTVEFUSUNfQVNTRVJUKERvdWJsZVNoYXBlID09IDB4MDYpOworICAgIFNUQVRJ
Q19BU1NFUlQoQ29udGlndW91c1NoYXBlID09IDB4MDgpOworICAgIFNUQVRJQ19BU1NFUlQoQXJy
YXlTdG9yYWdlU2hhcGUgPT0gMHgwQSk7CisgICAgU1RBVElDX0FTU0VSVChTbG93UHV0QXJyYXlT
dG9yYWdlU2hhcGUgPT0gMHgwQyk7CiAKICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PHB0
cmRpZmZfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2VsbD4qPigweDQwMDAp
LT5zbG90KCkpKSAtIDB4NDAwMCkpOwogICAgIHN0YXRpY19hc3NlcnQoUHV0QnlJZFByaW1hcnlU
eXBlTWFzayA9PSAweDYsICJMTEludCBhc3N1bWVzIFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgaXMg
PT0gMHg2Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTE1MDUsNiArMTUwNSw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgogLm9wR2V0QnlW
YWxPdXRPZkJvdW5kczoKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MCkKICAgICBzdG9y
ZWIgMSwgQXJyYXlQcm9maWxlOjptX291dE9mQm91bmRzW3QwXQorICAgIGptcCAub3BHZXRCeVZh
bFNsb3cKIAogLm9wR2V0QnlWYWxOb3RJbmRleGVkU3RvcmFnZToKICAgICAjIEZpcnN0IGxldHMg
Y2hlY2sgaWYgd2UgZXZlbiBoYXZlIGEgdHlwZWQgYXJyYXkuIFRoaXMgbGV0cyB1cyBkbyBzb21l
IGJvaWxlcnBsYXRlIHVwIGZyb250LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzMsMTQgKzMzMywxNCBAQCBlbHNlCiBlbmQKIAogIyBDb25zdGFudCBm
b3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgotY29uc3QgSXNBcnJheSAgICAgICAgICAg
ICAgICAgID0gMQotY29uc3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMzAKLWNvbnN0IE5v
SW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDAKLWNvbnN0IEludDMyU2hhcGUgICAgICAgICAgICAg
ICA9IDIwCi1jb25zdCBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAyMgotY29uc3QgQ29udGln
dW91c1NoYXBlICAgICAgICAgID0gMjYKLWNvbnN0IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9
IDI4Ci1jb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAorY29uc3QgSXNBcnJheSAg
ICAgICAgICAgICAgICAgID0gMHgwMQorY29uc3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0g
MHgwRQorY29uc3QgTm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMAorY29uc3QgSW50MzJT
aGFwZSAgICAgICAgICAgICAgID0gMHgwNAorY29uc3QgRG91YmxlU2hhcGUgICAgICAgICAgICAg
ID0gMHgwNgorY29uc3QgQ29udGlndW91c1NoYXBlICAgICAgICAgID0gMHgwOAorY29uc3QgQXJy
YXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQQorY29uc3QgU2xvd1B1dEFycmF5U3RvcmFnZVNo
YXBlID0gMHgwQwogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlwZSA9IDYKQEAg
LTg4Nyw3ICs4ODcsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4aW5nVHlwZSwg
CiAgICAgY29uc3QgaW5kZXhpbmdUeXBlID0gY2VsbEFuZEluZGV4aW5nVHlwZSAKICAgICBsb2Fk
aSBKU0NlbGw6Om1fc3RydWN0dXJlSURbY2VsbF0sIHNjcmF0Y2gKICAgICBzdG9yZWkgc2NyYXRj
aCwgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlSURbcHJvZmlsZV0KLSAgICBsb2Fk
YiBKU0NlbGw6Om1faW5kZXhpbmdUeXBlW2NlbGxdLCBpbmRleGluZ1R5cGUKKyAgICBsb2FkYiBK
U0NlbGw6Om1faW5kZXhpbmdUeXBlQW5kTWlzY1tjZWxsXSwgaW5kZXhpbmdUeXBlCiBlbmQKIAog
bWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJm
bHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgaW5saW5lIEJ1dHRl
cmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIAogICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICAqcmVzdWx0LT5p
bmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgbWVtc2V0KHJlc3VsdC0+cHJv
cGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCAwLCBwcm9wZXJ0eUNhcGFjaXR5ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTA1
LDYgKzEwNiwxMCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZU9yR3JvCiAg
ICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFjaXR5LAog
ICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBh
Y2l0eSwKICAgICAgICAgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHksIGhhc0luZGV4
aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIG1lbXNldCgKKyAg
ICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG5ld1Byb3BlcnR5Q2FwYWNpdHksCisg
ICAgICAgIDAsCisgICAgICAgIChuZXdQcm9wZXJ0eUNhcGFjaXR5IC0gb2xkUHJvcGVydHlDYXBh
Y2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRK
SVRMb2NrLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDE1ICs5NCw3IEBA
IHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQog
ICAgIERlZmVyR0MgbV9kZWZlckdDOwotI2Vsc2UKLSAgICBzdHJ1Y3QgTm9EZWZlciB7Ci0gICAg
ICAgIE5vRGVmZXIoSGVhcCYgaGVhcCkgOiBtX2hlYXAoaGVhcCkgeyB9Ci0gICAgICAgIEhlYXAm
IG1faGVhcDsKLSAgICB9OwotICAgIE5vRGVmZXIgbV9kZWZlckdDOwotI2VuZGlmCiB9OwogCiBj
bGFzcyBDb25jdXJyZW50SklUTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKSVRMb2NrZXJCYXNl
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMTEgKzY2LDEzIEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Z2V0T3du
UHJvcGUKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmplY3QpOwogICAg
IAogICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0g
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVjdC0+Z2V0SW5k
ZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iamVjdC0+
Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBOb25lLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBpbmRl
eCwgc2xvdCk7CisgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0xMjksNyArMTMxLDcgQEAgYm9vbCBHZW5lcmlj
QXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KAogewogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8VHlwZSo+KGNlbGwpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0KKyAgICAKICAg
ICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewogICAgICAg
ICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhp
bmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5k
ZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYgdWludDhfdCBJbmRleGluZ1R5
cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAgICAgICAgICA9
IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBzdG9yYWdlLgot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAweDBF
Owotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAw
eDAwOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAg
PSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3RhdGljIGNvbnN0IEluZGV4aW5n
VHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owotc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2Owotc3RhdGljIGNvbnN0IElu
ZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Owotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBOwotc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBDOworc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgICAgICAgID0gMHgw
RTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgICAg
ICAgICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAg
ICAgICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgorc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgICAgICAgID0gMHgw
NDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAg
ICAgICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0
b3JhZ2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEM7CiAKLXN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgID0gNzsKK3N0YXRpYyBjb25z
dCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgICAgICAgICA9IDE7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICAgICAgICAgPSA3
OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9yeSBvZiB0aGUg
dHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlvdSBhc2sgZm9y
IHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRleGVk
QWNjZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhhdmVJbmRl
eGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUgSW5kZXhpbmdUeXBlIGZpZWxk
IG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CitzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAweDQwOwogCiAv
LyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA7CkBAIC0xNzcsNCArMTgy
LDYgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzIAogLy8gTWFzayBv
ZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgogc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJheVR5cGVzIHwg
TWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTxJbmRleGlu
Z1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQ+
IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93
Q2FzZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxl
bmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAgIHNldEJ1dHRlcmZseVdpdGhv
dXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwxNSBAQCBib29sIEpTQXJyYXk6
OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVlZCB0byBoYXZlIEdDIGRlZmVy
cmVkIGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwgc2luY2UgdGhhdCBsZWF2ZXMg
dGhlIGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFydHMgb2YgaXQg
d2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBpbiBoZXJlLgog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBKU0NlbGw6OkludGVybmFsTG9ja2Vy
IGxvY2tlcih0aGlzKTsKICAgICAKICAgICBpZiAobW92ZUZyb250ICYmIHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID49IGNvdW50KSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gc3Rv
cmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsKICAgICAgICAg
c3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2Ut
Pm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgo
dmVjdG9yTGVuZ3RoICsgY291bnQpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdp
bmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICB9IGVs
c2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQogICAg
ICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOwogICAg
IGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKHZtLCBkZWZlckdDLCBtb3ZlRnJvbnQsIGNv
dW50KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50V2l0
aEFycmF5U3RvcmEKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQog
ICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5kZXhdLmNsZWFyKCk7CisgICAgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwzMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1Byb3h5KCkgY29uc3Q7CiAgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25z
dDsKICAgICBib29sIGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7CisgICAgCisgICAgLy8gRWFj
aCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2suIEN1cnJlbnRseSBpdCdzIHNpbXBseSBhdmFpbGFi
bGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4gSXQncworICAgIC8vIGEgZnVsbC1ibG93biBXVEY6
OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxvY2sgaXMgY3VycmVudGx5IHVzZWQgaW4gSlNBcnJheSBh
bmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRlcmluZyB3aXRoIHRoZSBTdHJ1Y3R1cmUgbG9jayBp
cyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0LgorICAgIHZv
aWQgbG9ja0ludGVybmFsTG9jaygpOworICAgIHZvaWQgdW5sb2NrSW50ZXJuYWxMb2NrKCk7Cisg
ICAgCisgICAgY2xhc3MgSW50ZXJuYWxMb2NrZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgSW50
ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxsKQorICAgICAgICAgICAgOiBtX2NlbGwoY2VsbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9jZWxsLT5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIH5JbnRlcm5hbExvY2tlcigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDZWxsKiBtX2NlbGw7CisgICAgfTsKIAogICAgIEpT
VHlwZSB0eXBlKCkgY29uc3Q7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2Mo
KSBjb25zdDsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Q7CiAgICAgU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUlEOyB9CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE2Nyw2ICsxOTEsMTYgQEAgcHVi
bGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxTdGF0
ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRhKSBjb25zdCB7
IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRlID0gZGF0YTsgfQorICAgIAor
ICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4ZWQoQ2VsbFN0
YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1cm4g
V1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9jZWxsU3RhdGUsIG9sZFN0
YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0YXRlIGF0b21pY0NvbXBhcmVFeGNo
YW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVN0cm9u
ZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpAQCAtMTgzLDkgKzIxNywxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3R5cGUp
OwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAg
ICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIHVzZSBhIENBUyBsb29wLCBz
aW5jZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQgdXNpbmcgQ0FTCisgICAgLy8gZnJvbSBvdGhlciB0
aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwgbG9jay4gT25lIGV4Y2VwdGlvbjogeW91IGRvbid0
IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAgICAvLyBvYmplY3QgaGFzIG5vdCBlc2NhcGVkIHlldC4K
KyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlKTsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhpbmdUeXBlQW5k
TWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxsU3RhdGVPZmZzZXQoKQpA
QCAtMjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci0gICAgSW5kZXhp
bmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZUFu
ZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgQ0FTLgogICAgIEpT
VHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBtX2ZsYWdzOwogICAg
IENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlu
bGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9z
dHJ1Y3R1cmVJRChzdHJ1Y3R1cmUtPmlkKCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkpCiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8o
KS5pbmxpbmVUeXBlRmxhZ3MoKSkKICAgICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hp
dGUpCkBAIC01Nyw2ICs1Nyw5IEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChWTSYsIFN0cnVjdHVy
ZSogc3QKIAogaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Cisg
ICAgLy8gVGhpcyBvYmplY3QgaXMgcmVhZHkgdG8gYmUgZXNjYXBlZCBzbyB0aGUgY29uY3VycmVu
dCBHQyBtYXkgc2VlIGl0IGF0IGFueSB0aW1lLiBXZSBoYXZlCisgICAgLy8gdG8gbWFrZSBzdXJl
IHRoYXQgbm9uZSBvZiBvdXIgc3RvcmVzIHNpbmsgYmVsb3cgaGVyZS4KKyAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQogICAgIEFTU0VSVCh2bS5p
c0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICB2bS5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFz
cygwKTsKQEAgLTc0LDcgKzc3LDcgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVhdGlv
bihWTSYgdgogICAgIGlmIChzdHJ1Y3R1cmUpIHsKICNlbmRpZgogICAgICAgICBtX3N0cnVjdHVy
ZUlEID0gc3RydWN0dXJlLT5pZCgpOwotICAgICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIG1faW5kZXhpbmdUeXBlQW5kTWlzYyA9IHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOwogICAgICAgICBtX3R5cGUgPSBz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwogICAgICAgICBtX2ZsYWdzID0gc3RydWN0dXJl
LT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQpAQCAtOTEsOSArOTQsMTQgQEAgaW5saW5lIEpTVHlwZSBKU0NlbGw6OnR5cGUoKSBjb25zdAog
ICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2lubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbmRleGluZ1R5cGVBbmRN
aXNjOworfQorCiBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9pbmRleGluZ1R5cGU7CisgICAgcmV0dXJuIGluZGV4aW5nVHlw
ZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlwZXM7CiB9CiAKIGlubGluZSBTdHJ1Y3R1cmUqIEpTQ2Vs
bDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTE5NSwxNyArMjAzLDI2IEBAIGlubGluZSBib29sIEpT
Q2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIoKSAKICAgICByZXR1cm4gbV90eXBlID09IEFQSVZhbHVl
V3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNDZWxsOjpzZXRT
dHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkpOwog
ICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCkKICAgICAgICAgfHwgdGhpcy0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkKICAgICAgICAg
fHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0dXJlSURUYWJsZSgpLmdldChzdHJ1Y3R1cmUtPmlk
KCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJhcnJpZXIodGhpcywgc3RydWN0
dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwogICAgIG1fZmxhZ3Mg
PSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAgICAgbV90eXBlID0g
c3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKLSAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5kZXhpbmdUeXBlIG5ld0luZGV4aW5nVHlwZSA9
IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOworICAgIGlmIChtX2lu
ZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5kZXhpbmdUeXBlKSB7CisgICAgICAgIEFTU0VSVCgh
KG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkpOworICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgb2xkVmFsdWUgPSBtX2luZGV4aW5n
VHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgbmV3VmFsdWUgPSAob2xkVmFs
dWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpIHwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAgICAgICBpZiAoV1RGOjphdG9taWNDb21wYXJlRXhj
aGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGluZ1R5cGVBbmRNaXNjLCBvbGRWYWx1ZSwgbmV3VmFs
dWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAKIGlubGluZSBjb25zdCBNZXRo
b2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNvbnN0CkBAIC0yODQsMTEgKzMwMSwyNiBA
QCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0cnVjdG9yKFZNJiB2CiAgICAgaWYgKGlzWmFw
cGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoc3RydWN0dXJlSUQoKSk7Ci0gICAg
aWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkKLSAgICAgICAgc3Ry
dWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7Ci0gICAg
ZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVjdHVyZUlzSW1tb3J0YWwpIHsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCk7
CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25QdHIgZGVzdHJveSA9IGNsYXNz
SW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAgICAgZGVzdHJveSh0aGlzKTsKKyAgICB9
IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Kj4odGhpcyktPmNsYXNz
SW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwogICAgIHphcCgpOwogfQogCitpbmxp
bmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5hbExvY2soKQoreworICAgIEF0b21pYzxJbmRleGlu
Z1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGluZ1R5cGU+Kj4oJm1faW5k
ZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTo6bG9jaygq
bG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKCkKK3sK
KyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdpc2VfY2FzdDxBdG9taWM8SW5k
ZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOworICAgIEluZGV4aW5nVHlwZUxv
Y2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24g
MjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzExMiwyOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KICAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
IC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICAKLSAgICAvLyBNYXJrIHRoZSBhcnJh
eSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CisK
KyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7Cisg
ICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19U
WVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKLSAgICAg
ICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQotICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFw
KTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAg
IC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHByb3RlY3QgQ29udGlndW91cy0+QXJyYXlTdG9yYWdl
IHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQgbWFrZSB0aGF0CisgICAgICAgIC8vIHJhY2Ugd29y
ayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIgbG9ja2Vy
KHRoaXMpOworICAgICAgICBJbmRleGluZ1R5cGUgbmV3VHlwZSA9IHRoaXMtPmluZGV4aW5nVHlw
ZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICAgICAgc3dp
dGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVj
dG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQgQEAgdm9pZCBKU09iamVjdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9i
dXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+
dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
dmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBXZSB3YW50IHRvIGRlZmVuZCBhZ2FpbnN0IG11bHRp
cGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhlIG11dGF0b3I6CisgICAgLy8gLSBNdXRhdG9yIGNv
dWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVyZmx5IGFuZCB0aGVuIGluc3RhbGwgYSBzdHJ1Y3R1
cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8vICAgcHJvcGVydGllcy4gVGhpcyB0cml2aWFsbHkg
d29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIG11dGF0ZSB0aGUgZGljdGlvbmFyeSBzdHJ1
Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBzdHJ1Y3R1cmUgbG9jayBmb3IKKyAgICAvLyAgIGRp
Y3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAvLyAtIFRoZSBidXR0ZXJmbHkgY291bGQgc2hyaW5r
LCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgb2JqZWN0IHdhcyBhIGRpY3Rpb25h
cnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlzIG1lYW5zIHRoYXQgd2Ugd291bGQgZ2V0IHRoZSBk
aWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNxdWlyZSBhIGxvY2suIFRoYXQKKyAgICAvLyAgIHRy
aXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxkIGxvYWQgdGhlIHN0cnVjdHVyZSBiZWZvcmUgdGhl
IG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5CisgICAgLy8gICBhbmQgdGhlbiBsb2FkIHRoZSBi
dXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBXZSBwcm90ZWN0IGFnYWluc3QgdGhpcyBjYXNlIGJ5
IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3RydWN0dXJlIGEgc2Vjb25kIHRpbWUgYmVmb3JlIHNj
YW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMgbWVhbnMgdGhhdCB0aGUgYnV0dGVyZmx5CisgICAg
Ly8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVyZmx5IHRoYXQgdGhlIG11dGF0b3IgaGFkIGluc3Rh
bGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5nIHRoZQorICAgIC8vICAgc3R1cmN0dXJlLiBTbyBp
ZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBhIG5vbi1kaWN0aW9uYXJ5IHRoZW4gdGhlIGJ1dHRl
cmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBoYXZlIGJlZW4gc2hydW5rLgorICAgIFZNJiB2bSA9
IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0
cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkgeworICAgICAgICBzdHJ1Y3R1cmUtPmxv
Y2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwor
ICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5Lmdl
dCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICBpZiAodGhpc09i
amVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1Y3R1cmUtPmlkKCkpCisgICAgICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7Cisg
ICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1Y3R1cmUtPmxvY2soKS51
bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hl
Y2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtW
aW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwxNSArMjM5LDI1IEBAIHZvaWQgSlNGaW5hbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNP
YmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAg
dGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUp
OworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0gc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkKKyAgICAgICAg
c3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIGVsc2UKKyAgICAgICAgV1RGOjpsb2FkTG9h
ZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0
dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAg
IHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJl
KTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNp
emUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
SGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3RvcmFnZVNpemUpOwotCisgICAg
aWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLnVubG9jaygpOwor
ICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRl
ZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsK
ICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmVudGVy
RGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4Qmlh
cyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3Ro
KDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwLnNldCh2
bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
dm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgCiAgICAgcmV0dXJuIG5ld0J1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03MzEsNyArNzc3LDEwIEBAIEJ1dHRlcmZseSogSlNP
YmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJbml0aWFsSW5kZXhlZFN0b3Jh
Z2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5
KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIApAQCAtNzQyLDcgKzc5MSwxMCBAQCBDb250aWd1b3Vz
SlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUlu
dDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAtNzUzLDcgKzgwNSwxMCBAQCBDb250aWd1b3VzRG91
YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0
dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUp
OwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAt
NzY0LDcgKzgxOSwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRp
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0t
OykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0
ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsK
ICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTc5Nyw3ICs4
NTUsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9yYQogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9yYWdlQnV0dGVyZmx5KHZtLCB0
aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBtX2J1dHRlcmZseS5nZXQoKSk7
CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgp
OwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdnZXN0ZWRBcnJheVN0b3JhZ2VU
cmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0
dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTg4MCw3ICs5NDEsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltpXS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNp
dGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIHN0
b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBzdG9yYWdlOwogfQogCkBAIC05MzUsNyArOTk5LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1
cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC05ODEsNyArMTA0OCwxMCBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BCiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVj
dHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAt
MTAwNiw3ICsxMDc2LDIzIEBAIEFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRDb250aWd1
b3UKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0g
ICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2Ut
PmJ1dHRlcmZseSgpKTsKKworICAgIC8vIFRoaXMgaGFzIGEgY3JhenkgcmFjZSB3aXRoIHRoZSBn
YXJiYWdlIGNvbGxlY3Rvci4gV2hlbiBjaGFuZ2luZyB0aGUgYnV0dGVyZmx5IGFuZCBzdHJ1Y3R1
cmUsCisgICAgLy8gdGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhlIHN0cnVjdHVyZSBsYXN0LiBU
aGUgY29sbGVjdG9yIHdpbGwgYWx3YXlzIHJlYWQgdGhlIHN0cnVjdHVyZQorICAgIC8vIGZpcnN0
LiBXZSBwcm9iYWJseSBoYXZlIHRvIGZvbGxvdyB0aGF0IGNvbnZlbnRpb24gaGVyZSBhcyB3ZWxs
LiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvcgorICAgIC8vIHdpbGwgc29tZXRpbWVzIHNl
ZSB0aGUgbmV3IGJ1dHRlcmZseSAodGhlIG9uZSB3aXRoIEFycmF5U3RvcmFnZSkgd2l0aCB0aGUg
b25seSBzdHJ1Y3R1cmUgKHRoZQorICAgIC8vIG9uZSB0aGF0IHNheXMgdGhhdCB0aGUgYnV0dGVy
Zmx5IGlzIENvbnRpZ3VvdXMpLiBXaGVuIHNjYW5uaW5nIENvbnRpZ3VvdXMsIHRoZSBjb2xsZWN0
b3Igd2lsbAorICAgIC8vIG1hcmsgd29yZCBhdCBhZGRyZXNzZXMgZ3JlYXRlciB0aGFuIG9yIGVx
dWFsIHRvIHRoZSBidXR0ZXJmbHkgcG9pbnRlciwgdXAgdG8gdGhlIHB1YmxpY0xlbmd0aAorICAg
IC8vIGluIHRoZSBidXR0ZXJmbHkuIEJ1dCBhbiBBcnJheVN0b3JhZ2UgaGFzIHNvbWUgbm9uLXBv
aW50ZXIgaGVhZGVyIGRhdGEgYXQgbG93IHBvc2l0aXZlCisgICAgLy8gb2Zmc2V0cyBmcm9tIHRo
ZSBidXR0ZXJmbHkgLSBzbyB3aGVuIHRoaXMgcmFjZSBoYXBwZW5zLCB0aGUgY29sbGVjdG9yIHdp
bGwgc3VyZWx5IGNyYXNoCisgICAgLy8gYmVjYXVzZSBpdCB3aWxsIGZhaWwgdG8gZGVjb2RlIHR3
byBjb25zZWN1dGl2ZSBpbnQzMnMgYXMgaWYgaXQgd2FzIGEgSlNWYWx1ZS4KKyAgICAvLworICAg
IC8vIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRoZSBKU0NlbGwgbG9jayBmb3IgdGhpcyBwdXJwb3Nl
IQorICAgIAorICAgIEludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3
U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsxNTU0LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkKLSAgICAgICAg
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2
bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7
CiAKQEAgLTIwMTksNyArMjEwNSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93bkluZGV4ZWRQ
cm9wZXJ0eSgKIAogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7CiAgICAgUkVMRUFTRV9BU1NF
UlQobWFwKTsKLQorICAgIAogICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGgg
cHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1
bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CiAgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJ
bk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwpAQCAtMjcyNSw3ICsyODExLDggQEAgYm9v
bCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAg
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAg
ICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdW
ZWN0b3JMZW5ndGgpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1
cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIApAQCAtMjc0Miw3ICsyODI5LDggQEAgYm9vbCBKU09iamVjdDo6aW5j
cmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+
YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwotICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc2Miw2ICsyODUwLDcgQEAgYm9vbCBKU09iamVj
dDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgIAogICAgIHVuc2lnbmVkIGF2YWlsYWJs
ZU9sZExlbmd0aCA9CiAgICAgICAgIEJ1dHRlcmZseTo6YXZhaWxhYmxlQ29udGlndW91c1ZlY3Rv
ckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5ndGgpOworICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gbnVsbHB0cjsKICAgICBpZiAoYXZhaWxhYmxlT2xkTGVuZ3RoID49
IGxlbmd0aCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgZWxz
ZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGggdGhhdCBjYXVzZWQgaW50ZXJuYWwKICAgICAgICAg
Ly8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlkIG91ciBqb2JzIHJpZ2h0LCB0aGlzIHdvdWxkIG5l
dmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdpbGwgbWVzcwpAQCAtMjc3NiwxNyArMjg2NSwyNCBA
QCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgICAgICAgICBu
ZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICAgICAgaWYgKCFi
dXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1fYnV0dGVyZmx5
LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKKyAgICAgICAgbmV3QnV0dGVyZmx5ID0gYnV0dGVy
Zmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxl
bmd0aCk7Ci0KICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsK
KyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5kZXhpbmdQYXlsb2FkPGRvdWJsZT4oKVtpXSA9IFBO
YU47CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1Bh
eWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+PigpW2ldLmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKG5ld0J1dHRlcmZseSkgeworICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChu
ZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAg
ICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgYnV0dGVyZmx5LT5zZXRW
ZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTI4MDIsMTIgKzI4OTgsMTMgQEAgdm9pZCBKU09iamVjdDo6cmVhbGxvY2F0ZUFuZFNocmlu
a0J1dHRlcgogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSog
bmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnJlc2l6ZUFycmF5KHZtLCB0aGlzLCBz
dHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxlbmd0aCkpOwotICAgIG1fYnV0
dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKICAgICBuZXdCdXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0UHVibGljTGVuZ3Ro
KGxlbmd0aCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBtX2J1dHRlcmZseS5z
ZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7CiB9CiAKLUJ1dHRlcmZseSogSlNPYmplY3Q6Omdy
b3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXpl
KQorQnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZShWTSYg
dm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBBU1NFUlQobmV3U2l6
ZSA+IG9sZFNpemUpOwogCkBAIC0zMDkyLDE1ICszMTg5LDM0IEBAIHZvaWQgSlNPYmplY3Q6OmNv
bnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAgICAgICAgdm0sIFN0cnVjdHVyZTo6dG9DYWNoZWFi
bGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgJmRlZmVycmVkV2F0Y2hw
b2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0
ZW5pbmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUsIHNpemVfdCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlBZnRlckZs
YXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQogewotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7Ci0gICAgc2l6ZV90IHByZUNh
cGFjaXR5ID0gdGhpcy0+YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKTsKLSAgICB2b2lkKiBjdXJyZW50
QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRl
cik7Ci0gICAgdm9pZCogbmV3QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0
T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworICAgIC8vIFRoaXMgY291bGQgaW50ZXJsZWF2ZSB2aXNp
dENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQgc3RydWN0dXJlIGNvdWxkIGhhdmUgYmVlbiBhIG5v
bgorICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBXZSBoYXZlIHRvIGJlIGNyYXp5IGNhcmVm
dWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaG9sZGluZworICAgIC8vIHRoZSBzdHJ1
Y3R1cmUncyBsb2NrIHJpZ2h0IG5vdywgYW5kIHRoYXQgaGVscHMgYSBiaXQuCisgICAgCisgICAg
QnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICBzaXplX3Qg
cHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOworICAg
IGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRleGluZ0hlYWRlcigpOworICAg
IGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkg
PSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNhcGFjaXR5KHN0cnVjdHVyZSk7
CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gb2xkQnV0dGVyZmx5LT5pbmRl
eGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyhzdHJ1Y3R1cmUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAgICAgICAgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCB0aGlzLCBwcmVDYXBhY2l0eSwg
b3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKIAotICAgIG1lbW1vdmUobmV3QmFzZSwgY3VycmVudEJhc2UsIHRoaXMt
PmJ1dHRlcmZseVRvdGFsU2l6ZSgpKTsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUodm0sIEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QmFzZSwgcHJlQ2FwYWNpdHksIG91
dE9mTGluZUNhcGFjaXR5QWZ0ZXIpKTsKKyAgICAvLyBObyBuZWVkIHRvIGNvcHkgdGhlIHByZWNh
cGFjaXR5LgorICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gb2xkQnV0dGVyZmx5LT5iYXNlKDAsIG91
dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQqIG5ld0Jhc2UgPSBuZXdCdXR0ZXJmbHkt
PmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisKKyAgICBtZW1jcHkobmV3QmFzZSwg
Y3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0
ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAg
IAorICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOwogfQogCiB1aW50MzJfdCBKU09iamVjdDo6Z2V0RW51bWVyYWJsZUxlbmd0aChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NywxMSAr
NzQ3LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCk7IH0KICAgICB2b2lk
IHJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhFeGVjU3RhdGUqKTsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6
ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5n
U3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5Kik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQnV0dGVy
Zmx5KiBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNp
emVfdCBuZXdTaXplKTsKICAgICAgICAgCisgICAgdm9pZCBzZXRCdXR0ZXJmbHkoVk0mLCBCdXR0
ZXJmbHkqKTsgLy8gQWx3YXlzIGNoYW5nZSB0aGUgYnV0dGVyZmx5IGJlZm9yZSBjaGFuZ2luZyB0
aGUgc3RydWN0dXJlIQogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7Ci0g
ICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBTdHJ1Y3R1cmUqLCBCdXR0ZXJm
bHkqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29udmVydFRvRGljdGlvbmFyeShW
TSYpOwogCkBAIC03NTksNyArNzU4LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgc3RydWN0
dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0sIHRoaXMpOwogICAgIH0KLSAg
ICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiwgc2l6ZV90IG91dE9mTGlu
ZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9p
ZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFj
aXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0CiAg
ICAgewpAQCAtOTkwLDkgKzk4OSw5IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
TkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xvdyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9vbCBnZXROb25JbmRleFByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIGJv
b2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qo
Vk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBK
U1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwotICAgIHZvaWQgZmlsbEN1c3RvbUdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0
dXJlJik7CisgICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xv
dCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBIYXNoVGFibGVWYWx1ZSog
ZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7CkBAIC0xMTEzLDYgKzEx
MTIsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEpTRmluYWxPYmplY3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBudWxscHRyKQogICAgICAg
ICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkKICAgICB7CisgICAgICAgIG1l
bXNldChpbmxpbmVTdG9yYWdlKCksIDAsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIH0KIH07CiAKQEAgLTEyMDUsMTQgKzEyMDUsNiBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBjb25zCiAgICAgcmV0dXJuIHR5
cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZs
eSogYnV0dGVyZmx5KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIEFTU0VSVCghYnV0
dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUt
Pmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlz
LCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKLX0KLQogaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIyMCw3ICsxMjEyLDcgQEAgaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgogICAgIEpTQ2VsbDo6c2V0U3Ry
dWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJm
bHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5KFZNJiB2bSwgQnV0dGVyZmx5
KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkp
OwogfQpAQCAtMTI3MywxNiArMTI2NSwxNiBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0
UHJvdG90eXBlKFZNCiAKIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEg
UHJvcGVydHlOYW1lIHRoYXQgaXMgYWN0dWFsbHkgYW4gaW5kZXgsCiAvLyBidXQgaWYgc28gd2ls
bCBhbHdheXMgcmV0dXJuIGZhbHNlIChkb2Vzbid0IHNlYXJjaCBpbmRleCBzdG9yYWdlKS4KLUFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0m
IHZtLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Ob25J
bmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0
cmlidXRlczsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmICghaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGlmICghVHlwZUluZm86Omhhc1N0YXRpY1By
b3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICByZXR1cm4gZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KHZtLCBwcm9wZXJ0eU5h
bWUsIHNsb3QpOwogICAgIH0KLQorICAgIAogICAgIC8vIGdldFByb3BlcnR5U2xvdCByZWxpZXMg
b24gdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJuaW5nIGluZGV4IHByb3BlcnRpZXMhCiAgICAgQVNT
RVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwogCkBAIC0xMzA3LDkgKzEyOTksOSBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3Bl
cnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUg
dm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3Qm
IHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0dHJpYnV0ZXMsIGpzQ2FzdDxD
dXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21HZXR0ZXJTZXR0ZXIpLT5nZXR0ZXIoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1LDcgKzEzMTcsNyBAQCBBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKm9iamVjdC0+c3RydWN0
dXJlKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZt
KTsKICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAo
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKQpAQCAt
MTM1MywxMCArMTM0NSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3Bl
cnR5CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5nZXROb25JbmRleFByb3BlcnR5U2xvdChl
eGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChvYmpl
Y3QtPnR5cGUoKSAhPSBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICBTdHJ1Y3R1cmUmIHN0cnVj
dHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+
c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVy
dHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVk
UHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUuaXNPYmplY3QoKSkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBvYmplY3QgPSBhc09iamVjdChwcm90b3R5cGUpOwpAQCAt
MTM4NSwxMzIgKzEzNzcsNiBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0
ZSogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXRlbXBsYXRlPEpTT2JqZWN0OjpQ
dXRNb2RlIG1vZGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVy
bmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQotewotICAgIEFTU0VSVCh2
YWx1ZSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpo
ZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLSAgICBBU1NFUlQoIXBhcnNlSW5kZXgo
cHJvcGVydHlOYW1lKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVj
dHVyZSh2bSk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMp
OwotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAgIGlm
ICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcHV0RGlyZWN0KHZt
LCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3Bl
cnR5KG9mZnNldCk7Ci0gICAgICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywg
b2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChj
dXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vz
c29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKLSAgICAgICAgICAgICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChtb2Rl
ID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmICh0
aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0gICAgICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0
cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMt
PnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwotCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9m
ZnNldCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChv
ZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAg
c2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5z
UmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhp
cy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUoCi0gICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZz
ZXQpOwotICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKLSAgICAgICAgbmV3U3RydWN0dXJlLT53aWxs
U3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNpdGlvbigKLSAgICAgICAgICAgIHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQp
OwotICAgICAgICAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBC
dXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAoY3VycmVu
dENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVudENhcGFj
aXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgICAgIHB1dERpcmVjdCh2
bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zm
c2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY3VycmVu
dEF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7Ci0gICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVy
cmVkVHlwZSk7Ci0gICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgIGlm
ICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFj
ZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUp
KSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKLSAg
ICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0g
UHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNsb3Quc2V0
RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOwotCi0gICAgICAgIGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAo
Y3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nl
c3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKLSAgICAgICAgICAgIHNldFN0
cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNT
dHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFdl
IHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgdG8gZmlyZSBhZnRlciB0
aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKLSAgICAvLyBzdHJ1Y3R1cmUuIFRoaXMgYWxsb3dzIGFk
YXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5ldyBzdHJ1Y3R1cmUgaXMgdGhl
IG9uZQotICAgIC8vIHdlIHdhbnQuCi0gICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKLSAgICAKLSAgICBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKLSAgICAgICAgdm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgp
LCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Ci0gICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVW
YWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBz
bG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgIAotICAgIHZh
bGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc2l6ZV90
IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIHNpemVf
dCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBB
U1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAgIGlmIChvbGRDYXBhY2l0eSA9
PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwot
ICAgIGVsc2UgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxp
bmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkpOwotICAgICAgICBzZXRTdHJ1
Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICB9
Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICBzbG90LnNldE5ld1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAg
ICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CkBAIC0xNTQ5LDI0ICsxNDE1
LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIAogICAgIHJldHVy
biBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAotaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0
cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNl
dHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCi0g
ICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0
cnVjdHVyZSgpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAg
ICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRh
aW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91bGRPcHRpbWl6ZSA9IGZhbHNl
OwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKLX0KLQogQUxXQVlTX0lOTElORSBKU09iamVjdCogUmVnaXN0ZXI6Om9i
amVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFzT2JqZWN0KGpzVmFsdWUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMyArMTA3LDEzIEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhp
czsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFBy
b3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAg
ICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0
LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0
aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgc2xvdCkpCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURU
YWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5t
ZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90Lmlu
dGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpW
TUlucXVpcnkpKQotICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3Rv
dHlwZSgpOworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJu
YWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5x
dWlyeSkpCisgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0
UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGZhbHNlKTsKQEAgLTEzNSwxOCArMTM1LDE4IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6Z2V0Tm9uSW5kZXgKICAgICBKU09iamVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRo
b2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpT
T2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0
dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxlLmdl
dChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAoTElLRUxZKCFUeXBlSW5mbzo6
b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KG9iamVjdC0+aW5saW5lVHlwZUZsYWdzKCkpKSkg
ewogICAgICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3Qodm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUuY2xhc3NJ
bmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+
bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1l
dGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50
ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZN
SW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90
eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5h
bE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBl
KCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQ
cm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwpAQCAtMTU3LDYgKzE1NywzMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OmdldE5vbkluZGV4CiAgICAgfQogfQogCitpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQoreworICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0
dGVyKCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Cisg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOworICAgIHVuc2ln
bmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAg
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAgWyZdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFj
aXR5KSB7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5l
U3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgIGJv
b2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0
b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRP
cHRpbWl6ZSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAg
ICAgICB9KTsKK30KKwogLy8gRUNNQSA4LjYuMi4yCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewpA
QCAtMjA3LDQgKzIzMSwxMzkgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpoYXNPd25Q
cm9wZQogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAordGVtcGxhdGU8SlNP
YmplY3Q6OlB1dE1vZGUgbW9kZT4KK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
QVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShh
dHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOworICAgIEFTU0VSVCghcGFy
c2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewor
ICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRUeXBlcygpKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0
cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAg
ICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVh
ZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBs
YWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0
eSh0aGlzLCBvZmZzZXQpOworCisgICAgICAgICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nv
cikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYgQ3Vz
dG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOworICAgICAg
ICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNh
cGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgICAgICBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgICAgICB2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAgICAgICAgICAgWyZdIChjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KSB7CisgICAgICAg
ICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9IG9sZE91dE9m
TGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IGFsbG9jYXRl
TW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFjaXR5LCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZs
eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9m
ZnNldCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChv
ZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgdGhp
cy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICBz
aXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCisgICAgICAgIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsK
KyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNpdGlv
bigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAKKyAgICAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRl
cmZseSgpOworICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0
aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBhbGxvY2F0ZU1v
cmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHksIG5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwor
ICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhbGlkYXRlT2Zm
c2V0KG9mZnNldCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9w
ZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICBib29sIGhhc0luZmVycmVkVHlwZTsKKyAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmli
dXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
IHsKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3RydWN0
dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGhh
c0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVG
b3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90
LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICB9CisKKyAg
ICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHB1
dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisKKyAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYg
QWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRl
cyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3Nv
cikpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOworICAg
ICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKChtb2RlID09IFB1dE1v
ZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCB0
byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAorICAgIC8vIHN0cnVjdHVyZS4g
VGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2ZSBpZiB0aGUgbmV3IHN0
cnVjdHVyZSBpcyB0aGUgb25lCisgICAgLy8gd2Ugd2FudC4KKyAgICBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOworICAgIAor
ICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAor
ICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwg
c2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICBuZXdTdHJ1Y3R1
cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7
CisgICAgCisgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAgICBBU1NFUlQobmV3U3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKKyAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7CisgICAgaWYg
KG9sZENhcGFjaXR5ICE9IG5ld0NhcGFjaXR5KSB7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5l
d0NhcGFjaXR5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIH0KKyAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgIHNldFN0
cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMs
IG9mZnNldCk7CisgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKKyAgICAgICAgbmV3U3Ry
dWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgdmVyYm9zZVNhbml0
aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUdlbmVy
YXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUNvbmN1
cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VD
b25jdXJyZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGNvbGxl
Y3RDb250aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGZv
cmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
c2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJs
ZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBudWxscHRyKSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1h
cC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
cGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgc3Ry
dWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYQogICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CiB9OwogCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBoYXZlIGEgbG9jayBpbiBpdC4K
IGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwx
MiArNDUsNiBAQAogCiAjZGVmaW5lIERVTVBfU1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MgMAogCi0j
aWZuZGVmIE5ERUJVRwotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAot
I2Vsc2UKLSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLIDAKLSNlbmRpZgot
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIApAQCAtMTYzLDkg
KzE1Nyw5IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RydWN0dXJlLT5wcm9wZXJ0eVRh
YmxlKCkpIHsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5w
cm9wZXJ0eVRhYmxlT3JOdWxsKCkpIHsKICAgICAgICAgICAgICsrbnVtYmVyV2l0aFByb3BlcnR5
TWFwczsKLSAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSBzdHJ1Y3R1cmUtPnBy
b3BlcnR5VGFibGUoKS0+c2l6ZUluTWVtb3J5KCk7CisgICAgICAgICAgICB0b3RhbFByb3BlcnR5
TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0zMDYsNyArMzAwLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TQogICAgIGZvciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkgewogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay5sb2NrKCk7
CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmdl
dCgpOworICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOwog
ICAgICAgICBpZiAodGFibGUpIHsKICAgICAgICAgICAgIC8vIExlYXZlIHRoZSBzdHJ1Y3R1cmUg
bG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRvIHRoaW5ncyB0byBpdCBhdG9taWNhbGx5
CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgbG9zZXMgaXRzIHByb3BlcnR5IHRhYmxlLgpAQCAt
MzIxLDMwICszMTUsMzEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TQogICAgIEFTU0VSVCghdGFibGUpOwogfQogCi12b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcChWTSYgdm0pCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgQVNTRVJUKCFwcm9w
ZXJ0eVRhYmxlKCkpOwotCisgICAgCisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAg
IAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOwogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAogICAgIGZpbmRTdHJ1
Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFi
bGUpOwogICAgIAorICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbnVtYmVyT2ZTbG90c0Zvckxhc3RP
ZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpOwogICAgIGlmICh0YWJsZSkgewotICAg
ICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldCht
X29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5
KHZtLCBjYXBhY2l0eSk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwotICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGFibGUgPSBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0s
IGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBNdXN0IGhvbGQgdGhlIGxvY2sgb24gdGhpcyBzdHJ1
Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMgc3RydWN0dXJlJ3MKICAgICAv
LyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0Q29uY3VycmVudGx5KCkgdG8gc2VlIHRo
ZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAgICAgLy8gc3RhdGUuCiAgICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKLSAgICBpZiAoIXRh
YmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2NrZXIsIHZtLCBudW1iZXJPZlNsb3Rz
Rm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwotICAgIGVsc2UKLSAg
ICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgdGFibGUpOworICAgIGlmIChzZXRQ
cm9wZXJ0eVRhYmxlKQorICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7
CiAKICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0gbV9pbmZlcnJlZFR5cGVUYWJs
ZS5nZXQoKTsKIApAQCAtMzU1LDEwICszNTAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlNYXAoVgogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJl
LT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgaWYgKHR5cGVUYWJsZSAmJiB0eXBl
VGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpKQogICAgICAgICAg
ICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKLSAgICAgICAgcHJvcGVydHlUYWJsZSgp
LT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3RO
b3RDaGFuZ2UpOworICAgICAgICB0YWJsZS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCiAgICAgY2hl
Y2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHJldHVybiB0YWJsZTsKIH0KIAogU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQpAQCAtNDczLDcgKzQ3MCw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW4KICAgICB0cmFuc2l0
aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKICAgICB0cmFuc2l0aW9u
LT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24t
PnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5
VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRh
YmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7
CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRy
YW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkpOwogCkBAIC01MjEsMzYgKzUx
OCwzMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuCiAKIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBlKQogeworICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7CiAKICAgICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5zZXQodm0sIHRyYW5zaXRpb24s
IHByb3RvdHlwZSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgCisgICAgdHJhbnNpdGlv
bi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0cmFu
c2l0aW9uLT5waW4oKTsKLQorICAgIAogICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKLSAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAgICAgCisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2
bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAg
dHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFu
c2l0aW9uLT5waW4oKTsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247
CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpKTsKLSAgICBQ
cm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5nZXQo
cHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVj
dHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwog
ICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwog
CkBAIC01NjEsMTcgKzU1MiwxNSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hh
bmdlVHJhCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiB7CiAgICAgQVNTRVJU
KCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBk
ZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgIHRy
YW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7Ci0gICAgdHJhbnNpdGlvbi0+
cGluKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0SGFzQmVlbkRpY3Rpb25hcnkodHJ1ZSk7Ci0KKyAg
ICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiB9CkBAIC02MDMsMzEgKzU5MiwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKIFByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtKQogewotICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5u
aW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkp
Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPmNvcHkodm0sIHByb3BlcnR5VGFibGUo
KS0+c2l6ZSgpICsgMSk7Ci0gICAgCi0gICAgLy8gSG9sZCB0aGUgbG9jayB3aGlsZSBzdGVhbGlu
ZyB0aGUgdGFibGUgLSBzbyB0aGF0IGdldENvbmN1cnJlbnRseSgpIG9uIGFub3RoZXIgdGhyZWFk
Ci0gICAgLy8gd2lsbCBlaXRoZXIgaGF2ZSB0byBieXBhc3MgdGhpcyBzdHJ1Y3R1cmUsIG9yIHdp
bGwgZ2V0IHRvIHVzZSB0aGUgcHJvcGVydHkgdGFibGUKLSAgICAvLyBiZWZvcmUgaXQgaXMgc3Rv
bGVuLgotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgUHJvcGVy
dHlUYWJsZSogdGFrZW5Qcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAg
IHByb3BlcnR5VGFibGUoKS5jbGVhcigpOwotICAgIHJldHVybiB0YWtlblByb3BlcnR5VGFibGU7
CisgICAgLy8gVGhpcyBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9wZXJ0eSB0YWJsZS4gSXQgY2Fu
J3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gcHJvcGVydHlUYWJs
ZU9yTnVsbCgpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgaWYgKGlzUGlubmVkUHJvcGVy
dHlUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+Y29weSh2bSwgcmVzdWx0LT5z
aXplKCkgKyAxKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOworICAgIHJl
dHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwogfQog
CiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkK
IHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1dGVzKHRyYW5zaXRpb25LaW5k
KTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7Cisg
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGlu
Z1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRp
b25LaW5kKTsKICAgICAKICAgICBpZiAoY2hhbmdlc0luZGV4aW5nVHlwZSh0cmFuc2l0aW9uS2lu
ZCkpIHsKICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1
cmUtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0
LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKSkgewotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSkgeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5vcmlnaW5hbEFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnkp
OworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7CiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjM4LDcg
KzYyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAgICBT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
VGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSkgewogICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFu
c2l0aW9uLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpID09IGF0dHJpYnV0ZXMpOwotICAgICAgICBB
U1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkg
PT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIH0KICAgICAKQEAg
LTY0Niw3ICs2MzMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUp
OwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwot
ICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKKyAg
ICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeShpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAKICAgICBpZiAocHJldmVudHNFeHRlbnNp
b25zKHRyYW5zaXRpb25LaW5kKSkKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0RGlkUHJldmVudEV4
dGVuc2lvbnModHJ1ZSk7CkBAIC02NTcsMzIgKzY0NCwyOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgICAgIC8vIHRhYmxlLCBzaW5jZSBvdXIgbG9naWMg
Zm9yIHdhbGtpbmcgdGhlIHByb3BlcnR5IHRyYW5zaXRpb24gY2hhaW4gdG8gcmVtYXRlcmlhbGl6
ZSB0aGUKICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhvdyB0byB0YWtlIGludG8gYWNj
b3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KICAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZS0+
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+
cGluRm9yQ2FjaGluZyh2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
dm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0
OwotICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKCk7CiAgICAgICAgIAotICAgICAg
ICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpKSB7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogKnRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5nZXQoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2lu
ZCkpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gRG9udERlbGV0ZTsK
LSAgICAgICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXMo
dHJhbnNpdGlvbktpbmQpICYmICEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKLSAgICAg
ICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBSZWFkT25seTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlT3JOdWxsKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRhYmxlKTsKKyAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgeworICAgICAgICAgICAgaWYgKHNldHNEb250RGVsZXRl
T25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkKKyAgICAgICAgICAgICAgICBlbnRyeS5h
dHRyaWJ1dGVzIHw9IERvbnREZWxldGU7CisgICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5T25O
b25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEoZW50cnkuYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRP
bmx5OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRh
YmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7
CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAg
ICAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIH0KICAgICAKICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nl
c3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAgICYmIHRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKQotICAgICAgICAmJiAhdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLT5p
c0VtcHR5KCkpCisgICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCkt
PmlzRW1wdHkoKSkKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0SGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byh0cnVlKTsKICAgICAKICAgICBpZiAoc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CisgICAgICAg
IHRyYW5zaXRpb24tPnBpbih2bSwgdHJhbnNpdGlvbi0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSkp
OwogICAgIGVsc2UgewogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzdHJ1Y3R1
cmUtPm1fbG9jayk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZt
LCB0cmFuc2l0aW9uKTsKQEAgLTY5OCwxMyArNjgyLDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc1Nl
YWxlZChWTSYgdm0pCiAgICAgaWYgKGlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFi
bGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5k
KCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJs
ZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CiAgICAgICAgIGlmICgoaXRlci0+YXR0cmlidXRlcyAmIERvbnREZWxldGUpICE9IERvbnREZWxl
dGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNzE3LDEzICs3MDAsMTIg
QEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2bSkKICAgICBpZiAoaXNTdHJ1Y3R1cmVF
eHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRl
ZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOworICAgIGlmICghdGFibGUp
CiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5k
ID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7
CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAm
IERvbnREZWxldGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIShp
dGVyLT5hdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKSkKQEAgLTczNiwyMSArNzE4
LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKIHsKICAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKKyAg
ICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXAp
OwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAg
ICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUg
PSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIEFTU0VSVCh0YWJsZSk7CiAKLSAgICAg
ICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKTsKKyAgICAg
ICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgpOwogCiAgICAgICAgIC8vIEhv
bGRzIG91ciB2YWx1ZXMgY29tcGFjdGVkIGJ5IGluc2VydGlvbiBvcmRlci4KICAgICAgICAgVmVj
dG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9wZXJ0eUNvdW50KTsKIAogICAgICAgICAvLyBDb3BpZXMg
b3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVpciBoYXNoZWQgbG9jYXRpb25zLCBjb21wYWN0aW5nIHBy
b3BlcnR5IHRhYmxlIG9mZnNldHMgYXMgd2UgZ28uCiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwot
ICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVu
ZCgpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7
CiAgICAgICAgIG1fb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICAgICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAg
ICAgICAgICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKICAg
ICAgICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1i
ZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIH0KQEAgLTc1OSw3ICs3NDQsNyBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyBpKyspCiAgICAgICAgICAgICBvYmplY3Qt
PnB1dERpcmVjdCh2bSwgb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0
eSksIHZhbHVlc1tpXSk7CiAKLSAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5jbGVhckRlbGV0ZWRP
ZmZzZXRzKCk7CisgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAgICAgICAg
IGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICB9CiAKQEAgLTc2OCw1NSArNzUzLDM0IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKIAogICAgIHNpemVfdCBh
ZnRlck91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKIAotICAg
IGlmIChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBhZnRlck91dE9mTGluZUNhcGFjaXR5KSB7
CisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkg
IT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICBBU1NFUlQoYmVmb3JlT3V0T2ZM
aW5lQ2FwYWNpdHkgPiBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICAgICAgLy8gSWYgdGhl
IG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0ZW5pbmcvY29tcGFjdGluZyB3
ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgICAgICAvLyB3ZSBuZWVkIHRvIHplcm8g
aXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9uIHRoZSBTdHJ1Y3R1cmUgdG8g
a25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KLSAgICAgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5
KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVy
KG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3QtPnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgdGhpcywgMCk7CisgICAgICAgIGlmICghYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhp
cy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAgICAgICAgICAgIG9iamVjdC0+c2V0QnV0
dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCB3YXMgZG93bi1z
aXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIEJ1dHRlcmZseSBpcyBubyBs
b25nZXIgd2l0aGluIHRoZSAKICAgICAgICAgLy8gZmlyc3QgQ29waWVkQmxvY2s6OmJsb2NrU2l6
ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIgaWYgd2UgdHJ5IHRvIG1hc2sgdGhl
IGJhc2UgYmFjayB0byAKICAgICAgICAgLy8gdGhlIENvcGllZEJsb2NrIGhlYWRlci4gVG8gcHJl
dmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtZW1tb3ZlIHRoZSBCdXR0ZXJmbHkgZG93bi4KLSAg
ICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSkKLSAgICAgICAgICAgIG9iamVjdC0+
c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcodm0sIGJlZm9yZU91dE9mTGluZUNhcGFjaXR5
LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb2Jq
ZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhsb2NrZXIsIHZtLCB0aGlzLCBhZnRl
ck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9Ci0KLSAgICByZXR1cm4gdGhpczsKLX0KLQotUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsKLSAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAgCi0gICAgcGluKCk7Ci0KLSAg
ICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotfQotCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVChpc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLQot
ICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4g
dGhpczsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCit2b2lkIFN0cnVjdHVyZTo6cGluKFZN
JiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUo
KSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUpOworICAgIHNldFByb3BlcnR5
VGFibGUodm0sIHRhYmxlKTsKICAgICBjbGVhclByZXZpb3VzSUQoKTsKICAgICBtX25hbWVJblBy
ZXZpb3VzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoKQor
dm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAgICBzZXRJc1Bpbm5lZFByb3Bl
cnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogICAgIG1f
bmFtZUluUHJldmlvdXMgPSBudWxscHRyOwogfQogCkBAIC04OTEsMTcgKzg1NSwxMyBAQCB2b2lk
IFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAogICAgIH0KIAogICAgIC8vIFRoaXMgb25s
eSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4KLSAgICBQcm9wZXJ0eVRhYmxl
KiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2
bSwgcHJvcGVydHlUYWJsZSk7Ci0KKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0g
ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisgICAgCiAgICAgLy8gV2UgbXVzdCBiZSBjYWxsaW5n
IHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHByb3BlcnR5IG9yIGNvbmZpcm1l
ZCB0aGF0IGl0IHdhcyBwcmVzZW50Ci0gICAgLy8gYWxyZWFkeSwgc28gd2UgbXVzdCBoYXZlIGEg
cHJvcGVydHkgdGFibGUgbm93LgotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKTsKLQotICAgIC8v
IC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4KKyAgICAvLyBhbHJlYWR5LCBz
byB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgogICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
dHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJU
KGVudHJ5KTsKLQorICAgIAogICAgIGlmIChzaG91bGRPcHRpbWl6ZSkKICAgICAgICAgZW50cnkt
Pmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1ZSh2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYWdlKTsKICAgICBlbHNlIHsKQEAgLTk0MywxOCArOTAzLDEyIEBAIFByb3BlcnR5
TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXIKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFi
bGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQotewotICAgIGlmICghcHJv
cGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJs
ZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotfQotCiBQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7Ci0gICAg
aWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6
Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSkpOworICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVP
ck51bGwoKSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGFibGUp
OworICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlh
bGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUpOwogfQogCiBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1
bnNpZ25lZCYgYXR0cmlidXRlcykKQEAgLTk4OSw3MCArOTQzLDI0IEBAIFZlY3RvcjxQcm9wZXJ0
eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
KQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVh
cCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0
eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMg
JiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKLSAgICAgICAgc2V0SXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKLQotICAgIGF1dG8g
cmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0g
ICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwotCi0gICAgUHJvcGVydHlPZmZz
ZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNp
dHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5l
d09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVy
biBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7
IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgYXV0byByZXAgPSBwcm9wZXJ0
eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0
aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAgaWYgKCFwb3NpdGlvbi5maXJz
dCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5y
ZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChv
ZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiBvZmZzZXQ7Ci19
Ci0KLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0eSkKLXsKLSAgICBBU1NFUlQo
IXByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0
eSkpOworICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBbXSAoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6
Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7Ci0gICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwg
ZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSog
dGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJs
ZSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgYm9vbCBrbm93blVuaXF1ZSA9IHByb3Bl
cnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUoKTsKLQotICAgIFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQ
cm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3Ig
ZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIEFTU0VS
VCghaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkgfHwgIShpdGVy
LT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKICAgICAgICAgQVNTRVJUKCFpc1F1aWNrUHJvcGVy
dHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhaXRlci0+a2V5LT5pc1N5bWJvbCgp
KTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSB8fCBtb2RlLmlu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewpAQCAtMTExNCw2ICsxMDIyLDkgQEAgdm9pZCBT
dHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc09iamVjdCgp
KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmNsZWFyKCk7CkBA
IC0xMjc2LDkyICsxMTg3LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBDb250ZXh0SGVhZGVyKFBy
aW50UwogICAgIG91dC5wcmludCgiU3RydWN0dXJlczoiKTsKIH0KIAotI2lmIERPX1BST1BFUlRZ
TUFQX0NPTlNURU5DWV9DSEVDSwotCi12b2lkIFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVu
Y3koKQotewotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA+PSBQcm9wZXJ0eVRhYmxlOjpNaW5pbXVt
VGFibGVTaXplKTsKLSAgICBBU1NFUlQobV9pbmRleE1hc2spOwotICAgIEFTU0VSVChtX2luZGV4
U2l6ZSA9PSBtX2luZGV4TWFzayArIDEpOwotICAgIEFTU0VSVCghKG1faW5kZXhTaXplICYgbV9p
bmRleE1hc2spKTsKLQotICAgIEFTU0VSVChtX2tleUNvdW50IDw9IG1faW5kZXhTaXplIC8gMik7
Ci0gICAgQVNTRVJUKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAv
IDIpOwotICAgIEFTU0VSVChtX2RlbGV0ZWRDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDQpOwotCi0g
ICAgdW5zaWduZWQgaW5kZXhDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgZGVsZXRlZEluZGV4Q291
bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYSA9IDA7IGEgIT0gbV9pbmRleFNpemU7ICsrYSkg
ewotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRleFthXTsKLSAgICAgICAgaWYg
KGVudHJ5SW5kZXggPT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRyeUluZGV4KQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IGRlbGV0ZWRFbnRyeUluZGV4
KCkpIHsKLSAgICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA8IGRlbGV0ZWRFbnRy
eUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAtIDEgPD0gdXNlZENvdW50KCkp
OwotICAgICAgICArK2luZGV4Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBiID0gYSAr
IDE7IGIgIT0gbV9pbmRleFNpemU7ICsrYikKLSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4W2Jd
ICE9IGVudHJ5SW5kZXgpOwotICAgIH0KLSAgICBBU1NFUlQoaW5kZXhDb3VudCA9PSBtX2tleUNv
dW50KTsKLSAgICBBU1NFUlQoZGVsZXRlZEluZGV4Q291bnQgPT0gbV9kZWxldGVkQ291bnQpOwot
Ci0gICAgQVNTRVJUKCF0YWJsZSgpW2RlbGV0ZWRFbnRyeUluZGV4KCkgLSAxXS5rZXkpOwotCi0g
ICAgdW5zaWduZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGMg
PSAwOyBjIDwgdXNlZENvdW50KCk7ICsrYykgewotICAgICAgICBTdHJpbmdJbXBsKiByZXAgPSB0
YWJsZSgpW2NdLmtleTsKLSAgICAgICAgaWYgKHJlcCA9PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9F
TlRSWV9LRVkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgKytub25FbXB0eUVudHJ5
Q291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXAp
OwotICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleDsK
LSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5SW5kZXggPSBtX2luZGV4W2kg
JiBtX2luZGV4TWFza107Ci0gICAgICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAhPSBQcm9wZXJ0
eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlcCA9PSB0YWJsZSgp
W2VudHJ5SW5kZXggLSAxXS5rZXkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwgZG91YmxlSGFzaChJZGVudGlm
aWVyUmVwSGFzaDo6aGFzaChyZXApKTsKLSAgICAgICAgICAgIGkgKz0gazsKLSAgICAgICAgfQot
ICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA9PSBjICsgMSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KG5vbkVtcHR5RW50cnlDb3VudCA9PSBtX2tleUNvdW50KTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6
OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQot
ICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaXNR
dWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKCkpIHsKLSAgICAgICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICAg
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShpdGVy
LT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKLSAgICAgICAgICAgIEFTU0VSVCghaXRlci0+a2V5
LT5pc1N5bWJvbCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3BlcnR5VGFibGUoKS0+
Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi0jZWxzZQotCi1pbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6
OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLX0K
LQotI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCiBib29sIENsYXNz
SW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdAogewogICAg
IGZvciAoY29uc3QgQ2xhc3NJbmZvKiBjaSA9IHRoaXM7IGNpOyBjaSA9IGNpLT5wYXJlbnRDbGFz
cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTcgKzE4MywxOSBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NlYWxlZChWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNGcm96ZW4oVk0mKTsKICAgICBib29sIGlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpIGNv
bnN0IHsgcmV0dXJuICFkaWRQcmV2ZW50RXh0ZW5zaW9ucygpOyB9Ci0gICAgYm9vbCBwdXRXaWxs
R3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5l
U3RvcmFnZUNhcGFjaXR5KCk7IAogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBm
bGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYsIEpTT2JqZWN0Kik7CiAKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9u
LiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7Ci0g
ICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSk7CisgICAgLy8gVmVyc2lvbnMgdGhhdCB0YWtlIGEgZnVuYyB3aWxsIGNhbGwg
aXQgYWZ0ZXIgbWFraW5nIHRoZSBjaGFuZ2UgYnV0IHdoaWxlIHN0aWxsIGhvbGRpbmcKKyAgICAv
LyB0aGUgbG9jay4gVGhlIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWQgaWYgdGhlcmUgaXMgbm8gY2hh
bmdlIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwKKyAgICAvLyByZW1vdmVQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKCkgYW5kIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25z
dCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNl
dCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCBjb25z
dCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0s
IEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBl
KTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlvbmFyeSgpIGNvbnN0IHsgcmV0dXJuIGRp
Y3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9CkBAIC0yMjksOCArMjMxLDgg
QEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29uc3QgeyBBU1NFUlQoc3RydWN0
dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBtX2Jsb2IudHlwZUluZm8obV9v
dXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0IHsgcmV0dXJu
IHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKSAmIEFsbEFycmF5VHlwZXM7
IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBib29sIG1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkgKzQzNSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fY2xhc3NJbmZvKTsKICAgICB9
CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1fYmxvYikg
KyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCgpOworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0cnVjdHVyZUlEQmxvYjo6aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAgIH0KICAgICAKICAgICBzdGF0
aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQoKQpAQCAtNTc5LDYgKzU4MSw4
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1wQ29udGV4dEhlYWRlcihQcmlu
dFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrJiBsb2NrKCkgeyByZXR1cm4g
bV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAg
LTYzMyw0NCArNjM3LDQ1IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAgUHJv
cGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQ
cm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJv
cGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYg
cHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUo
Vk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0m
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0m
KTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNz
YXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Ig
bm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisgICAg
UHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkoVk0mIHZtKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAm
JiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsK
KyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2Fm
ZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIGlmICghcHJldmlv
dXNJRCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtYXRl
cmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgUHJvcGVydHlUYWJsZSom
IHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8g
bm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5
VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNs
YXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3Rl
bmN5KCkpOwotICAgICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICAgICAg
aWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkpIHsKLSAgICAgICAgICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOwotICAg
ICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQo
KSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtYXRlcmlhbGl6
ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0mIHZtLCBEZWZlckdDJikKKyAgICAKKyAgICBQcm9w
ZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgY2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAg
ICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOworICAgICAgICByZXR1cm4gbV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIHdpbGwgZ3Jh
YiB0aGUgbG9jay4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBsb2Nr
LgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5VGFibGUqIG1hdGVyaWFsaXplUHJvcGVy
dHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IHRydWUpOworICAgIAorICAgIHZv
aWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKTsKKyAgICAK
KyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYp
OworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwog
CiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewpAQCAtNjk3LDggKzcwMiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1ZhbGlkKEpTR2xv
YmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsK
ICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRlKiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3Rv
dHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgCi0gICAgdm9pZCBwaW4oKTsKLSAgICB2b2lkIHBp
bkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHBpbihWTSYsIFByb3Bl
cnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZvckNhY2hpbmcoVk0mLCBQcm9wZXJ0eVRhYmxlKik7
CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRhKEpTQ2VsbCogY2VsbCkgY29uc3QKICAgICB7CkBA
IC03MTAsNyArNzE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkp
OwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZp
b3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAgICAgICAKKwogICAgIGJvb2wgY2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
bGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03NDAsNyArNzQ1LDcgQEAgcHJpdmF0ZToKIAogICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgIC8vIFNo
b3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBt
YXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgLy8gU2hvdWxkIGJlIGFjY2Vz
c2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBz
ZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90
IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAg
ICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJREJsb2Iu
aAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsMTAgKzQwLDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsKICAgICB9CiAKLSAgICBTdHJ1
Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBTdHJ1Y3R1cmVJREJsb2IoU3Ry
dWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAgewogICAgICAgICB1LmZpZWxk
cy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1LmZpZWxkcy5pbmRleGluZ1R5
cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICB1LmZpZWxk
cy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZpZWxkcy5pbmxpbmVUeXBlRmxh
Z3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAgICAgdS5maWVsZHMuZGVmYXVs
dENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01Miw4ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJREJsb2ImIG90aGVyKSB7IHUu
ZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAgIAogICAgIFN0cnVjdHVyZUlE
IHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuc3RydWN0dXJlSUQ7IH0KLSAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5k
ZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7IH0KKyAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJu
IHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KKyAgICB2b2lkIHNldElu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IGlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlu
bGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmlubGluZVR5cGVGbGFnczsg
fQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0cnVjdHVyZUlEKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1LmZpZWxkcy5p
bmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZUlE
QmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgfQogCiBw
cml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFN0cnVj
dHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUeXBlSW5mbzo6SW5saW5l
VHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAgIENlbGxTdGF0ZSBkZWZhdWx0
Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsOCAr
OTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6CiAgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGU7
Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBwcm9wZXJ0eVRhYmxl
KTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghcHJvcGVydHlUYWJsZSkKICAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwzMSArMjE4LDYgQEAgaW5saW5lIGJvb2wgU3RydWN0
dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAgIHJldHVybiBpc1ZhbGlkKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogfQogCi1pbmxpbmUgYm9vbCBT
dHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCi17Ci0gICAgY2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0
T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKSB7Ci0gICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQo
bV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBjdXJyZW50
U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgIH0KLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5
VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBpZiAocHJvcGVydHlUYWJsZSgp
LT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VS
VCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHko
KTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIFN0cnVj
dHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2Fm
ZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQpAQCAt
MjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRjaHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnQK
IAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgp
IGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlU
YWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gcHJv
cGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKSB7CiAgICAgICAg
IEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwpAQCAtMjkyLDYgKzI2NiwxMSBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNlCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCit7CisgICAg
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBpbmxpbmUgc2l6ZV90IG5leHRPdXRPZkxp
bmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSkKIHsKICAgICBpZiAoIWN1
cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSArMjc4LDYgQEAgaW5saW5lIHNpemVfdCBuZXh0T3V0
T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJldHVybiBjdXJyZW50Q2FwYWNpdHkgKiBvdXRPZkxp
bmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWRO
ZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKQotewotICAgIHJldHVybiBuZXh0T3V0T2ZMaW5l
U3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwotfQotCiBpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5nVGFnU3ltYm9sU2xvdCkKIHsK
ICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC0zMTEsNCArMjg1LDg1IEBAIGlubGluZSB2b2lk
IFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJlRGF0YSgpLT5zZXRPYmplY3RU
b1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9TdHJpbmdUYWdTeW1ib2xTbG90
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKworICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgCisgICAgc2V0UHJvcGVydHlUYWJs
ZSh2bSwgdGFibGUpOworICAgIAorICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2
bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGlmIChh
dHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpCisgICAgICAg
IHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CisK
KyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKworICAgIFByb3BlcnR5T2Zmc2V0
IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOworICAgIAor
ICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRl
cyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Cisg
ICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNl
dCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
K2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgYXV0
byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgCisgICAgLy8gV2UgT05MWSByZW1vdmUg
ZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdoaWNoIHdpbGwgaGF2ZSBhIHBpbm5lZCBw
cm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUgb25seSB3YXkgZm9yIHRoZW0gbm90IHRvIGhhdmUg
YSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0eS4KKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IHByb3BlcnR5VGFibGVPck51bGwoKTsKKworICAgIGlmICghdGFibGUpCisgICAgICAgIHJldHVy
biBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3Np
dGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKKyAgICAg
ICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAgIHRhYmxlLT5yZW1vdmUocG9zaXRpb24p
OworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7CisKKyAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgb2Zmc2V0KTsKKyAgICByZXR1cm4gb2Zmc2V0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7
CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CisgICAgCisgICAgcmV0dXJu
IGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBmdW5jKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBj
b25zdCBGdW5jJiBmdW5jKQoreworICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOworICAgIEFTU0VSVChwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAorICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1l
LCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRQcm9wZXJ0eVRhYmxlKFZN
JiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCit7CisgICAgbV9wcm9wZXJ0eVRhYmxlVW5zYWZl
LnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworfQorICAgIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBj
b25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRoZSByZWFzb24gd2h5IEkgd2VudCB0
byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2UgV1RGOjpMb2NrIGZpdCBpbiB0d28gYml0cyBpcyB0
aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkgd291bGQgZXZlbnR1YWxseSBuZWVkIHRvIHN0dWZm
IG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91cyBiaXRzIG9mIHRoZQorICAgICAgICBKU0NlbGwg
aGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUsIGJlY2F1c2UgdGhlIGNvbmN1cnJlbnQgR0MgaGFz
IG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29uZGl0aW9ucyBpbiB2aXNpdENoaWxkcmVuIHRoYXQg
Y2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBlYWNoIG9iamVjdCBqdXN0IGhhcyBhbgorICAgICAg
ICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwgdHlwZXMgbWlnaHQgdXNlIGl0IHRvIHNpbXBseSBw
cm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENoaWxkcmVuCisgICAgICAgIGZ1bmN0aW9uIGFuZCBh
bnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZpZWxkcyBpdCB0b3VjaGVzLCB3aGlsZSBvdGhlciBj
ZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVzZSBpdCBhcyBhICJsb2NrIG9mIGxhc3QgcmVzb3J0
IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9mIGFuIG90aGVyd2lzZSB3YWl0LWZyZWUgb3IKKyAg
ICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4gUmlnaHQgbm93LCBpdCdzIHVzZWQgdG8gcHJvdGVj
dCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBpbnZvbHZpbmcKKyAgICAgICAgaW5kZXhpbmcgc3Rv
cmFnZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhpcyBoYXBwZW4sIEkgZmFjdG9yZWQg
dGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50byBhIExvY2tBbGdvcml0aG0gc3RydWN0IHRoYXQK
KyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24gbG9jayB0eXBlICh1aW50OF90IGZvciBXVEY6Okxv
Y2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgxIGZvcgorICAgICAgICBXVEY6OkxvY2spLCBhbmQg
dGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBmb3IgV1RGOjpMb2NrKS4gVGhpcyBjb3VsZCBoYXZl
IGJlZW4gZG9uZSBhcworICAgICAgICBhIHRlbXBsYXRpemVkIExvY2sgY2xhc3MgdGhhdCBiYXNp
Y2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tUeXBlPi4gWW91IGNvdWxkIHRoZW4gbWFrZQorICAg
ICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sgYnkgYml0d2lzZV9jYXN0aW5nIGl0IHRvIFRlbXBs
YXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBiaXQyPi4gQnV0CisgICAgICAgIHRoaXMgZmVsdCB0
b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tBbGdvcml0aG0gaGFzIHN0YXRpYyBtZXRob2RzIHRo
YXQgdGFrZQorICAgICAgICBBdG9taWM8TG9ja1R5cGU+JiBhcyB0aGVpciBmaXJzdCBhcmd1bWVu
dC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMgaXQgbW9yZSBuYXR1cmFsIHRvCisgICAgICAgIHBy
b2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8gYW4gZXhpc3RpbmcgQXRvbWljPD4gZmllbGQuIFNh
ZGx5LCBzb21lIHBsYWNlcyBoYXZlIHRvIGNhc3QKKyAgICAgICAgdGhlaXIgbm9uLUF0b21pYzw+
IGZpZWxkIHRvIEF0b21pYzw+IGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsuIExpa2Ugc28gbWFu
eSBvdGhlciB0aGluZ3MKKyAgICAgICAgd2UgZG8sIHRoaXMganVzdCBzaG93cyB0aGF0IHRoZSBD
Kysgc3R5bGUgb2YgbGFiZWxpbmcgZmllbGRzIHRoYXQgYXJlIHN1YmplY3QgdG8gYXRvbWljCisg
ICAgICAgIG9wcyBhcyBhdG9taWMgaXMgY291bnRlcnByb2R1Y3RpdmUuIE1heWJlIHNvbWUgZGF5
IEknbGwgY2hhbmdlIExvY2tBbGdvcml0aG0gdG8gdXNlIG91cgorICAgICAgICBvdGhlciBBdG9t
aWNzIEFQSSwgd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBBdG9taWM8Pi4KKyAgICAgICAgCisgICAg
ICAgIFdURjo6TG9jayBub3cgdXNlcyBMb2NrQWxnb3JpdGhtLiBUaGUgc2xvdyBwYXRocyBhcmUg
c3RpbGwgb3V0bGluZWQuIEkgZG9uJ3QgZmVlbCB0b28KKyAgICAgICAgYmFkIGFib3V0IHRoZSBM
b2NrQWxnb3JpdGhtLmggaGVhZGVyIGJlaW5nIGluY2x1ZGVkIGluIHNvIG1hbnkgcGxhY2VzIGJl
Y2F1c2Ugd2UgY2hhbmdlCisgICAgICAgIHRoYXQgYWxnb3JpdGhtIHNvIGluZnJlcXVlbnRseS4K
KyAgICAgICAgCisgICAgICAgIEFsc28sIEkgYWRkZWQgYSBoYXNFbGFwc2VkKHRpbWUpIGZ1bmN0
aW9uLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGl0IHNvIG11Y2ggbW9yZSBuYXR1cmFsCisgICAgICAg
IHRvIHdyaXRlIHRpbWVzbGljaW5nIGNvZGUsIHdoaWNoIHRoZSBjb25jdXJyZW50IEdDIGhhcyB0
byBkbyBhIGxvdCBvZi4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTGlzdER1bXAu
aDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2Nr
U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tTbG93KToKKyAgICAgICAgKFdU
Rjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
dW5sb2NrU2xvd0ltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9Mb2NrLmg6CisgICAgICAg
IChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnRyeUxvY2sp
OgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jh
c2U6OnVubG9ja0ZhaXJseSk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjppc0hlbGQpOgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTG9ja0FsZ29yaXRobS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8pOgorICAg
ICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tB
bGdvcml0aG06OmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp0cnlMb2NrKToK
KyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdEFzc3VtaW5nWmVybyk6Cisg
ICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zhc3QpOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxv
Y2tGYWlybHkpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjppc0xvY2tlZCk6CisgICAg
ICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tTbG93KToKKyAgICAgICAgKFdURjo6TG9ja0Fs
Z29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2Nr
VHlwZS5jcHA6CisgICAgICAgIChXVEY6Omhhc0VsYXBzZWQpOgorICAgICAgICAqIHd0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuaDoKKwogMjAxNi0xMS0xMSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFsbG93IG11dGFibGUgbGFtYmRh
cyBpbiBIYXNoTWFwOjplbnN1cmUKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogCiAvKiBC
ZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAg
LyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CisJCTBGMEZDRERF
MUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9j
a0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5o
ICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJB
MyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwpA
QCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBGQ0RERDFERDE2N0Y5
MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2
NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0
OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTMsNiArOTU1LDcgQEAKIAkJCQlBOEE0
NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAqLywKIAkJCQkwRkUxNjQ2ODFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZFMTY0NjkxQjZGRkM5NjAwNDAw
RTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0Fs
Z29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQxMjNGRiAvKiBMb2NrZXIuaCAq
LywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9nZ2luZ0FjY3VtdWxhdG9yLmgg
Ki8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWQuY3BwICovLApA
QCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5
cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTU1NkY2
MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNGRiAvKiBDdXJyZW50VGltZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUYxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0
aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsMzYg
QEAgc3RydWN0IEF0b21pYyB7CiAgICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlWG9yKFUgb3Bl
cmFuZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0
KSB7IHJldHVybiB2YWx1ZS5mZXRjaF94b3Iob3BlcmFuZCwgb3JkZXIpOyB9CiAgICAgCiAgICAg
QUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0ZDo6bWVtb3J5X29yZGVyIG9y
ZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZXhjaGFuZ2Uo
bmV3VmFsdWUsIG9yZGVyKTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgQUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBm
dW5jKQorICAgIHsKKyAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7CisgICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1ZTsKKyAgICAgICAgZnVuYyhu
ZXdWYWx1ZSk7CisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZChvbGRW
YWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uUmVsYXhlZChjb25zdCBGdW5jJiBmdW5j
KQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2F0aW9uUmVsYXhlZChmdW5jKSkgeyB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIFQg
b2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBUIG5l
d1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgIGZ1bmMobmV3VmFsdWUpOworICAgICAgICByZXR1
cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0
aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYWN0
aW9uKGZ1bmMpKSB7IH0KKyAgICB9CiAKICAgICBzdGQ6OmF0b21pYzxUPiB2YWx1ZTsKIH07Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlzdEhhc2hTZXQuaAogICAgIExv
Y2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5oCiAgICAgTUQ1LmgKICAgICBN
YWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEwICsxNzcsMTEgQEAg
TGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRleAogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwor
dXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdURjo6bWFwRHVtcDsKK3VzaW5n
IFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKIHVzaW5n
IFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7CiAKICNl
bmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIwICsyNiwyMSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2suaCIKIAotI2luY2x1ZGUgIkRh
dGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0jaW5jbHVkZSAiU3RyaW5nUHJpbnRT
dHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCi0jaW5jbHVkZSA8dGhy
ZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZh
bHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQordm9pZCBMb2Nr
QmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7Ci0KLSAgICAv
LyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0
IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQw
OwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVl
ID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJlbnRC
eXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFy
Z2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAg
ICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBj
dXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9v
IG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KLSAgICAgICAgaWYgKCEoY3Vy
cmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7
Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6
OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0
LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAotICAgICAgICAvLyBpZiB0aGUgcGFy
a2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KLSAgICAgICAg
aWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKLSAgICAgICAgICAgICYmICFt
X2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZh
bHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8v
IFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcg
YXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KLSAgICAgICAgUGFya2luZ0xvdDo6UGFy
a1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQ
YXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7Ci0gICAgICAgIGlmIChwYXJr
UmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRv
a2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2Zm
OgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZlciByZWxlYXNlZC4gSXQgd2Fz
IGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRoYXQgZGlkCi0gICAgICAgICAg
ICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBjYWxsZWQgdW5sb2NrKCkgaGFz
IHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIGJlZW4g
d29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIgdGhlIGxv
Y2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0
aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZh
bHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKLSAgICAgICAgLy8gYXJvdW5kIGFuZCB0
cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpsb2NrU2xvdyhtX2J5
dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkKIHsKLSAgICB1bmxvY2tTbG93
SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KG1fYnl0
ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVu
bG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBsKEZhaXIpOwotfQotCi1ORVZF
Ul9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwoRmFpcm5lc3MgZmFpcm5lc3Mp
Ci17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4gdW5s
b2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAvLyBzb21l
b25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBub3cgdGhl
IGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBp
ZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgotICAg
IGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0IHx8IG9s
ZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCkgewotICAgICAgICAgICAgaWYgKG1f
Ynl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
b21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRocmVhZC4gV2UgbWF5IGhhbmQg
dGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdpbGwg
dW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93IGZv
ciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBw
YXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAot
ICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KLSAgICAgICAgQVNTRVJUKG9sZEJ5dGVW
YWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUsCi0gICAgICAgICAgICBbJl0gKFBhcmtp
bmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVs
ZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3Vs
ZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYm
IChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0
aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0gICAgICAgICAgICAgICAgICAgIC8vIHdh
aXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJl
YWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUuc3RvcmUoaGFzUGFya2VkQml0KTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZSgwKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVu
bG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6RmFpcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93
dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVmIFdURl9M
b2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNp
bmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja0FsZ29yaXRobS5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIApA
QCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdURiB7
CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90LCAxLCAyPiBEZWZhdWx0TG9ja0FsZ29y
aXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgb25seSByZXF1
aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0aHMgdGhhdCBhcmUKIC8vIGNv
bXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVuZGVkIGxvY2tpbmcgaXMgaW5saW5lZCBh
bmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCiAvLyBoYW5kbGVkIGJ5IHNwaW5u
aW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0IGlzIGNvbXBldGV0aXZlIHRv
IHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMgKzU0LDEzIEBAIG5hbWVzcGFjZSBXVEYg
ewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQogICAgIHsKLSAgICAgICAgaWYg
KExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGxvY2tTbG93KCk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tGYXN0QXNzdW1pbmda
ZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsKICAgICB9CiAKICAgICBib29s
IHRyeUxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdWludDhf
dCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgICAgIGlmIChjdXJy
ZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06
OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAKICAgICAvLyBOZWVkIHRoaXMgdmVyc2lvbiBmb3Ig
c3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4IEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAg
ICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2VjdGlvbnMgYWx3YXlzIGdldCBh
IGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZ
KG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkg
d2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1
bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06
OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93
KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyBsaWtlIHVubG9jaygpIGJ1dCBpdCBndWFyYW50
ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2NrIGZhaXJseS4gRm9yIHNob3J0IGNyaXRpY2FsCkBA
IC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gd2FudC4KICAgICB2
b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkp
KSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmch
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1bmxvY2tGYWlybHlT
bG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9j
a0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAgICB1bmxvY2tGYWlybHlTbG93
KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0Owor
ICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06OmlzTG9ja2VkKG1fYnl0ZSk7CiAg
ICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CkBAIC0xMjYsMjEgKzEwOSwxMCBAQCBw
cm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsK
ICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQgPSAyOwotCisgICAgCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2Nr
RmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0gRmFpcm5lc3MgewotICAgICAgICBGYWlyLAot
ICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZvaWQgdW5sb2NrU2xvd0ltcGwoRmFpcm5lc3Mp
OwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCi0g
ICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9OwogCiAgICAgLy8gTWV0aG9kIHVzZWQgZm9yIHRl
c3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlSZXNldCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9j
a0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0
aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX0xvY2tBbGdvcml0
aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRobV9oCisKKyNpbmNsdWRlIDx0aHJlYWQ+Cisj
aW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyB0
aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2NrLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2Nr
VHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQYXJrZWRCaXQ+CitjbGFzcyBM
b2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQ7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8
TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hh
bmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQor
ICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlf
b3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdl
V2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBsb2NrKEF0b21pYzxMb2NrVHlw
ZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIWxvY2tGYXN0KGxvY2spKSkK
KyAgICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBmb3IgKDs7
KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoc3Rk
OjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVWYWx1
ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRC
eXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCB1
bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBMb2NrVHlw
ZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAg
ICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1
ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2sp
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9jaykpKQorICAgICAg
ICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICB1bmxvY2tTbG93
KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0xvY2tlZChjb25z
dCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2subG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICB9CisgICAgCisg
ICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxv
Y2spCisgICAgeworICAgICAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAgICAgIC8v
IFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3Qg
SmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9
IDQwOworICAgIAorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJl
bnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKworICAgICAgICAgICAgLy8gV2UgYWxsb3cgb3Vy
c2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAm
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWso
Y3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFy
a2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGlu
IGFyb3VuZC4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRC
aXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAgICAgICAgIHNwaW5Db3Vu
dCsrOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQg
dGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAgICAgLy8gaWYgdGhlIHBhcmtl
ZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQuCisgICAgICAgICAg
ICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgICAg
ICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5
dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJr
ZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAgICAg
IFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9CisgICAgICAgICAgICAgICAgUGFy
a2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRC
aXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBhcmtSZXN1bHQud2FzVW5wYXJr
ZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVz
dWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFu
ZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9uZSEKKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6CisgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhyZWFkIHRo
YXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4g
b3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8v
IG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBs
b29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhhdmUg
YXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2Vk
LiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fp
bi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZhaXJuZXNzIHsKKyAgICAgICAg
RmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZFUl9JTkxJTkUgc3RhdGljIHZv
aWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBGYWlybmVzcyBmYWlybmVzcykK
KyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJlY2F1c2UgdGhlIHdlYWsgQ0FT
IGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNhdXNlIHRoZXJlIGlzCisgICAg
ICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJp
Z2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCisgICAgICAgIC8vIGJlIGhl
bGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBhcmUg
dW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IG9sZEJ5
dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisgICAg
ICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlzSGVsZEJpdAorICAgICAgICAg
ICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2Vk
Qml0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9
PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVsZEJpdCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFjdGx5IG9u
ZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQgdGhyZWFkCisgICAgICAgICAg
ICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGlt
ZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCisgICAgICAgICAgICAvLyBXaGVu
IHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBh
IGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAorICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFk
cyBwYXJrZWQuCisgICAgICAgICAgICBBU1NFUlQoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChp
c0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFy
a09uZSgKKyAgICAgICAgICAgICAgICAmbG9jaywKKyAgICAgICAgICAgICAgICBbJl0gKFBhcmtp
bmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90IHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4gY2xlYXIgZWl0aGVyIHRoZSBp
c0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28g
d2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKChsb2NrLmxvYWQoKSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQ
YXJrZWRCaXQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJl
c3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVU
b0JlRmFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBh
bnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2Fz
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxvY2sudHJhbnNhY3Rpb24oCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdpbmdPcHBvcnR1bml0eTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZW51bSBUb2tlbiB7CisgICAgICAgIEJhcmdpbmdPcHBv
cnR1bml0eSwKKyAgICAgICAgRGlyZWN0SGFuZG9mZgorICAgIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKwordXNpbmcgV1RGOjpMb2NrQWxnb3JpdGhtOworCisjZW5kaWYgLy8gV1RGX0xv
Y2tBbGdvcml0aG1faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Ns
b2NrVHlwZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNp
bmNsdWRlICJDb25kaXRpb24uaCIKICNpbmNsdWRlICJMb2NrLmgiCiAjaW5jbHVkZSAiUHJpbnRT
dHJlYW0uaCIKKyNpbmNsdWRlIDxjZmxvYXQ+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTEyOCw2ICsxMzEsMTcgQEAg
dm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cAogICAgIGZha2VDb25kaXRp
b24ud2FpdFVudGlsKGZha2VMb2NrLCB0aW1lKTsKIH0KIAorYm9vbCBoYXNFbGFwc2VkKGNvbnN0
IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZSkKK3sKKyAgICAvLyBBdm9pZCBkb2luZyBu
b3coKS4KKyAgICBpZiAoISh0aW1lID4gdGltZS53aXRoU2FtZUNsb2NrQW5kUmF3U2Vjb25kcygw
KSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdGQ6OmlzaW5mKHRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKS52YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiB0aW1lIDw9IHRpbWUubm93V2l0aFNhbWVDbG9jaygpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWlj
Q2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsxMzQsMTIgQEAgcHJpdmF0ZToK
IAogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xv
Y2tUeXBlJik7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhhc0VsYXBzZWQoY29uc3QgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK3VzaW5nIFdURjo6aGFzRWxhcHNlZDsKK3Vz
aW5nIFdURjo6c2xlZXA7CiAKICNlbmRpZiAvLyBXVEZfVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
X2gK
</data>
<flag name="commit-queue"
          id="317391"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>294733</attachid>
            <date>2016-11-14 13:06:16 -0800</date>
            <delta_ts>2016-11-14 14:03:45 -0800</delta_ts>
            <desc>Archive of layout-test-results from ews114 for mac-yosemite</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>1704564</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64">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
nr62mMQ5Xn67XawfvIvvadksfr2Bvfzm++3s3Zh130XI+5sp/Lts343J7peLdnmzWG6+Txs+Vj35
a9XDLzu9gjcQ20NSH7Dvcu3BRmLoj7U5+nIxxnTw3ff7CUpdPtz9McYxwSeP8/Fm4N6Nrx+Xzd17
YeWJvBg/tYvbWfuwfM+NPVEXb7T929vx4jeMHJzdPD4vb0C254eY5gktzt4jVYG9eMPo396Ofnm6
XTaTuxYqQQE2VYOZdzr+DR4u24f3kpsTDn+god5NY1KLEwJfmrSx9+TDGwJfJQ2eiNM3mkFz49Gn
cHp2+fP4+l8fw3jg8+Xs0/Vndz56v/0MFV09HvnTMYaq4HxbLDGOLVeYGq0+YNHbuIkf+lBjRCz6
1MASexpHMJ38h2lGYtHFt+apnXWVLwaqjQIgOMkDFIvjOvwxXdHPZyt5h2VQIEC1iviAXRV5MDtG
kr4YAjTWxWjnQujQR7MPo46U48iHslg0Cnl2ebgohwk7+sfV+B9n1+Ov7UPUejOQedYfD/ApUNZ8
0TddpGI7exsFVdit9R+uH41hVTWzGfy6GMOrwfP8nTn5dvQBtrf2buzwm/Hlw7QdHoYLd35+6Q+/
BK7kCbtYF33TzO5vH94Ol4YXdgH239Mf4+vm65gJO/jGpEqLSnpAhg+jbucfn55fnR+QlmGtV/97
frtsx99x3OJBc75SXAlX1+CWjE8/u0/VcKUwYvRidLWEhXh0ygh8WV3RdDAz1cL6+tHB/XJxEwfC
XYcDQugTcTH6pZ3gHL+Ifz3UMxa7dnNTuWt3pGuMYtdubnAEys9n59dnP18NjoKB2XVzc3bhTsOR
aiWLRc/Pfv4QKlgRw+0L1glwHf55fURUyfEN3Nx8/vnMX1aHRZAS5ux93OfHCBgxXKuNK2G1Hd53
U3fwo6BbP7DRX19eu/Njs2vMTsxpV/R/xrAOnxfJxOkmzKYoPQW1NPo/UEsDBBQAAgAIAFRhbkkE
4q4hF1EAAGaJAQAiABwARHVtcFJlbmRlclRyZWUtMjMyMTEtY3Jhc2gtbG9nLnR4dFVUCQADQBoq
WEAaKlh1eAsAAQT1AQAABBQAAADsXetzm8iy/3z5K/hwK0fOxg7DG8rrKkeWE2/8OpadbN2tFDXA
YHOMQAvIj/Nh//bbMwMSICnW2PJu9hx5txwZQfeve3r6MS/O8ywgReHK7Z+DyWh8QdKQ5Jc5IfJv
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
dGVycy1zdGRlcnIudHh0VVQJAAMLFypYyAsqWHV4CwABBPUBAAAEFAAAAENvdWxkIG5vdCBnZW5l
cmF0ZSBhIGtleSBwYWlyLCBzdGF0dXMgLTQzMDQKUEsDBBQAAgAIACBfbkkwO7ixSwAAAGgAAAA8
ABwAY3J5cHRvL3N1YnRsZS9yc2EtaW1wb3J0LWtleS1tYWxmb3JtZWQtcGFyYW1ldGVycy1zdGRl
cnIudHh0VVQJAAMLFypYyAsqWHV4CwABBPUBAAAEFAAAAG3LsQ2AMAxE0Z4pbh8aVrBkS7GAOHIu
RGwPDR31f39Lv4SG3e6O6SwxCFF1elQ5oEKBpKEG0UdrkTRd1o/jjDeySAVnoKWf1n+GB1BLAwQK
AAAAAAAcWW5JAAAAAAAAAAAAAAAADwAcAGNyeXB0by93b3JrZXJzL1VUCQADxwsqWEIaKlh1eAsA
AQT1AQAABBQAAABQSwMECgAAAAAAHFluSQAAAAAAAAAAAAAAABYAHABjcnlwdG8vd29ya2Vycy9z
dWJ0bGUvVVQJAAPHCypYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQKAAIAAAAdX25JJeDTCCwAAAAs
AAAAMQAcAGNyeXB0by93b3JrZXJzL3N1YnRsZS9yc2EtZ2VuZXJhdGUta2V5LXN0ZGVyci50eHRV
VAkAAwkXKljHCypYdXgLAAEE9QEAAAQUAAAAQ291bGQgbm90IGdlbmVyYXRlIGEga2V5IHBhaXIs
IHN0YXR1cyAtNDMwNApQSwMECgAAAAAAHFluSQAAAAAAAAAAAAAAAAUAHABjc3MzL1VUCQADyAsq
WEIaKlh1eAsAAQT1AQAABBQAAABQSwMECgAAAAAAHFluSQAAAAAAAAAAAAAAAA0AHABjc3MzL2Zs
ZXhib3gvVVQJAAPICypYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQKAAAAAAAdX25JAAAAAAAAAAAA
AAAAEwAcAGNzczMvZmxleGJveC9jc3N3Zy9VVAkAAwoXKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsD
BAoAAAAAABxZbkkAAAAAAAAAAAAAAAAeABwAY3NzMy9mbGV4Ym94L2Nzc3dnL2ZsZXgtbGluZXMv
VVQJAAPICypYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAAcWW5J0xY2dawAAAAUAwAATAAc
AGNzczMvZmxleGJveC9jc3N3Zy9mbGV4LWxpbmVzL211bHRpLWxpbmUtd3JhcC1yZXZlcnNlLXJv
dy1yZXZlcnNlLXN0ZGVyci50eHRVVAkAA8gLKljICypYdXgLAAEE9QEAAAQUAAAA7Y+xDoIwFEV3
v6IjDlCoopXEQYkmDkYSRmLIs7xgtVLyqCb8vRgH/QBHt3Onc08RRUkokzgOZCiPTDu8Qdc3qszR
ZWRbJNezTtcNGIMVQ6KlH4m5jJl33ep6DR0eThdUbkNkqdw1DzC6AofVmHn6e4FjPLd3UpiCOiNP
LeEeKw0f8qN4JgIxDfmgdtb1LXY8M9Aj8UH2pnL1+hcoZnSDTIjFZFT8I/4Rv4t4AlBLAwQKAAAA
AAAdX25JAAAAAAAAAAAAAAAAGQAcAGNzczMvZmxleGJveC9jc3N3Zy9vcmRlci9VVAkAAwoXKlhC
GipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAB1fbkl0I5u1rAAAABQDAAA6ABwAY3NzMy9mbGV4
Ym94L2Nzc3dnL29yZGVyL29yZGVyLXdpdGgtcm93LXJldmVyc2Utc3RkZXJyLnR4dFVUCQADChcq
WAoXKlh1eAsAAQT1AQAABBQAAADtj7EOgjAURXe/oiMOUqgWkcRBjSYORhJGY8izvGC1UvNaTfh7
MQ76AY5s507nnkMcZzLJZBqKSB6Z9ngD1zaqLNDnZO9IvmVO1w0YgxVDovkoFtNUsuC60fUSHO5P
F1R+TWSp3DZPMLoCj9WQBfp3gWe8sA9SuAJ1Rr6yhDusNHxpFMtEhGIS8U7trW/v6HhuoEXinexD
5eL9L1TM6AaZELPx4NBH9BH/i3gBUEsDBAoAAAAAACZZbkkAAAAAAAAAAAAAAAANABwAZGlzcGxh
eWxpc3RzL1VUCQAD2AsqWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAJ19uSaNX/ehQAAAA
jgAAADIAHABkaXNwbGF5bGlzdHMvZXh0ZW50LWluY2x1ZGVzLXRyYW5zZm9ybXMtc3RkZXJyLnR4
dFVUCQADGRcqWNcLKlh1eAsAAQT1AQAABBQAAABzL0osyMhMLnbOzytJrSixskpPLXEO8dXQVMgs
VsjLL1GoTC1RSM7PLUgsyUzKSVUozyzJUChKTc4vSsnMSwfKgLUV63G5oxtUjGYQMYYAAFBLAwQU
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
LEMnAXrVkRC9WON7iUr3WZYhn5xfx49uhXvx05EjPho1uKsrrLl5corV98SsHiTwmTctB1xe0Hb4
zAdjP8/59uKt7Tgmd7dZCgRRjToLJXdvGjbLBtFfJId/IyIb2CgnVoaoUL8XRJUGNxzg6uYHK4I5
8uxcanu2Kr8OX6RluM7nQtSWqJsGq06GTSPiIVnoNE9XX1BLAwQUAAIACABIX25JVxgTSdoAAABQ
AQAAMgAcAGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3BsdWdpbi14aHRtbC1zdGRlcnIudHh0
VVQJAANXFypYHAwqWHV4CwABBPUBAAAEFAAAAHWNT0vDQBDF7/0Uc5JEpJODggwlULS5KCqJNOfN
ZtIsbDNhd1Lx29vYgCJ4fH9+7+3K8rUkKIzz3IIKmGB7d2KIUxM4yhQsQycBetWREL1Y43uJSvdZ
liGfnF/Hj26Fe/HTkSM+GjW4qyusuXlyitX3xKweJPCZNy0HXF7QdvjMB2M/z/n24q3tOCZ3t1kK
BFGNOgsld28aNssG0V8kh38jIhvYKCdWhqhQvxdElQY3HODq5gcrgjny7Fxqe7Yqvw5fpGW4zudC
1JaomwarToZNI+IhWeg0T1dfUEsDBBQAAgAIAElfbkl3TYsd4wAAAHcBAAAsABwAZWRpdGluZy9w
YXN0ZWJvYXJkL3Bhc3RlLW5vc2NyaXB0LXN0ZGVyci50eHRVVAkAA1kXKlgdDCpYdXgLAAEE9QEA
AAQUAAAAdY9BS8NAEIXv/RVzkkSk40EvSwkUbS4WlaQ058lmNi6kmbA7EfrvTWxEEXqc9973ZmZX
FG+FgZx8xw2oAAX74T8Z4lgHjjIGy+AkgJsCBhGP0o0njvhMSrirSqy4fvGKezrLqAeOGpEbr75v
8acgItW8Hvp2dRUvv4Pz9CSBsRNqOOByDFqHe27Jnid/e9HWdhiSx4f7FAxEJfUWCnbvGjZLhzH/
kQyuWsbYwKScWOmjQnXIjSk1TE/Azd0vlgc68axcYke2Kn8WvkrDcJvNgaiNMW7srXrpN7VIB8lC
p1m6+gJQSwMEFAACAAgASF9uSUouPjDiAAAAewEAADIAHABlZGl0aW5nL3Bhc3RlYm9hcmQvcGFz
dGUtbm9zY3JpcHQteGh0bWwtc3RkZXJyLnR4dFVUCQADWBcqWB0MKlh1eAsAAQT1AQAABBQAAAB1
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
lYwPK6lgv7UdyqH5UdSc3sfu0GN+NTauRwdPs5WWnmd3ug29WDN2Xe/JUTVT0K7DyFNNrEb7bhWr
6CJ/gyVXWppv5inwoDqah9Dg9qmdZ/nzJPOLtIMVMJtq/7vLu/pROCo+NROopcfrNwfSDDoiQPXD
HjbMHa2fuwONUddVttWjkLtqfhgdGtsykLLGxtEaT0G9oLjb4pGdmT797dkz3WM1M523yuZlbZx9
TmS64DES8ygO7nZG/fQHRp11a/p/dph2W6UdrxWwl3o8VsBCwR9dZhCHdy/TCdft9LvP1glB2V6e
wv966CfqhDVjFZ3Q3bCrE3r5ujrRg+ZAXlknRNP7mb2aTljB/9EJYD9XJ/riiU685OrhBVBz9eC7
Vw+ruHn82N1GV4fb+wDBdgFOAcg/J61/AVBLAwQUAAIACAAvYG5JegC+irEAAADOAQAANgAcAGZh
c3QvY3NzL3BlcnNwZWN0aXZlLW9yaWdpbi1pbml0aWFsLWluaGVyaXQtc3RkZXJyLnR4dFVUCQAD
GhgqWOYMKlh1eAsAAQT1AQAABBQAAADNjzELwjAUhHd/xdu0gwYnS9e2gzgoDdq5ps8SSPJC8irm
31tRFHcHxzvuPu7qptk3BbR43mmGnjCCI4aEDNp6gxYdw4BckvUjYy85GYQLBZh7DNGjYn3FJQU9
aLe8zVczcSIzWoyi6rgTdSvFEy4kjUHhQ5UUUKgYRSnlF7hCZbrQsSa3Ut4v1nm+yaCAK+keXsWi
MDQc3Xsd9odA0xZO22rxzkzkj53N6p/eTP968w5QSwMECgAAAAAAR1luSQAAAAAAAAAAAAAAABsA
HABmYXN0L2Nzcy1nZW5lcmF0ZWQtY29udGVudC9VVAkAAxUMKlhCGipYdXgLAAEE9QEAAAQUAAAA
UEsDBBQAAgAIAERfbkmEe0yb+AIAAMkIAABJABwAZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQv
bWlzc2luZy1xdW90ZXMtd2l0aC1keW5hbWljLWNvbnRlbnQtc3RkZXJyLnR4dFVUCQADUBcqWBUM
Klh1eAsAAQT1AQAABBQAAACdlE1P4zAQhu/9FRaHlb3gJnG/3GiFRPnoVhQqCoKtEAcnmUKWNK4S
B+hlf/vaSdtFbVJYeqjicfI+M++MfToej8YumstU0UgsZKZcFISJWqAE4gASSHBKatatjLIZpNaJ
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
BPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRbCKS7YZv48/ZW0dsMfDNV09SN
hisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHII07qZJJRVdeqDu3ZJ9VyFoef
dmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fwe9D6z7WOKAPLWEekA/U3FD+8
CsscysUbUEsDBAoAAAAAAGJZbkkAAAAAAAAAAAAAAAANABwAZmFzdC9oaXN0b3J5L1VUCQADSAwq
WEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAXV9uSUsbgTWnAAAA0gAAAEAAHABmYXN0L2hp
c3RvcnkvcGFnZS1jYWNoZS13ZWJkYXRhYmFzZS1uby10cmFuc2FjdGlvbi1kYi1zdGRlcnIudHh0
VVQJAAOBFypYSAwqWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRb
CKS7YZv48/ZW0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHI
I07qZJJRVdeqDu3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fw
e9D6z7WOKAPLWEekA/U3FD+8CsscysUbUEsDBAoAAAAAAGpZbkkAAAAAAAAAAAAAAAAMABwAZmFz
dC9pbWFnZXMvVVQJAANXDCpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACABmX25JIY+9ODIA
AAAzAAAALAAcAGZhc3QvaW1hZ2VzL3BkZi1hcy1pbWFnZS1jcm9wLWJveC1zdGRlcnIudHh0VVQJ
AAOQFypYVwwqWHV4CwABBPUBAAAEFAAAAHPLSSxJdUlNzk9JtVJIAdGZeekKqUVF+UVWCpl5yflF
RanJJQopiSWJCskZqcnZelwAUEsDBAoAAAAAAHJZbkkAAAAAAAAAAAAAAAAMABwAZmFzdC9pbmxp
bmUvVVQJAANnDCpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACABuX25JsUn1sTwDAAAmCQAA
OQAcAGZhc3QvaW5saW5lL3F1b3RhdGlvbi10ZXh0LWNoYW5nZXMtZHluYW1pY2FsbHktc3RkZXJy
LnR4dFVUCQADnxcqWGcMKlh1eAsAAQT1AQAABBQAAACVVF1P2zAUfe+vuGLSZI+m+WraNJqQKAyG
xsbWIhiaeHDiW5otjavE2ejLfvvsJKVfKQw/RPF1cs+5PufeD6PR1SiAucilkbCFKGQAPM7kAjJM
OWaYkZy2zBuRFDPMzVMmmfnhdmzeYvgpluZYFFmEenciMjTn7AHNs4zN8CbGP51oPieO3aMQACuk
gPqzIBiVua8zxC+IPL8sgU+mGP3CLAj+PndMaBAQlop0MRNFDlHC8lyFxBwzJoU6JpFIc7mNdRX+
xEjCWwrlcatFhjQR0S+TXNA0iVM0L8gXql+MUMfbQI5pmKuypaooJt8pcpOMKCZMxr/RHMs4Ip/o
Qn13phKpYPqg3q/ob8wmifijiMXzNhwrouSOaqrq9Jxiqmkib8OU5eSSsgVm6uCEipmSIC5PyCE9
LRXI5SLBtX2lT2toGMbd+aUBhgFQVadvG4BYHctqg35SIH3fK7c9qwos9TSOiPVo23zQdywVL9MZ
hk53+A4APl5/vqyzDvVFvC6t4/os6jOfQio41rGuPeAWV99WBRhHP1KRzVgC0TRO+H3NwNAMoFzD
q9O7JQfBF4qCX2L6NYXeoNx6fncfBT+ydig4lr+XgrGkcGpAvUZCyIvSGkPxuH0Ljut0bK8Ndk1J
Y0S837e9/XxWIMYTCEAFcY2PsgnG8To9ZxOma0chc3ZhdHzS0/EiJSqF61E4+Ho8HkM8UVcBUcby
KYgMVMNgJiFOgWNYPBw0Fb/La0mlZtbreG4DL3+XV8QnoW+teKm3g4PWxbbmAN9qySvknfJc2+1Z
Dar2nzHWd4Ww7JTlej/PseDiaMvkGw6zKxXq8hr09PqbFo9UO3Vdn24252pVWJ+LRMYnepSmZ2pG
XE8zZHxb8+ewVde6zNOX/GOUBxrY4t1Jz7cUwPr2vtlrL9p6V1Vt6gZVn4jsB3rB2s0GCrvNBur7
KwPZ2kCVg+7Omyosf/9WCLljImcw4C5TrPf+vPxds95HpBbZeFHkMcrXqLtUj651xxrAG6k57af3
NADWfOkOOENbdwimD3Kqov8/FkoS5xstutM9z/Tq1gTWHeI5+yfwSpHDV4gZRq/O+JLC5ax6Splj
Mrlv/QNQSwMECgAAAAAAgFluSQAAAAAAAAAAAAAAAAkAHABmYXN0L3hzbC9VVAkAA38MKlhCGipY
dXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAHdfbkly/WXyhQAAAOkAAAAlABwAZmFzdC94c2wvdHJh
bnNmb3JtLXhoci1kb2Mtc3RkZXJyLnR4dFVUCQADshcqWHsMKlh1eAsAAQT1AQAABBQAAACtTjEO
wkAM2/uKfKBkYLsZJthAdE7bVJyUu1S5nNT+noN+gcWybMv2pGmNQh41A5upBVii8A8CIr5UauKC
F3LC6/DAgcdbdLzTrtWfXLzgQsVxK4LGRatNLb69rZ91OjUVJGaGM7Bw4uwQ06rmXXPCQSFAzTS2
UVcQpflP4/1Rz/P3RfcBUEsDBBQAAgAIAHhfbknOCSgCjQAAAPAAAAAnABwAZmFzdC94c2wveHNs
dC1iYWQtaW1wb3J0LXVyaS1zdGRlcnIudHh0VVQJAAOzFypYfAwqWHV4CwABBPUBAAAEFAAAAKWO
MQ7CMAxF957CFyge2DLDBBuIzk7rikhOXDmOBLcn0COwfPn/Z1t/1rwlIU9agM3UAqxJ+CcBER8q
LXPFEznhebrhxPGSHK/01uZ3rl5xper4qoLGVZvNfb07HyMtY8qbmo/N0qFnIKkwHIGFMxeHnQ6d
hH2EAK1Q7AVcQZSWf4sUrW1+fp/0O5HhA1BLAwQUAAIACAB4X25Jz49mDlAAAACgAAAAJAAcAGZh
c3QveHNsL3hzbHQtY29udGVudFR5cGUtc3RkZXJyLnR4dFVUCQADsxcqWHwMKlh1eAsAAQT1AQAA
BBQAAACtzLENwCAMBdGeKf4GUdpsg8AISzZGlokyfsgOaa67V0wnSw62AXI3v9BYCBAehBMkpDQC
tmKuSDzuLFyxuwjNHErRre7LLJW/sKeHyvGRL1BLAwQUAAIACAB6X25JgUp3rUsAAACsAAAANAAc
AGZhc3QveHNsL3hzbHQtdHJhbnNmb3JtLXRvLWZyYWdtZW50LWNyYXNoLXN0ZGVyci50eHRVVAkA
A7cXKlh/DCpYdXgLAAEE9QEAAAQUAAAAtcyxDYAwDETRPlPcCrRs48AFWXJsZCzmR6JgA+qv97eY
p5qUhoOZkSuGGgFTJxbQOOmFW1KlG1ty51DXV8TAYdHFvo7iVW375foAUEsDBBQAAgAIAFVhbkml
qGtWgAEAAHECAAARABwAZnVsbF9yZXN1bHRzLmpzb25VVAkAA0EaKlhCGipYdXgLAAEE9QEAAAQU
AAAApVFLb9swDP4rAU8boMavrMXcU7YEW7GuLeK0PQqKTddCZEmQ6CxBkP8+yS6G3qeLRILfg5+W
qxXfrKvn+2316QyEnjyUZ/B2IC338fmsZW0a/PDkRZ7GsrqZX/Pll3nBt/m8o17FpkNrHEEJm/WP
QFzdPT4AAzxarAmb0H9aVlXoiJoGERDwfbOsfsIlHAayj+A4doY/RT1euLuySlBrXH/1z9+dbvCI
zepbLPZ44lIfhJJNtPEfLhh0wnNPDToHJbkBL5fJmd9LayOySG8yBnroucM3h95Lo4OlnIGhDh2v
nfAdRpNxH02BabCjZiuUxwnay4DTb1CmDJQ4mYH4uBpvZNCF5MWooUefrASJZP1aJa+4+yUpuR9n
t2MKDA7oojqUi4nVCu+j8qLIsq8MrDyieudFLXbqg4lGUPhRyPIyS59+z4yePZgD9jt0s2zBZnma
Xb+HYR0SnQI31d0UCYNWHiPdGEYxabdK7E/jPkPwwKekBcVweCvj7Jjm59u/UEsDBAoAAAAAAIFZ
bkkAAAAAAAAAAAAAAAAFABwAaHR0cC9VVAkAA4EMKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBAoA
AAAAAAtgbkkAAAAAAAAAAAAAAAALABwAaHR0cC90ZXN0cy9VVAkAA9YXKlhCGipYdXgLAAEE9QEA
AAQUAAAAUEsDBAoAAAAAAIVZbkkAAAAAAAAAAAAAAAARABwAaHR0cC90ZXN0cy9jYWNoZS9VVAkA
A4kMKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAH1fbkkWQSdT7gAAAIkEAAAwABwAaHR0
cC90ZXN0cy9jYWNoZS9tZW1vcnktY2FjaGUtcHJ1bmluZy1zdGRlcnIudHh0VVQJAAO+FypYiQwq
WHV4CwABBPUBAAAEFAAAAO3SwUoDMRAG4LP7FHPUy2K0hW4QD24PCloEKQriYTaZpqFxpiTZim9v
ot48SQUvPSZkvmT+zEJ2oCaglJ52ejoDektKTdogBgPEbCJtJWbP7vnsXHXdC1zc8EouNQRxrmxD
yhhzatu2WfyamtMwumIlyneUEjq6/VKvStFGQykMZPeB6+N64ZV3Y8TshR99Xvfyug1UV9fINlDU
0KNZk4VTIMah3AkDmg2xTft1tUwUa15zb7L+YWs4bo5ODrn9Q25sv4P77AszOYnvxeUxhIP8V7Jn
nyv5UPQyNfVHNTzd92CEmUydpHJmh8Hb5gNQSwMEFAACAAgAAGBuSb9t4zOGAAAAwAAAAD0AHABo
dHRwL3Rlc3RzL2NhY2hlL25ldHdvcmstZXJyb3ItZHVyaW5nLXJldmFsaWRhdGlvbi1zdGRlcnIu
dHh0VVQJAAO/FypYiQwqWHV4CwABBPUBAAAEFAAAAJXMsQrCMBCA4b1PcaMuQrQFE8SlLg4WwUFB
HGJ6jYFwJ8m14tsbR0fXn5+v4wlUDUqZRptmDfjKStWLyM5GSOISPjlJIH9drpTWN9js8D76rYGM
1B8wZ+vxHOTRWkHP6W1gRmOM86r7kfUfcqAgX/JU9MC0p4ENXI4tOCZCJ6WVZ7Ix9NUHUEsDBAoA
AAAAAIFZbkkAAAAAAAAAAAAAAAASABwAaHR0cC90ZXN0cy9jYW52YXMvVVQJAAOBDCpYQhoqWHV4
CwABBPUBAAAEFAAAAFBLAwQKAAAAAACBWW5JAAAAAAAAAAAAAAAAGAAcAGh0dHAvdGVzdHMvY2Fu
dmFzL3dlYmdsL1VUCQADgQwqWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAel9uSaESnOYQ
AQAAoAIAADsAHABodHRwL3Rlc3RzL2NhbnZhcy93ZWJnbC9vcmlnaW4tY2xlYW4tY29uZm9ybWFu
Y2Utc3RkZXJyLnR4dFVUCQADtxcqWIEMKlh1eAsAAQT1AQAABBQAAAC1kU9PwzAMxc/sU/gIB6pm
7TYtQpNYdwAJENo0cZh2SBs3rRbsKUn59+lJB1w4UuGbLfn3np93QsjJXE5EMs1me7iKBcX6ermB
RSyobeebRyTdklmjReVxg0HCLn2b1XOdCsxyodM9LC1XB0ihUR6I6fIDHYPDGiruKMB49MAvIHL4
kQN89ULkSVxTFlyoHB7ZhSizG2di2lu5pZoXEiwbE8fgg3LBJ0nyB9QKy85Elsdwj94rg3df1JNt
CXHRoh4C7s0VTHVrOqdCy/TUhqbg56PFvrtRpC06CYWqGtQxKCRVRk0oVXWI+fphV209uj6vVVvF
7/xmSzgfnV0MUiD9HdzpLhXQsHuPXOqs/U/yJ1BLAwQKAAAAAACCWW5JAAAAAAAAAAAAAAAALwAc
AGh0dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvVVQJAAOEDCpY
QhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAB8X25JZdEZiH8AAACVAAAAUQAcAGh0dHAvdGVz
dHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3Ry
aXBwZWQtc3RkZXJyLnR4dFVUCQADuxcqWIQMKlh1eAsAAQT1AQAABBQAAAANiDEOwjAMAHde4Q/Q
pAUEyt6lC1LhA2niqqmEHdmuBL8nuuFOt5nV4Fw/3Dvf6MPDe+8SkyFZLlpZixWmaBbT9mlTI+WF
v05Q+ZCE2mpFQTlvGHOTmpRaMXe7huEaLrcA0wvGeX7O8P5VHEVYAhyUcS2EGYoCsUEk4GXHZKc/
UEsDBBQAAgAIAHtfbkll0RmIfwAAAJUAAABqABwAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRp
b25hdHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVm
ZXJlci1hbHdheXMtc3RkZXJyLnR4dFVUCQADuRcqWIIMKlh1eAsAAQT1AQAABBQAAAANiDEOwjAM
AHde4Q/QpAUEyt6lC1LhA2niqqmEHdmuBL8nuuFOt5nV4Fw/3Dvf6MPDe+8SkyFZLlpZixWmaBbT
9mlTI+WFv05Q+ZCE2mpFQTlvGHOTmpRaMXe7huEaLrcA0wvGeX7O8P5VHEVYAhyUcS2EGYoCsUEk
4GXHZKc/UEsDBBQAAgAIAHtfbkll0RmIfwAAAJUAAABrABwAaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1l
dGEtcmVmZXJlci1kZWZhdWx0LXN0ZGVyci50eHRVVAkAA7kXKliCDCpYdXgLAAEE9QEAAAQUAAAA
DYgxDsIwDAB3XuEP0KQFBMrepQtS4QNp4qqphB3ZrgS/J7rhTreZ1eBcP9w73+jDw3vvEpMhWS5a
WYsVpmgW0/ZpUyPlhb9OUPmQhNpqRUE5bxhzk5qUWjF3u4bhGi63ANMLxnl+zvD+VRxFWAIclHEt
hBmKArFBJOBlx2SnP1BLAwQUAAIACAB7X25JZdEZiH8AAACVAAAAaQAcAGh0dHAvdGVzdHMvY29u
dGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQt
d2l0aC1tZXRhLXJlZmVyZXItbmV2ZXItc3RkZXJyLnR4dFVUCQADuRcqWIMMKlh1eAsAAQT1AQAA
BBQAAAANiDEOwjAMAHde4Q/QpAUEyt6lC1LhA2niqqmEHdmuBL8nuuFOt5nV4Fw/3Dvf6MPDe+8S
kyFZLlpZixWmaBbT9mlTI+WFv05Q+ZCE2mpFQTlvGHOTmpRaMXe7huEaLrcA0wvGeX7O8P5VHEVY
AhyUcS2EGYoCsUEk4GXHZKc/UEsDBBQAAgAIAHtfbkll0RmIfwAAAJUAAABvABwAaHR0cC90ZXN0
cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJp
cHBlZC13aXRoLW1ldGEtcmVmZXJlci1uby1yZWZlcnJlci1zdGRlcnIudHh0VVQJAAO6FypYgwwq
WHV4CwABBPUBAAAEFAAAAA2IMQ7CMAwAd17hD9CkBQTK3qULUuEDaeKqqYQd2a4Evye64U63mdXg
XD/cO9/ow8N77xKTIVkuWlmLFaZoFtP2aVMj5YW/TlD5kITaakVBOW8Yc5OalFoxd7uG4RoutwDT
C8Z5fs7w/lUcRVgCHJRxLYQZigKxQSTgZcdkpz9QSwMEFAACAAgAe19uSWXRGYh/AAAAlQAAAH4A
HABodHRwL3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXIt
aGVhZGVyLXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLW5vLXJlZmVycmVyLXdoZW4tZG93bmdy
YWRlLXN0ZGVyci50eHRVVAkAA7kXKliDDCpYdXgLAAEE9QEAAAQUAAAADYgxDsIwDAB3XuEP0KQF
BMrepQtS4QNp4qqphB3ZrgS/J7rhTreZ1eBcP9w73+jDw3vvEpMhWS5aWYsVpmgW0/ZpUyPlhb9O
UPmQhNpqRUE5bxhzk5qUWjF3u4bhGi63ANMLxnl+zvD+VRxFWAIclHEthBmKArFBJOBlx2SnP1BL
AwQUAAIACAB7X25JZdEZiH8AAACVAAAAagAcAGh0dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0aW9u
YXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQtd2l0aC1tZXRhLXJlZmVy
ZXItb3JpZ2luLXN0ZGVyci50eHRVVAkAA7oXKliEDCpYdXgLAAEE9QEAAAQUAAAADYgxDsIwDAB3
XuEP0KQFBMrepQtS4QNp4qqphB3ZrgS/J7rhTreZ1eBcP9w73+jDw3vvEpMhWS5aWYsVpmgW0/Zp
UyPlhb9OUPmQhNpqRUE5bxhzk5qUWjF3u4bhGi63ANMLxnl+zvD+VRxFWAIclHEthBmKArFBJOBl
x2SnP1BLAwQUAAIACAB7X25JZdEZiH8AAACVAAAAbgAcAGh0dHAvdGVzdHMvY29udGVudGRpc3Bv
c2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQtd2l0aC1tZXRh
LXJlZmVyZXItdW5zYWZlLXVybC1zdGRlcnIudHh0VVQJAAO6FypYhAwqWHV4CwABBPUBAAAEFAAA
AA2IMQ7CMAwAd17hD9CkBQTK3qULUuEDaeKqqYQd2a4Evye64U63mdXgXD/cO9/ow8N77xKTIVku
WlmLFaZoFtP2aVMj5YW/TlD5kITaakVBOW8Yc5OalFoxd7uG4RoutwDTC8Z5fs7w/lUcRVgCHJRx
LYQZigKxQSTgZcdkpz9QSwMECgAAAAAAgVluSQAAAAAAAAAAAAAAABwAHABodHRwL3Rlc3RzL2Nv
bnRlbnRmaWx0ZXJpbmcvVVQJAAOBDCpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAB6X25J
Wh7blYQAAADAAAAAOwAcAGh0dHAvdGVzdHMvY29udGVudGZpbHRlcmluZy9hbGxvdy1hZnRlci1y
ZWRpcmVjdC1zdGRlcnIudHh0VVQJAAO4FypYgQwqWHV4CwABBPUBAAAEFAAAAJ3MsQrCMBCA4b1P
caMuQmqrGMSlLg4WwUFBHGJ6jQfhTpJrxbe3voLrz8/XygimAmNsvbF1CfjOxlSLKN5FSOoTviQp
cbiVS7Na32G7x8cQdhYycnfEnF3AC+mzcYpB0sfCjIcY50X7t0xM+iPPk07CB+7FwvXUgBdm9Dq1
6RldpK74AlBLAwQKAAAAAACKWW5JAAAAAAAAAAAAAAAAFQAcAGh0dHAvdGVzdHMvaW5zcGVjdG9y
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
gmuqvb9pjS+Q7MhJg5wmumN6oyUr+JwUYJgIjaS7pNlq78rW/I/f7nc7iTF9fpnMRpMBPIrgppIx
yo7DesSJyWGKUlcKiCW1L4051BXQQQObg+gedFmG5A0uwr7dI5fu2VxO2YX8ruKdrU2Kp1S0VpAK
PR4NqZddYvuigxRMS2froJv97hPFm8pjc3rVVHoMCgptVlhCBkh6kV4GC23WKYfxtNnNIoYmZUNn
RP1jp0S3rs75U34AUEsDBBQAAgAIAARgbkmrdwevbwEAACoGAAA6ABwAaHR0cC90ZXN0cy9tZWRp
YS9obHMvdmlkZW8tY29udHJvbHMtbGl2ZS1zdHJlYW0tc3RkZXJyLnR4dFVUCQADyBcqWJgMKlh1
eAsAAQT1AQAABBQAAADtlE9LAzEQxc/2U8xRL7K7tVajCNqKCnZZqKIgHtLs7DY0zSzJrOK3d7Yq
KJ78g3rwmPDymzczj+R0B+kWpJlKEpUMAe9jmm5tOjLaQWATsKHA1tc3WT/dHd7C/hhnbX2gIKIv
JxijrvHK8nykGWsKDwrWfevcRi//NNl6yx1yKnRL/sxXpOC6GIEh79Gw3InmTjtb9m5e+JvDQceY
Hp8Ul5PiAA6ZcdlwjnxPYTEhYVKYIreNAk8s9rkrDm0D/kkDyyfRHuiyDFIbbISV3R+qkn9hF/y8
inOqa1EcyaOFAnno8M2Qtv+kfdaBR+QrW7dBd/tdJYqWjcPudKp96TAoGGkzxxISQK9n0hnMtFlI
DuPXZncZMXQpG1vD6h1bEt1b2+gtG6yzRgfRQoGxCGSk/YtY6G7QBjAECpJLKM7GkCYZxDm1TjAI
ab+bUgKVdQhUVVIS+sPtjyLTV8jBe+JgJ9v5d/mNLvM/+Df+HvkRUEsDBBQAAgAIAAVgbknow5JD
LQMAAKiZAAA8ABwAaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlkZW8tZHVyYXRpb24tYWNjZXNzaWJp
bGl0eS1zdGRlcnIudHh0VVQJAAPKFypYnAwqWHV4CwABBPUBAAAEFAAAAO3cTW/bRhCA4XP8K+bY
HGyRchLLTJPClZI4gC0I/kALBDnQ5JgiQu4yy6WD/PsMLTVw0QLNl4scXvhi0ruzz87OUuIevPQ3
kj6SdJolSZbMRD/0afpor/FF3kiIRdDOh1i76s10Pz08eCu/LvRqqJ5n0qsrT7Xv80r/qON6nket
fPiYyS9uaJqHO8tvjly7Oo4hzy167d1rd+0z+XM1l8I7p0W0e9bmJm/qcufNX/H3nszSt3J8cbE6
0/eD9lGu6+o4xm57uajLMy20vtEz7Tvvep3nTXOVF+8ycX4MHdVFOVFXxbWETdNSdkVDmPtSpe5l
miT/NaBdLoa2e1m7vLk8OzlyNmrrox6VZbDpZJJvfrG8HOwl9pNaN2srQ2hkbdxsMvn8p2yWJMmk
1bLOJ9bJD6HQfrJu+kmlToNlfPfGl3vduvutHOzSEvNs7PIFyO3lPKhFeRGCt0m2rWUgE3WFHywb
waafu3H+PmRy9TGqhNxVajfLuylrNinb3bS02/+erENb4fMXr1aXp6vnchSjtl1cavzgw7tTbyvu
w7nGoRtXI1pxxbE0ZOjEbdpIu2n09HMGbYzbYro7ymFyb6Msv2OnxO1GOfFVZS1+t05Wdtax0bsl
fJBMf0Z+zEOce2eVsy2y2/3u267R8erY6qFRK5F5XqytZhKroPzKZibj7rKnRP99ubvsNYzPgEVd
3Fbn32Pb82bnwcOdttNq2uXB2spK+1XwtlX6i36Vj4kutrVZO1m9XkiaTKVf+6GxMCrp/pilxHZG
o+Kvr21I2T948rUh0zshH/8z4uPZdIbyByqX9/bJxSqhRIkSJUqUKFHynZBVQokSJUqUKPnspZZQ
okSJEiVKlChRokSJEiVKlChRokSJkrPwQ87CUaJEiRIlSpQoUaJEiZI3KlaJVUKJEiVKlChRokSJ
EiVK3vuYP1WKEiVKlChRokSJEiVKlCi/5e00Te7rf3z/0MisP0qUKFGiRIkSJUqUKFGiRIny/z7p
YJVYJXY8SpQoUaJEiRIlSpQoUaJEiRIlZzucbaFEiRIlSpQoUaJEiRIlSpQoUaJEiRIlSpQov1T5
CVBLAwQUAAIACAADYG5J2qDUMsoAAAA3AgAAMgAcAGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtZG9j
dW1lbnQtcmVmZXJlci1zdGRlcnIudHh0VVQJAAPFFypYkAwqWHV4CwABBPUBAAAEFAAAALWQsU4D
MRBEa/IVW0Jzso/QWIgilwIkSIcoEMWevXGsmN3I3gPx9/iAjgqdKHekebMzO3kDuwbbO2OcuQJ6
r9auuyweMxT1hU5SNHF87i97Y1/g+o73cuMgS4xNhqpYtHZdt9r9GbWlcYqNVUkfqFaMdP9N3TTT
0UEzZgpLwPNzg/A+xamgJuGnpIdBXk+Z5usWOWQqDgb0BwpggBjHlgkj+iNxqMtaPVYq817b5NX9
Yjs4X51dLErg8DPcVy9UilI+GpennP+T/AlQSwMEFAACAAgAA2BuSXiv1PvkAAAArAIAACoAHABo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLWRvY3VtZW50LXN0ZGVyci50eHRVVAkAA8YXKliRDCpYdXgL
AAEE9QEAAAQUAAAAtZFBSwNBDIXP9lfkaC8ys1YPg3hwe1DQIogoiIfsbDodOiZlJlvx3zsrXsSD
yNJjQt73kpeV7MEuwDbOGGfOgN6LtYuTJB4TZPWZdpI1cnhpThtjX+FiSd0QLh0U4v6OSsFAT1E3
LSoFyR8OjnlIaT5b/SCf/4McOeqIfKj0KHzDa3HwfN+CF2byWnt1Zo8p9hNcCun3+rcSQp24qqKt
gypMNAmsmLUVXscwZBy3/cpH3naJxuoauU+UHbToN9SDAWLsqid06Lc11TLtqsdCecxsGb26X+z6
n9nRfJLDof7+F/kTUEsDBBQAAgAIAARgbknwiV2p6AAAAMYDAAA5ABwAaHR0cC90ZXN0cy9tZWRp
YS9tZWRpYS1wbGF5LXN0cmVhbS1jaHVua2VkLWljeS1zdGRlcnIudHh0VVQJAAPIFypYlgwqWHV4
CwABBPUBAAAEFAAAAN2TwUoDQQyGz/YpcrQXmVmLyCAe3B4UtAgiCuIhO5tOh45JmclWfHtnxZun
unjxmJB8f/KHrGQPdgG2ccY4cwb0XqxdnCTxmCCrz7STrJHDS3PaGPsKF0vqhnDpoBD3d1QKBnqK
umlRKUj+cHDMQ0rz2erX5MhRR+RDpUfhG16Lg+f7Frwwk9eaqzV7TLGfoFJIv8e/lRBqxVVt2jqo
jYkmgRWztsLrGIaM47Rf/sjbLtEYXSP3ibKDFv2GejBAjF3VhA79trpapm31WCiPni2jV/eDXe8z
O5pPUvirux9GPv/n5EO+4BNQSwMECgAAAAAAiVluSQAAAAAAAAAAAAAAAB4AHABodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9VVAkAA5EMKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAI
AANgbkkDpO6C7AAAAFsBAABcABwAaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFz
b3VyY2UtcGxheS10aGVuLXNlZWstYmFjay13aXRoLXJlbW90ZS1jb250cm9sLXN0ZGVyci50eHRV
VAkAA8YXKliRDCpYdXgLAAEE9QEAAAQUAAAAnY9BS8NAEIXv+RVz1ENLNmkKLiJocyloEVtUkB4m
m0m6sJkNs5uW+Ovd4sG7t+Hx+L43O38GtQJV6DzXeQV0CUqtls4bdCDRCI1eouX+qyiLvDzCfU3N
1D9oCMTtC4WAPX3YeNpgpN7LrOGGJ+dus92/yZZtvCL3iW49b7nzGj5fN2A8M5mYstQ5o7NtVuRq
vVBq8WdaL5WqoJ6G8S0tJDkI0a9CV3lZ3KkjbHv2ksxXYBTvDnagBgOlnyI0MxhnidNFBqeUPr7v
cRgdPU1dR1LbMDqcn3EmgQsGwLalFqIHhDCzOYln+02S/QBQSwMECgAAAAAAi1luSQAAAAAAAAAA
AAAAACcAHABodHRwL3Rlc3RzL21lZGlhL21vZGVybi1tZWRpYS1jb250cm9scy9VVAkAA5UMKlhC
GipYdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAAAItZbkkAAAAAAAAAAAAAAAA5ABwAaHR0cC90ZXN0
cy9tZWRpYS9tb2Rlcm4tbWVkaWEtY29udHJvbHMvc2tpcC1iYWNrLXN1cHBvcnQvVVQJAAOVDCpY
QhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAAEYG5JraV/HKYCAAAzHwAAYgAcAGh0dHAvdGVz
dHMvbWVkaWEvbW9kZXJuLW1lZGlhLWNvbnRyb2xzL3NraXAtYmFjay1zdXBwb3J0L3NraXAtYmFj
ay1zdXBwb3J0LWJ1dHRvbi1jbGljay1zdGRlcnIudHh0VVQJAAPHFypYlQwqWHV4CwABBPUBAAAE
FAAAAO1XXU/bMBR9Hr/iPm4PtE5KS5cxJtaygQQoaov2gNDkJreJhWN7tlPEv9816Rho07QNISHh
5CVO7sfx8bnXzkWSZoxlbNQb7by9hKPFIp/htxadh5Wojrw3m+FUlDMsUKxxhs5o5XDCpVzy4ioD
paHQyqPycIKq8jXYzrSEbUBrJ7pEEA5SxrYu/pyQhtO2MZ+E4vJ8dnKgKGujPR6UpUXnMuDdAyTp
bo/RnZAb2UJrJdQEN+v37z5lY8ZYv8FS8D456dYW6Pq1dP0KFVrucXuty56pzYeypaHQ6n1w+QuQ
m+HEIkU5tFbTJJuGGMgAVaFbYsPS9LkK89c2g+WNR7BcVUgvy/uUyY6y7c6SXv+WrCG7hL354ef8
/DTfhwPvsTH+DP21tlenWgmv7Rx9a8JqeHDovVAVtAZUZwNNZ/TujkHKIXXB5YMsyZNlOdNrSHbg
Ry7Aa5ckO73bj2B9YdFoG8JdpINkPCAcx2ql9zNyr6qQxXluvev1ev8RaorLtqJYhPiUUPEKT7qo
H8mJFEyOEsv7TIyGz4iJO/iBgolWJMKNXr8IX5PyjMQwOiJpSSS1TXhRk/wYiZEvaWYQChVV6R7H
3blDG1ZlKopboT+MncHrrVdvthqDVWq4JVvI0eVWU9W5hct5ILrYyFwoyI+nkLAUXK1bSWEQkkFg
iVGRSQS9WlFKGOyO/jVkci/k8NeIw3E6jihfHMrHKF+Vm7ZxW2/U8ittb0jvqpUyKj6ifJ4of25n
43CM2aMLPolq7unU0uSS31CqfbpgZVbu6xzxik55m90EwyYSNkW4JskDhzWXogRDJzvhMNguRINx
uWIbjW00oowon02zp39fxp6m2T8s/d1Y+hHli9rsouIjyogy1mWcf1RpRBlRRpQRZUT50lB+B1BL
AwQKAAAAAACNWW5JAAAAAAAAAAAAAAAANgAcAGh0dHAvdGVzdHMvbWVkaWEvbW9kZXJuLW1lZGlh
LWNvbnRyb2xzL3N0YXR1cy1zdXBwb3J0L1VUCQADmQwqWEIaKlh1eAsAAQT1AQAABBQAAABQSwME
FAACAAgAA2BuSWdw5f1jAQAAWwUAAF4AHABodHRwL3Rlc3RzL21lZGlhL21vZGVybi1tZWRpYS1j
b250cm9scy9zdGF0dXMtc3VwcG9ydC9zdGF0dXMtc3VwcG9ydC1saXZlLWJyb2FkY2FzdC1zdGRl
cnIudHh0VVQJAAPGFypYlQwqWHV4CwABBPUBAAAEFAAAAO2TQU8CMRCFz/Ir5iiXzXZhAashUTBK
ImYTJB6Ih7I7uzR02820K/Hf2wU1JJwUSTx4bDrzvTev0wWLeBjysBf0+vELXM1u75L5NBnCtXNY
Vu4R3cbQemq0dIZm6OqKgzYOLDondQF1BXpXA+Wu6BJElhFaC9KCMqlQrcWeSu9kKo/mFVgXPrUA
N5axbrC9BHIpYWWowS2iDusz72OiczPkvr0oGhXrBDkbBMEPUGNc1oVnecdT70oU+LCj3vimNQff
qDDbT+Ii/kNJfNlvIhgZncuiJuGk0c/SrUamrBQ2p3uhM4XEYSTSFWYQAmqx9JPBUqRr1Jk9Lru5
RWpeZSxTxw/YHM5bZ+1WWWERVYJ8LSRoEzKpH//JJqIJOgUkMgRSQzIZAwsjsCtTK49BYJ0mpRBy
qRBMnntJ6PR730WyPWR8SIwH0eDf5S+6PGandPbxIbebLBwWht78JulaqfYJye9QSwMEFAACAAgA
BWBuSaShMMiDAAAAwAAAAFcAHABodHRwL3Rlc3RzL21lZGlhL21vZGVybi1tZWRpYS1jb250cm9s
cy9zdGF0dXMtc3VwcG9ydC9zdGF0dXMtc3VwcG9ydC1sb2FkaW5nLXN0ZGVyci50eHRVVAkAA8oX
KliZDCpYdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy7S1EIhiEtdHCyCg4I4xPSMB+FOkmvF
tze+guvPzzfIDKYF09i6tnUH+M7GtKso3kVI6hO+JClxuDZr05kbbHZ4n8LWQkYeD5izC3gmffZO
MUj6WFjwFOOyGv6WiUl/5KnoJLznh1i4HHvwwoxeSyvP7CKN1RdQSwMEFAACAAgABGBuSaijhSTs
AAAAXwEAAC0AHABodHRwL3Rlc3RzL21lZGlhL3BkZi1zZXJ2ZWQtYXMtcGRmLXN0ZGVyci50eHRV
VAkAA8gXKliXDCpYdXgLAAEE9QEAAAQUAAAAhY9Pa8MwDMXv/RQ69ZbYCYOmhjBK17LDDiN0p7KD
G6uJwf9my4N++zls7XXS5T1+T0I6N63gXPCu7rr2E15Pp/cBvzImgqueFvuSbThqJ83H8LZzakDr
CXdKRUxJgPwV0LSbmpduyljJQo4GZqIgGHsg0XHOmUWlJfvWCn1Fc/REBlVlvFT1OOlnJy32ZaXP
ccTEqFxSB3Vd36P9dqk13QL2MgSjR0naO1Yyq/O/z/zZfURJeIjRx723Fh0JQDf67AgjKpAOcIEC
LjdCiNJNCAbdRDNYnaykcYYK0uyzUXB5sBZ0uuvNtnta/QBQSwMEFAACAAgABWBuSYXpn0C/AAAA
kgEAAC8AHABodHRwL3Rlc3RzL21lZGlhL3JlbG9hZC1hZnRlci1kaWFsb2ctc3RkZXJyLnR4dFVU
CQADyhcqWJgMKlh1eAsAAQT1AQAABBQAAAClkDFPAzEMhWfuV3hsF5QcXYgQQ68DlWg3xIAYfImb
Rg12lfha9d8TEAtiAsYn+X2f/LZyArsA2ztjnLkFOldrF9dZPGYo6gsdpWji+NLf9Ma+wt2Kxine
O6ikG6oVIz1KjO1i2UoHB62YKXTbv4MViw7CuxSngpqEn5PuB3k7ZvpID8ghU3EwoN9TAAPEODYn
jOgPxKH+R076VKmseSer5NX9YDuYdVfz7wZrfmXg8DXc51+oFKVcGpennOfdO1BLAwQUAAIACAAF
YG5Jmenh20cBAAB0AgAALwAcAGh0dHAvdGVzdHMvbWVkaWEvdGV4dC1zZXJ2ZWQtYXMtdGV4dC1z
dGRlcnIudHh0VVQJAAPKFypYmwwqWHV4CwABBPUBAAAEFAAAAM2QQU8CMRCF7/yKORE9sNtdSMRG
NAQ0mighiNGEcCjbYbdJd7q2swj/3hKFs0fby7y+N19mOnM7yAaQ5VIImQnAr5Blg8S6QlnwXHhs
nGdD5Srv5yJbw80UN215KyEg6RcMQZX4briaKMbS+YOEC2qtvezM/iHZkOEj8jXSjaMn2joJH/MJ
FI4IC45vMbNT1ujO6sRPhiJfw+NyOV/gZ4uBYWvKo5y2dfNgSNm3xfOY9AJrxzjW2ke6BPVTxDGv
EhFvFttiFlpvoWJuZJqeLTkUQqQ1aqPSndHoelx5x2xR96xTOilKc0eqxlFEutYXGFKOkyS85+4p
Oro+ni4fGhwx7jltrDL0hz1+5cRj/Ol7752fuLpGYglIhWuJ0aMGRYBHU8LmwAheUYlgkUquoDah
VlxU0INQudZq2Jy9HEw41YOB6He+AVBLAwQUAAIACAAGYG5JEm/HLmMBAACsBgAAJgAcAGh0dHAv
dGVzdHMvbWVkaWEvdmlkZW8tYXV0aC1zdGRlcnIudHh0VVQJAAPLFypYnAwqWHV4CwABBPUBAAAE
FAAAAO1TTUsDMRA9218xx/bQbbL9kiCCbhEFLdIqCtJDmp1uY9Nkmc226q83a0UF0YO9tOAtE2Ze
3nt5EzPea3Le5B3gsWBMcB6FKxiUy3yENkW6IcSHuB0zLrqsx/vxBDYVJGdD9GtHC9DWI1lpAIkc
QZ09KcalaI1dSQoTqebY+uj+PDX7MYu6Ub91Te4RlR+V1usltsZIWhr9IqcGT0jN9Qojleei22ON
WrxPjHmv3agN3Qq+sAVcF5x3IuNUeJ+8IswdeW2zDekJHA1wWmbHAgr0V1gUMsNLl2Wh4zQMLQSE
QYPpNsBekk+cnemsJOm1s3fazxO3zA1W1bm0qUEKjlVOpMAAbaUthalUi+BysZ2q2wLpws7cQCsv
vmELqNcOtvPNpu/GvemSHjNHzwHXlsb8kKHD/r6lflcZb53633/v78jaal9BjgN6SHmVQAH31wko
Z20QFu5CzypoSv+3due29hVQSwMEFAACAAgABmBuSc5bgG/iAAAArAIAAC0AHABodHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLWVycm9yLWFib3J0LXN0ZGVyci50eHRVVAkAA8wXKlieDCpYdXgLAAEE9QEA
AAQUAAAArZExTwMxDIVn+is8tgu6HJ0ixMB1AKmtkCoEEmLw5dw0ampXia8V/54cYoKpHKMt+3vP
z2s5gZmDqW1VWWOAztmY+XUUhxGSukRHSRrYv9U3dWXe4XZBbe/vLGTibkU5o6eXoLsGlbykDwtT
7mOcTdZ/JgcOOiA3hR6EH3krFl6fGnDCTE5Lr8ycMIbuh0p9kX/9tr8U78vEfVnaWyiLkUaBFZM2
wtvg+4SD26985HCMNFQPyF2kZKFBt6MOKiDGtmhCi25fUs3jrnrOlIbMFsGp/cUu/5lczUYpXPL3
/yR/AlBLAwQUAAIACAAHYG5JQgzuNRMBAADjAQAANgAcAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8t
ZXJyb3ItZG9lcy1ub3QtZXhpc3Qtc3RkZXJyLnR4dFVUCQADzRcqWJ4MKlh1eAsAAQT1AQAABBQA
AACdTtFKwzAUfd9X3MftoV2SFjeDCGNFJugYdaIw9pA1d10wTWqSVv17Mzp8FeW+nHPPueeete2B
5kAZJ4RTBvjhKc1TbSuhwYXKYWtdUKbesYwRuoebAg9dfcvBo5GP6L2o8UWF01IErK374jA2ndaT
0frfycqocI58iunKmntztBxeN0uorDFYhbiLnl5oJUe7S36WXs3YHlbb7abE9w59gKOqVyG0F1oo
WWKFqscSfWuNx6XQ+iCqNw5uECScoj+yQYec5DBG56yDhLLrbD6BY8RnE59OKZulJA7lc0LIVFr0
ibEhwU/lQ9q0WP9WLtKia9o7ZYR+Lh8WJjZsbMCFlLGD5yAGAD+v4ln0Quf0H1p8A1BLAwQUAAIA
CAAIYG5JxGK/p8sAAAAkAwAALAAcAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9hZC10d2ljZS1z
dGRlcnIudHh0VVQJAAPPFypYnwwqWHV4CwABBPUBAAAEFAAAAMWRsU4DMQyGZ/oUHsuCLkdviRBD
rwOVoBtiqBh8iZtGDXaV+EC8PWnVCTZKxWZL9vfL/lbyDmYGprVNY2tBH8WY2U0Shwmyukx7yRo5
rNvbtjGvcLegYQz3FgrpE5WCgR4lhDoxr0s7C3UxkZ+sfg9WzNoLb2IYM2oUfom67eVtn+jQPSD7
RNlCj25LHhogxqFmwoBuR+zLOeGkz4XykjeyiE7tD7aF6eTq+qwE9qfHHe9CpSD5s3J5TOk7ubuU
ke4/jXQXN9L9oZEvUEsDBBQAAgAIAAhgbkl5fwN45gAAAGwDAAAvABwAaHR0cC90ZXN0cy9tZWRp
YS92aWRlby1wbGF5LXByb2dyZXNzLXN0ZGVyci50eHRVVAkAA9AXKlifDCpYdXgLAAEE9QEAAAQU
AAAAzZFPSwNBDMXP9lPkaC+ys/1zGMSD24MFLQURBfGQnU2nQ8ekzGQrfntnxZMeBIvQY0LeLy8v
KzmAmYKpbVVZMwN6y8ZML6I4jJDUJdpL0sD+uZ7UlXmBywW1vb+ykIm7O8oZPT0G3Tao5CW9Wzjn
PsbxaPVncuCgA/K+0IPwkjdi4WndgBNmclp6ZeaAMXTftsz/zf/8BP3rl/1b8b5MXBfRzkIRRjoK
rJi0Ed4E3ycc3H7mI6/7SEN1g9xFShYadFvqoAJibMtOaNHtSqr5uKseMqUhs0Vwan+wy39GZ+OT
/Ptv5A9QSwMEFAACAAgACmBuSeBDiHCDAAAAwAAAAD0AHABodHRwL3Rlc3RzL21lZGlhL3ZpZGVv
LXBsYXktc3RhbGwtYmVmb3JlLW1ldGEtZGF0YS1zdGRlcnIudHh0VVQJAAPTFypYowwqWHV4CwAB
BPUBAAAEFAAAAJ3MsQrCMBCA4b1PcaMukovFIYhLXRwsgoOCOMT0TAPhTpK04tsbX8H15+frZQZs
AbVRyuAG6J0R21UUZyOk4hK9JJXA/qbXWuEdtnt6TH5nIBMPR8rZerqEMna2kJf0MbDgKcZl0/8t
Bw7lR56rHoQP/BQD11MHTpjJldrqM9sYhuYLUEsDBBQAAgAIAApgbknMcDgdugAAAJIBAAArABwA
aHR0cC90ZXN0cy9tZWRpYS92aWRlby1xdWVyeS11cmwtc3RkZXJyLnR4dFVUCQAD1BcqWKQMKlh1
eAsAAQT1AQAABBQAAAClkDFvAjEMhWfuV3gsS3W5MkWoA8cAUsuGOlQdfIkJEcFGiQ/Ev2+K2LrB
+CS/75PfRs5gZmA627a2a4EuxZjZaxKHCbK6TCfJGjl8d29da35gvqRhDO8WCuknlYKBPiSEerGo
pYOFWkzkm83jYMWsvfAuhjGjRuGvqPtejqdEf2mF7BNlCz26PXmobMahOmFAdyD25Rk56bZQXvNO
ltGp/ce28NJMpk8Z2N+Hu/2FSkHytXJ5TGna/AJQSwMEFAACAAgAC2BuSRyqY4j2AAAAWAUAACoA
HABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXJlZGlyZWN0LXN0ZGVyci50eHRVVAkAA9UXKlimDCpY
dXgLAAEE9QEAAAQUAAAAzZIxTwMxDIVn+is80gWdj04RYuA6FAkqJIRAQgy5nJtGDU6V+Ir49/gQ
GwMSp4OOiezP9ntvnQ6AC8DaVJWpK6C3grg4i8nZCFlcpn3KEtg/1+d1hS9wsaS295cGCnF3S6VY
T49Bto0V8im/GzjlPsb5bP1rcuAgA/Je6SHxNW+Sgae7BlxiJif6pzUHG0M3Ykoh+Vr/JnmvFVfa
tDOgjZFGgcVmaRJvgu+zHbb91Ce97iMNr5XlLlI20Fi3pQ6UzbbVmdBat1NVy7irHgrlQbNlcGK+
sdWf2cl81ISpfD8WMv5JVnGqrOJ/ZhUnzyoehe8/kT8AUEsDBBQAAgAIAAtgbkmnt2fxLwEAAI8D
AAArABwAaHR0cC90ZXN0cy9tZWRpYS92aWRlby11c2VyYWdlbnQtc3RkZXJyLnR4dFVUCQAD1hcq
WKcMKlh1eAsAAQT1AQAABBQAAADlUk1LAzEQPdtfMUcLUjbbWjTUIt0iClrFIgriIZtM09A0Kcm0
0n/vbPXgBwjSo3MI5PHmzbyZmcQNiB6IUhaFLAXgaxai1/FRKw+JdMJVTOSCfS67ZSFeYDDGem2H
EjIGc4M5K4uPjuaVIrQxbSUchrX37dbkXym74KiRnLK6i+EqzKKEp7sKdAwBNTHGnI3yzrQGHHDh
7GhLOKWEaglDjq/QlBTl62hvA96jMhI+sfkxEGdwAjWDGc6hAIpxAUWnL/rd04KN6g5DXH258kh4
BGKXlWF4xqzjHeGb3fJPg6SPOXKLlhkjTlpI4ESPZh9hUomqGGbOrpNqxrZb1LsN/l2qYDwmCZXS
czRsHIOquSbUSi94vXk/Vw8ZU7O8sdMkf2jzobQO2ntV+P0A3wBQSwMECgAAAAAABGBuSQAAAAAA
AAAAAAAAABUAHABodHRwL3Rlc3RzL21lc3NhZ2luZy9VVAkAA8cXKlhCGipYdXgLAAEE9QEAAAQU
AAAAUEsDBBQAAgAIAARgbknqziMa2AAAAEoGAABDABwAaHR0cC90ZXN0cy9tZXNzYWdpbmcvY3Jv
c3MtZG9tYWluLW1lc3NhZ2UtZXZlbnQtZGlzcGF0Y2gtc3RkZXJyLnR4dFVUCQADxxcqWMcXKlh1
eAsAAQT1AQAABBQAAADtzjFLAzEYxvG9n+IZdZEk19ojFJd26aAEFBTEIc29lwbTvEeSq/jtPTfB
qYPgcOvLy+/5nwbyarC5UIahYjI7KuWpGPuu4RwoZ84ICWa/gxQK5chj7HAgyAahQKAPkcB9X6ii
Wd8uTpeR8ge5+i2uWtVeSs6Vc+VcOVf+QeUDnyGXkEoLocUa9FGkXN5EdjYiV5dp4FxD8q+qkW3z
hs2ODqO/0yiUuvtp3np6DvW4tZU850+NqzTGeP0v5ZBC/SYfJz1w2qeeNV7MFo5TIlen2/RztjF0
iy9QSwMECgAAAAAAt1luSQAAAAAAAAAAAAAAABAAHABodHRwL3Rlc3RzL21pc2MvVVQJAAPpDCpY
QhoqWHV4CwABBPUBAAAEFAAAAFBLAwQKAAAAAACLWW5JAAAAAAAAAAAAAAAAKgAcAGh0dHAvdGVz
dHMvbWlzYy9hdXRoZW50aWNhdGlvbi1yZWRpcmVjdC0yL1VUCQADlQwqWEIaKlh1eAsAAQT1AQAA
BBQAAABQSwMEFAACAAgAi1luSU+Jy3SCAAAAFwEAAGAAHABodHRwL3Rlc3RzL21pc2MvYXV0aGVu
dGljYXRpb24tcmVkaXJlY3QtMi9hdXRoZW50aWNhdGlvbi1zZW50LXRvLXJlZGlyZWN0LXNhbWUt
b3JpZ2luLXN0ZGVyci50eHRVVAkAA5UMKliVDCpYdXgLAAEE9QEAAAQUAAAAzcyxCsIwEIDhvU9x
oy7ChQ42iEtdHCyCg4I4xPSMgXAnybXi2xvfwvXn5xtkBmwB0aKxBoHeBbFdJfEuQVaf6SVZI4dr
tzbdDTY7uk9ha6EQjwcqxQU6R332TilI/lhY8JTSshn+Do4c9SeeKh6F9/wQC5djD16YyWtt9Zld
imPzBVBLAwQUAAIACAAMYG5JXoT0aeYAAABiAQAALQAcAGh0dHAvdGVzdHMvbWlzYy9jb3B5LXJl
c29sdmVzLXVybHMtc3RkZXJyLnR4dFVUCQAD2BcqWKgMKlh1eAsAAQT1AQAABBQAAAB1jUFLw0AQ
he/9FXOSRKSTiqIMJSDaXBSVRNrzdjNJV5JM2J0I/nsTG1EKMqf33vfmbfL8JSfIjGu4BBUw3h7c
B0MY9p6DDN4yVOLhoNoT4uryZpmMt6LbJEmwdcHiDxfQStubEJbvfb3ArTRDO5oPRg1udgXueP/o
FItveFL34hkbMSV7nHfRVvjEtbGfY3539Ja276PrqyQGgqBGnYWcq1f16/kH0WklhX8jIuvZKEdW
uqCwe8uICvWuq+Hs4reWedPy5ByxLVuVP4PPUjKcpxMQtCSqhs6qk269F2kgmttxGi++AFBLAwQU
AAIACAANYG5JZBaaK8MAAAD+AAAAPwAcAGh0dHAvdGVzdHMvbWlzYy9kZWxldGUtZnJhbWUtZHVy
aW5nLXJlYWR5c3RhdGVjaGFuZ2Utc3RkZXJyLnR4dFVUCQAD2RcqWKkMKlh1eAsAAQT1AQAABBQA
AABNjkFrwkAUhO/+ijm2UMvuqqUu4sXUUyhi25OILMnTPprshpcXS/31XaEFB+YwMMx8ztinsbVj
O4V13hjvZo/PzqAY2m5LsSZ5F6Kdm9j5zE/nE2vsHhtJHYn+oOFewfEcGq5xTHJ1G9TDGoO77rbW
owoxJkWVogaOeP0oy/vR7uY1Ly+ysC5Wm0PJLSvVWGZhzae/XHD/tQrVJ2WGM2e8wxvpP4/Hi0im
+BZWjiekId9dyzhyQw9QGWIVlKAJF5I0+gVQSwMEFAACAAgADWBuSVgBGuDEAAAA/gAAAFsAHABo
dHRwL3Rlc3RzL21pc2MvZGVsZXRlLWZyYW1lLWR1cmluZy1yZWFkeXN0YXRlY2hhbmdlLXdpdGgt
Z2MtYWZ0ZXItdmlkZW8tcmVtb3ZhbC1zdGRlcnIudHh0VVQJAAPZFypYqQwqWHV4CwABBPUBAAAE
FAAAAE2OTWvCQBRF9/6Ku2xBy0zUtA6lG6OrUKQfKxEZkqd9NJkJLy8W/fUdoQUv3MWFA/dkxuYT
ayd2Bps5Y1w2f8jzRxRD271RqEk+hGibTe1i7maLqTV2h43EjkTPaLhXcDj5hmscolzbenWwxuCu
u8V6VD6EqKhiUM8Br59leT/a3rw+7fCcgnWx3OxLblmpxksK1nz82wX330tffVFyOHHS27+T/vs4
rESSxY+wcjgiDunuCuPADY2hMoTKK0EjLiRx9AtQSwMEFAACAAgALmBuSRU1NZJ6AAAAvAAAACoA
HABodHRwL3Rlc3RzL21pc2MveHNsdC1iYWQtaW1wb3J0LXN0ZGVyci50eHRVVAkAAxcYKljpDCpY
dXgLAAEE9QEAAAQUAAAAjY5BDsMgDATveYU/QCDtoRW/IcRVLBmMjJH6/BLlA9VeVjuH2SylEScj
qYCqohE+xAinWYveb4/XGma2+A4h+EI9e8UuQzN2/+1sbk+Ho9JEzQ2ldW7AVBGegIwFq8FNl0ni
XSHCqGmfGhNgScd/uip95PO6lywxLz9QSwMECgAAAAAABmBuSQAAAAAAAAAAAAAAABMAHABodHRw
L3Rlc3RzL3BsdWdpbnMvVVQJAAPLFypYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAAGYG5J
x/SxAekAAABQEQAANgAcAGh0dHAvdGVzdHMvcGx1Z2lucy9jcmVhdGUtdjgtc2NyaXB0LW9iamVj
dHMtc3RkZXJyLnR4dFVUCQADyxcqWMsXKlh1eAsAAQT1AQAABBQAAADtzjFPwzAQhuG9v+IbYUGx
09JiIZZ26QCKRCWQEIPrXFIL1xfZThH/nnRDYqrEwHDr6fR+z3GgXg82ZUpoKDeJHeW8y439MHAO
lBIn+Ihmu4GqNPKBx9BiT1A1fEaFzgcCd12mgnp5OztellQ/kovfxcVKry5NilKUohSlKEUpSlGK
UpSiFKUoRSnKP1A+8QlqDqVNVRmlQJ9ZqflNYGcDUnGJBk7Fx/5N1+pu+Y77De3H/sEgU2wfp3nb
04svh7Ut1HP6MriKYwjX/7Lsoy/n5PNU9xy3sWOD12YNxzGSK9Nt+jnZ4NvZN1BLAwQKAAAAAAC5
WW5JAAAAAAAAAAAAAAAAFAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQJAAPuDCpYQhoqWHV4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACAAJYG5Jm282I7sAAACSAQAAVQAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRlby1ibG9ja2VkLW5vLWNyb3Nzb3JpZ2lu
LXN0ZGVyci50eHRVVAkAA9EXKlifDCpYdXgLAAEE9QEAAAQUAAAApZAxbwIxDIVn7ld4LAu6UCSk
CDFwDK3UslUdEIMvMSEitVHiK+LfN0VsbDA+ye/75LeRXzAzMFPbttbMgc7FmNkkicMEWV2mk2SN
HLbTVzM3O1isqR/C0kIh/aRSMNCHhFAvVrV0tFCLiXyzeRysmLUT3scwZNQo/B310MnPKdF/ekP2
ibKFDt2BPLRAjH11Qo/uSOzLM3LSr0L5nfeyjk7tHdvCSzMaP2Vgfxvu+hcqBcmXyuUhpXHzB1BL
AwQUAAIACAAJYG5Jy7uveNoAAACsAgAASAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJl
bW90ZS1yZWFkLXJlbW90ZS12aWRlby1sb2NhbGhvc3Qtc3RkZXJyLnR4dFVUCQAD0hcqWJ8MKlh1
eAsAAQT1AQAABBQAAADNkUFLA0EMhc/2V+SoF9mphcIgHtweFGoRRBTEQ3Y2nQ6dJmUmW/HfmxVv
HhfBY0Lel5eXjZzALcDNfdN4twT6qM4tLrMEzFA0FDpK0cTxbX7llu4drlfUDfHGQyXuH6hWjPSS
dNeiUpTy6eGch5wvZpt/SE6cdEQ+GT0J3/NWPLw+thCEmYJaz2ZOmFM/yb/+2F9LjDZxa6K9BxNm
mgRWLNoKb1McCo5uv/ORwzHTWN0h95mKhxbDjnpogBg72wkdhr2lWqdd9VypjJmtUlD/i23/mZ39
5d+/AFBLAwQUAAIACAAJYG5JJ5gIiyIBAAAVAwAARwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2Fu
dmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRlby1yZWRpcmVjdC1zdGRlcnIudHh0VVQJAAPSFypY
oAwqWHV4CwABBPUBAAAEFAAAAM2STU8CMRCGz/Ir5qgHyRZBsDEkshw0UUIgRpMNh253tttQp6Tt
4sevd5bIxSsxcW5tZp535p1Z+D2IIYiBzDIpJoDvUYhh33mtHISkA+58SJZMMbgSY7GB2zmWrZlK
iEjVE8aoDL7Y1OQqofHhU8I5tc5d9Bb/kGzJpg65Zrr19EC1l/C6zEF7ItSJ/zhnr5ytesWR3xej
jsEB+eputoYpB9Sujc2SO2WdFTpUEdeYJBTZx7i+UaIcTa4nZbaBGfe1hQwaFYE8XX5h8BCwZs2W
EoiTjEo/Pj16YzjjoCWBCx1Wp4CTCin3VFvTBtXZcliEf9s57F73iiqHQUKudIMVT4ekStaEUukt
mxJPm+o5YuiWM7eaLf3N5kPonf3lgX0DUEsDBAoAAAAAAK5ZbkkAAAAAAAAAAAAAAAAqABwAaHR0
cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvVVQJAAPYDCpYQhoqWHV4CwAB
BPUBAAAEFAAAAFBLAwQUAAIACAAGYG5JFS+4w9cAAAD4AQAASwAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L2F1ZGlvLXJlZGlyZWN0LWFsbG93ZWQtc3RkZXJyLnR4
dFVUCQADzBcqWJwMKlh1eAsAAQT1AQAABBQAAAClkDFLA0EQhWvvV0ypjdyeKXSRFF6KCBoEEQWx
mNudbJZsZsLuXMR/757Y2Xnlg/e+x3sbOYFZgOls21rTAX0WYxaXSRwmyOoyHSVr5PDeXZnrmw+4
XdEwhqWFQvpIpWCgBwmhOu5qaG+hBhP5ZvN/sGLWXngbw5hRo/Br1F0vh2OiSa2RfaJsoUe3Iw8t
EONQO2FAtyf2ZU456UuhfM9bWUWn9g/bwnlzdjGrgf3vcT+7UClI/qpcHlOaQ44cdUI+V3r9adpg
4e2pByfM5KbvqueEKfrmG1BLAwQUAAIACAAGYG5JOg3x6OUAAABDAgAATAAcAGh0dHAvdGVzdHMv
c2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2F1ZGlvLXJlZGlyZWN0LWFsbG93ZWQyLXN0
ZGVyci50eHRVVAkAA8wXKlicDCpYdXgLAAEE9QEAAAQUAAAApdCxTsMwEAbgmTzFjbBEcegAFupA
OhQJKiSEQEIMF/vqWnXvKtsp4u2xgY0JZbTl+87/v5ETqAWoXnedVj3QR1Jq0QYxGCBmE+koMXt2
b/2lurp+h5s73spSQxDnyjWkjDGntm2bzb+pFY2TK1ai/EApoaP7H/W2DO01lMFAdg5cPzcIb72b
ImYv/OLzbpDDMVA9rZFtoKhhQLMjCx0Q41h2wohmT2zTvFTPiWLta+VN1n9sDefN2cWsDWx/i/vO
hZmcxM/i8hTCHNmzz5V8KnrpqWbQ8Po4gBFmMrW78uaEwdvmC1BLAwQUAAIACAAHYG5JqPPDoaYA
AACKAQAAWAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2Jsb2It
dXJsLWRvZXMtbm90LW1hdGNoLXNvdXJjZS1zZWxmLXN0ZGVyci50eHRVVAkAA80XKlicDCpYdXgL
AAEE9QEAAAQUAAAA3Y+xDoIwFEV3v6IjDlBaRYXEQYkmDkYSRmPIs7xgtVLyWk34ezEO+g1u507n
3KOQWRxnQkapkCemPd7B9a2qSvQF2Q7J98zppgVjsGZItAyFnC8SFty2ulmDw8P5ispviCxVu/YJ
RtfgsR6zQP8u8IyX9kEKc1AX5Lkl3GOt4UuhSGYyktOYD2pvfd+h44WBHokPsg9Vq3dfpJjRLTIp
08no+A8nXlBLAwQKAAAAAACRWW5JAAAAAAAAAAAAAAAARAAcAGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvVVQJAAOhDCpY
QhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACACPWW5JwhntuNoAAADfCAAAcQAcAGh0dHAvdGVz
dHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVz
dHMvYmFzaWMtdXBncmFkZS1hZnRlci1yZWRpcmVjdC5odHRwcy1zdGRlcnIudHh0VVQJAAOdDCpY
nQwqWHV4CwABBPUBAAAEFAAAAO3OMUsDMRjG8b2f4hl1kSbX0zMUl3bpoAQUFMQhzb2XBtO8R5Kr
+O09N8Gpm2DWl5f/8zuO5ORoUqYETVkntpTzU9bmXcFaUEqc4CP0bguxlMgHnkKPPUE08BlLDD4Q
eBgyFTQ314vjeUnxI9n+Lrad7M5NVmVVVmVVVmVV/hPlA58gVhBCCalkB/rIQqyuAlsTkIpNNHIq
PrrX265p37De0n5ydwqZYn8/rxtHz74cNqaQ4/SpcBGnEC7/YNhHX76Lj3Pcc9zFgRVe9AaWYyRb
5tv8czLB94svUEsDBBQAAgAIAApgbklX5lJ76AAAACYDAAB5ABwAaHR0cC90ZXN0cy9zZWN1cml0
eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cy91cGdyYWRl
LWluc2VjdXJlLWF1ZGlvLXZpZGVvLWluLW1haW4tZnJhbWUtc3RkZXJyLnR4dFVUCQAD1BcqWKEM
Klh1eAsAAQT1AQAABBQAAADNUT1PwzAQ3fkVN9KBxE6jFnmr0qIOHVBUporBONdiEdvhbDPw67mW
CjFURWIobPfu3pd0G1kpIVQlCjEWj7Bcr+9bfM0YE2zt7htsCHXCBVGgJjiHPilAb0L2CQk70B5w
f1SQPaEJO2/fef2c0gCEcQg+ItRCXG3OJzL/COe2a9GgfcP2qG903z9p86LY8XA44Q/XhxpwI6vJ
ZDqCLc97kipLWU0LTi2kuq3rccmqkMlgLBOnFW6of+rGcJ7dcGe97h/a1cxzQRcSzrqOzaIC/TnA
VxLLmAuZ+t+VkBd/ifzHL5F/9ZIPUEsDBAoAAAAAAJBZbkkAAAAAAAAAAAAAAAA9ABwAaHR0cC90
ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdXNlckFnZW50U2hhZG93RE9NL1VU
CQADnwwqWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgACGBuSaz87UsmAQAAhgIAAFMAHABo
dHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dE
T00vYWxsb3ctYXVkaW8tc3RkZXJyLnR4dFVUCQAD0BcqWJwMKlh1eAsAAQT1AQAABBQAAAClUsFK
AzEUPNuveEcFKdm222pYi3SLKKgViyiIh2zymoamSUleK/17X6sHxePmEMgwM+/NkKqqKrhxdrIn
nFNCtYYxn7/QnBTl+2hnAZ9RGQm/2HwZiAvoQ8NghmsYjoQoh0AxrkB0L0VZjnqQUXcZAh3XG4+E
51AcpRnGV8wqj4TOY9xBMYCiJ4WQxRDwMxfFoOujVh4S6YSbmMgF+97rFxf9D6im2GztWLKcHjBn
ZZH3tMyYsGglgYUeTRtjUonqGBbObpMiF8Oro2X9HYNftyoYj0lCrfQSDQjAoBqeCY3SKwwmt0v1
kjHdhUWcOk3yn7eE087JWasJwfwUd8ylCG1Me/YNW+/bOLvg6GA5Z3fu6ZBBwttTzV8gBNSH7piz
U96ZzhdQSwMEFAACAAgACmBuSYjMkvi7AAAAkgEAAFMAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nv
bnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ctdmlkZW8tc3RkZXJy
LnR4dFVUCQAD0xcqWJ8MKlh1eAsAAQT1AQAABBQAAAClkDFvAjEMhefer/AIS3UBBhpVHXoMILVs
iKHq4EtMiAg2Snwg/j2h6tatjE/y+z75reUMZgZmYtvWmhegSzFm9pzEYYKsLtNJskYOX5OpmU+/
4XVB/RDeLBTSTyoFA31ICPXivZYOFmoxkW/W/wcrZu2EdzEMGTUKb6PuOzmeEt3TEtknyhY6dHvy
0AIx9tUJPboDsS+PyEk3hfKKd7KITu0ftoVR8zR+yMD+d7ifv1ApSL5WLg8pjZsbUEsDBBQAAgAI
AApgbkkdb4YUhAAAAMAAAABrABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvdXNlckFnZW50U2hhZG93RE9NL2RlZmF1bHQtc3JjLW9iamVjdC1kYXRhLXVybC1hbGxv
d2VkLXN0ZGVyci50eHRVVAkAA9MXKlifDCpYdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy7S
tB00iEtdHCyCg4I4xPQaD8KdJNeKb299Bdefn6+TCUwDprJlac0G8J2NaVZRvIuQ1Cd8SVLicKtq
s67vsN3jYww7Cxm5P2LOLuCF9Nk6xSDpY2HBY4zLovtbJib9kedZJ+EDD2LhemrBCzN6ndv8TC5S
X3wBUEsDBBQAAgAIABpgbkmNw02o3QAAAFICAABLABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250
ZW50U2VjdXJpdHlQb2xpY3kvdmlkZW8tcmVkaXJlY3QtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAPz
FypY0QwqWHV4CwABBPUBAAAEFAAAAKWRQUsDQQyFz/ZX5GgvslMr6CAe3B4UtAgiCuIhO5tOh45J
mclW/PdmxZvgwT0m5H0veVnLAdwS3MI3jT9zQB/VueVJloAZioZCeymaOL4uTt35xRtcrqgb4pWH
StzfU60Y6TnptkWlKOXTwzEPOc9n63+TEycdkY9GT8K3vBEPLw8tBGGmoNazmQPm1E9wqaQ/699J
jDZxbaKdBxNmmgRWLNoKb1IcCo7bfucj7/tMY3WD3GcqHloMW+qhAWLszBM6DDtLtU676qlSGTNb
paD+F9v+MzuaT3L4++9fUEsDBBQAAgAIABpgbklf9f3gvAAAAJIBAABMABwAaHR0cC90ZXN0cy9z
ZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdmlkZW8tcmVkaXJlY3QtYWxsb3dlZDItc3Rk
ZXJyLnR4dFVUCQAD8xcqWNAMKlh1eAsAAQT1AQAABBQAAAClkDFvAjEMhefer/BYFnShVKJR1aHH
0ErAhhgqBl9iQkRqo8QH6r8nrdi6wfgkv++T30pOYKZgJrZt7bMBOhdjpuMkDhNkdZmOkjVy+Jo8
mdnLFl7n1A/hzUIhXVIpGGghIdSL91o6WKjFRL5Z3Q5WzNoJ72IYMmoU3kTdd/J9TPSbPpB9omyh
Q7cnDy0QY1+d0KM7EPtyj5x0XSh/8k7m0an9x7bw2DyM7jKwvw739xcqBck/lctDSqPmAlBLAwQU
AAIACAAaYG5JJ7uXld8AAABSAgAAZgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3Vy
aXR5UG9saWN5L3ZpZGVvLXdpdGgtaHR0cC11cmwtYWxsb3dlZC1ieS1jc3AtbWVkaWEtc3JjLXN0
YXItc3RkZXJyLnR4dFVUCQAD9BcqWNEMKlh1eAsAAQT1AQAABBQAAAClkUFLA0EMhc/2V+TYXmRn
bUEH8eD20EJbBBEF8ZCdTadDx6TMZCv+e2fFm+DBPSbkfS952ckZzBxMbavKLmqgj2zM/DKKwwhJ
XaKTJA3sX+src33zBrdLant/ZyETd1vKGT09Bz00qOQlfVqYch/jbLL7Nzlw0AH5WOhBeM17sfDy
0IATZnJaemXmjDF0I1wy6c/6G/G+TNwX0dFCEUYaBVZM2gjvg+8TDtt+5yPvp0hDtULuIiULDboD
dVABMbbFE1p0x5JqHnfVU6Y0ZLYMTu0vdvnP5GI2yuHvv38BUEsDBBQAAgAIABpgbknO1DHghAAA
AMAAAABZABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvd29ya2Vy
LWJsb2ItaW5oZXJpdHMtY3NwLWJsb2Nrcy1ldmFsLXN0ZGVyci50eHRVVAkAA/QXKljSDCpYdXgL
AAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy7SxAoaxKUuDhbBQUEcYnqNgXAnybXi2xtfwfXn5+t4
AtWA0qauzUoDvrNSzSKysxGSuIQvThLI3/RSrTd32O7xMfqdgYzUHzFn6/ES5NlaQc/pY2BGY4zz
qvtbDhTkR56LHpgONLCB66kFx0TopLTyTDaGvvoCUEsDBBQAAgAIABxgbkljqqxsggAAAKgAAABA
ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNsLWFsbG93ZWQt
c3RkZXJyLnR4dFVUCQAD+BcqWNYMKlh1eAsAAQT1AQAABBQAAAAtjUEKwzAMBO95hV4QO72k+BWF
viC4G2JQLCMppf59TSl7WobZzXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77
Q7jkHhQml2ZYMO+M+WNMXCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsD
BBQAAgAIABxgbkljqqxsggAAAKgAAABSABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2Vj
dXJpdHlQb2xpY3kveHNsLXVuYWZmZWN0ZWQtYnktc3R5bGUtc3JjLTItc3RkZXJyLnR4dFVUCQAD
+BcqWNgMKlh1eAsAAQT1AQAABBQAAAAtjUEKwzAMBO95hV4QO72k+BWFviC4G2JQLCMppf59TSl7
WobZzXK2wpsXqQRV0UR7YdDh3lIIy22d48iS7jHGYMiXFu8hS3VUf/77Q7jkHhQml2ZYMO+M+WNM
XCpoJTDOIdAP2AH4NGh6Q21cJ5LKnZY50o7NrzFEm4Lsak3U8Zq+UEsDBBQAAgAIAAlgbknlLH6t
gwAAABoBAAA1ABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jb3JzLXBvc3QtcmVkaXJlY3QtMzAxLXN0
ZGVyci50eHRVVAkAA9IXKligDCpYdXgLAAEE9QEAAAQUAAAAzcyxCsIwEIDhvU9xoy7SqwUliEtd
HCyCg4I4xPSMgXAnybXi2xvfwvXn5+tlAmwBG1PXBtdA74zYLqI4GyGpS/SSpIH9tVniCm+w2dF9
9FsDmXg4UM7W0znos7NKXtLHwIzHGOdV/4dy4KA/8lT0ILznhxi4HDtwwkxOSyvPZGMYqi9QSwME
FAACAAgAFGBuSa+IHNetAAAApAEAADoAHABodHRwL3Rlc3RzL3NlY3VyaXR5L2Nyb3NzLW9yaWdp
bi13ZWJzcWwtYWxsb3dlZC1zdGRlcnIudHh0VVQJAAPoFypYuAwqWHV4CwABBPUBAAAEFAAAAN2P
zQrCMBCE732KPbYHjSBeggiiPYkUKuo5SbcQSHfDNqn69v6gL+FtBr5vYOq2bVoNZzI2ICSGlIWA
CTw5wQEpmQAmJ55NxuU8QLkA4gSGAEVYqkJdOOQBR7U3yaj6elJXtAef1ImzOHy3HQuqI3c5vLAb
2u5FWjPiR3mHuYuxXK5WFWio7w5j8kyNrCf23Qa+C1r/cK0jSs8yNBFpS90FxfeP0jKHqqj/7tET
UEsDBBQAAgAIABRgbklLG4E1pwAAANIAAAAyABwAaHR0cC90ZXN0cy9zZWN1cml0eS9jcm9zcy1v
cmlnaW4td2Vic3FsLXN0ZGVyci50eHRVVAkAA+gXKli4DCpYdXgLAAEE9QEAAAQUAAAANczNCsIw
EATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8M1XT1I2GKxkbEBJDykLABJ6c4IiU
TACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn1XIWh592ZEF14T6HmT3Q9rO0ZsLv
5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMEFAACAAgA
HGBuSbBhIgHAAAAAkgEAAD0AHABodHRwL3Rlc3RzL3NlY3VyaXR5L2xvY2FsLXZpZGVvLXNvdXJj
ZS1mcm9tLXJlbW90ZS1zdGRlcnIudHh0VVQJAAP4FypYyAwqWHV4CwABBPUBAAAEFAAAAKWQMU8C
QRCFa+9XTAmNuUWQZGMsOApMkM5QGIu53WHZsMyQ3TmM/96VWGklli+Z932Zt5EzmCmYiW1bO5sB
vRdjprdJHCbI6jKdJGvk8Dq5M3PzBg9L6ofwaKGQPlMpGGgtIdSLRS0dLNRiIt9srgcrZu2EdzEM
GTUKb6PuOzmeEn2lFbJPlC106PbkoQVi7KsTenQHYl/+Iyd9KZSfeCfL6NT+YlsYNTfjH4b7PxnY
fw93+QuVguSPyuUhpXHzCVBLAwQUAAIACAAcYG5Jg0/qVYQAAADAAAAAOgAcAGh0dHAvdGVzdHMv
c2VjdXJpdHkvbG9jYWwtdmlkZW8tc3JjLWZyb20tcmVtb3RlLXN0ZGVyci50eHRVVAkAA/gXKljI
DCpYdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy7S1KoQxKUuDhbBQUEcYnqNB+FOkmvFt7e+
guvPz9fKCKYGU9mytKs14DsbUy+ieBchqU/4kqTE4VYtzcbcYbvHxxB2FjJyd8ScXcAL6bNxikHS
x8KMhxjnRfu3TEz6I8+TTsIH7sXC9dSAF2b0OrXpGV2krvgCUEsDBAoAAAAAAJJZbkkAAAAAAAAA
AAAAAAAhABwAaHR0cC90ZXN0cy9zZWN1cml0eS9taXhlZENvbnRlbnQvVVQJAAOjDCpYQhoqWHV4
CwABBPUBAAAEFAAAAFBLAwQUAAIACAALYG5JmWIDrOAAAAA+BAAATgAcAGh0dHAvdGVzdHMvc2Vj
dXJpdHkvbWl4ZWRDb250ZW50L2luc2VjdXJlLWF1ZGlvLXZpZGVvLWluLW1haW4tZnJhbWUtc3Rk
ZXJyLnR4dFVUCQAD1hcqWKMMKlh1eAsAAQT1AQAABBQAAADtkTFLA0EQhWvvV0ypjdyeQWERCy9F
BA2CiIJYzO1ONks2M2F3LuK/d0/s7EwjaDnw3veY95ayBzMD09m2tV0H9FaMmZ0mcZggq8u0k6yR
w0t3Zs4vXuFyTsMYriwU0jsqBQPdSghVcV1NGwvVmMg3y5+DFbP2wqsYxowahZ+irnvZ7hJN1wLZ
J8oWenRr8tACMQ41EwZ0G2JfDgknfSyUb3gl8+jUfmNbOG6OTg5KYP9V3OdfqBQkv1cujyn9VvL/
1n9l68hRJ+RDpdcFpnYsPN/34ISZ3LRK1ewxRd98AFBLAwQUAAIACAALYG5JuyJHtYMAAADAAAAA
QgAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L2luc2VjdXJlLWNzcy1pbi1pZnJh
bWUtc3RkZXJyLnR4dFVUCQAD1hcqWKMMKlh1eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLtLE
ohDEpS4OFsFBQRxiesaDcCfJteLbW1/B9efn62QE04Cxrq6dtYDvYkyzSBJ8gqwh40uyEserXZrV
+gabHd6HuHVQkPsDluIjnkmfrVeMkj8OZjykNK+6v2Vi0h95mnQS3vNDHFyOLQRhxqBTm57RJ+qr
L1BLAwQUAAIACAAoYG5JSxuBNacAAADSAAAAPwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvc3RvcmFn
ZS1ibG9ja2luZy1sb29zZW5lZC13ZWJzcWwtc3RkZXJyLnR4dFVUCQADCxgqWN0MKlh1eAsAAQT1
AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHbDHwzVdPUjYYr
GRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t2SfVchaHn3Zk
QXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hHpAP1NxQ/vArL
HMrFG1BLAwQUAAIACAAoYG5JSxuBNacAAADSAAAAQwAcAGh0dHAvdGVzdHMvc2VjdXJpdHkvc3Rv
cmFnZS1ibG9ja2luZy1zdHJlbmd0aGVuZWQtd2Vic3FsLXN0ZGVyci50eHRVVAkAAwwYKljeDCpY
dXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8
M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn
1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD
9TcUP7wKyxzKxRtQSwMEFAACAAgAKWBuSbLcpAziAAAAmAQAADkAHABodHRwL3Rlc3RzL3NlY3Vy
aXR5L3ZpZGVvLWNyb3NzLW9yaWdpbi1jYWNoaW5nLXN0ZGVyci50eHRVVAkAAw4YKljgDCpYdXgL
AAEE9QEAAAQUAAAA7ZJBSwNBDIXP9lfkaC/SaQvKIB7cHlrQUhBREA/ZmXQ6dJqUmWzFf++sePPm
nkSPgbzvkfeylhOYOZipnRhrroDeijHziyQOE2R1mY6SNXJ4mc7MpXmF6wW1XbixUEjvqRQMdCch
1I3bKtpbqMJEfrT+OVgxayO8jaHLqFH4KequkcMxUT8tkX2ibKFBtyMPEyDGtnpCi25P7MsQc9LH
QnnFW1lEp/Yb28L56Gw8yIH9V3Cfd6FSkPxeudyl9NfIkaP2yIdKr932uVt43jTghJlc33fdOWGK
flir/7/6qz7qA1BLAwQUAAIACAAqYG5JlIvuVRYBAADnAQAAPwAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkvdmlkZW8tcG9zdGVyLWNyb3NzLW9yaWdpbi1jcmFzaDItc3RkZXJyLnR4dFVUCQADDxgqWOEM
Klh1eAsAAQT1AQAABBQAAACVjk9rwkAQxe9+ijnqoUk2BtSlFCRSLLQiqaUF8bBuJnHpupvuH4vf
viNpCz0Vmcu8mTe/eSt7AlYAy3nGOJsCfnrGikRbKTS4IB121gVl2m0+ZhO2g9sF7mN7x8GjqZ/Q
e9HiqwqHUgRsrTtzGJqo9Wiw+kOeXUFWRoUL8pnoypoH01gOb+sSpDUGZaAZeU5Cq3qw/eEnBN/B
crNZV/gR0QdoVLsMofuWC1VXKFGdsELfWeOxFFrvhXzn4PpFDQfyk+r3UGQFDNE56+CG5bPxdAQN
9RcTT1OWT5KMivFplmWpRxmdCufUWIM+ykNy7Ir/4pFcxGN3r4zQL9Xj3FDGow04r2tK4TmIvoHf
Z3RGXohOX5XjC1BLAwQUAAIACAAwYG5JYEtmEJEAAAD7AQAARQAcAGh0dHAvdGVzdHMvc2VjdXJp
dHkveHNzLURFTklFRC14c2wtZG9jdW1lbnQtc2VjdXJpdHlPcmlnaW4tc3RkZXJyLnR4dFVUCQAD
GxgqWO4MKlh1eAsAAQT1AQAABBQAAADtjjEOgzAMRXdO4QuEBJZWmWHo0p4BBVMimSSynQpuXzr0
Bh2rv76v90LeSqRJY06AzJk9LJEQVtXire36S+vOdf7qnLOCoXLUw+4iZhjvt3Ewu5CZc6gbJjVf
4MHxGVO7bwQUE0IPSPghQPQglBVRm/PpX8hyuj3kRAd0rYMFJ62MAhMjSC0ls+LchH/oj0PfUEsD
BAoAAAAAAJNZbkkAAAAAAAAAAAAAAAATABwAaHR0cC90ZXN0cy9zdG9yYWdlL1VUCQADpQwqWEIa
Klh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgADGBuSUsbgTWnAAAA0gAAAEUAHABodHRwL3Rlc3Rz
L3N0b3JhZ2UvY2FsbGJhY2tzLWFyZS1jYWxsZWQtaW4tY29ycmVjdC1jb250ZXh0LXN0ZGVyci50
eHRVVAkAA9cXKlilDCpYdXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/ac
pFsIpLthm/jz9lbR2wx8M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6
ccgjTupkklFV16oO7dkn1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv
9/B70PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMECgAAAAAAC2BuSQAAAAAAAAAAAAAAAA8AHABo
dHRwL3Rlc3RzL3VyaS9VVAkAA9YXKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAAtgbknQ
mtTgggAAAMAAAAA4ABwAaHR0cC90ZXN0cy91cmkvYXNzaWduLXBhdGgtd2l0aC1sZWFkaW5nLXNs
YXNoLXN0ZGVyci50eHRVVAkAA9YXKljWFypYdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDhvU9xoy7S
xE5BXOriYBEcFMQhpmc8CHeSXCu+vfEVXH9+vkFmMB0Y69rWWQv4LsZ0qyTBJ8gaMr4kK3G82rVt
zQ02O7xPceugII8HLMVHPJM+e68YJX8cLHhKadkMf8vEpD/yVHUS3vNDHFyOPQRhxqC11Wf2icbm
C1BLAwQKAAAAAADFWW5JAAAAAAAAAAAAAAAAGgAcAGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3Qv
VVQJAAMCDSpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAA8YG5Jfn/tF7EAAAABAQAAQQAc
AGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcG9zdC1ibG9iLWNvbnRlbnQtdHlwZS1hc3luYy1z
dGRlcnIudHh0VVQJAAMzGCpYAg0qWHV4CwABBPUBAAAEFAAAAGWNsQrCQBBE+3zFVqKgHjaCB1Ym
glgoiZhCLC7JKoe522OzUfx7DQRULGd4My9J012qYePvprYVrMgLepkcngHHYPs2GDYOBRneucVp
pI5Utw4bFRsxKskzlWOxtaIyarnELq2IUYXayIXYKY/yIL6pveEGq97SSaZlCMPZYj4CDQVRDf1U
69ChX+SwJN8I5Ie11pmw9VcYjCHFEu0duSNgMILTT7H83MWtc88//Tl6AVBLAwQUAAIACAA8YG5J
fn/tF7EAAAABAQAAQAAcAGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcG9zdC1ibG9iLWNvbnRl
bnQtdHlwZS1zeW5jLXN0ZGVyci50eHRVVAkAAzMYKlgCDSpYdXgLAAEE9QEAAAQUAAAAZY2xCsJA
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
twMreHOeXMe9q9TQ4cWbhct0+avHzjarh8XoWtK2pilzuVwul8vlcrlc7s/9AFBLAwQUAAIACABF
YG5JjzQacEQAAACgCQAARwAcAGltcG9ydGVkL3czYy9XZWJDcnlwdG9BUEkvZ2VuZXJhdGVLZXkv
dGVzdF9mYWlsdXJlc19SU0EtT0FFUC1zdGRlcnIudHh0VVQJAANBGCpYEw0qWHV4CwABBPUBAAAE
FAAAAHPOL81JUcjLL1FIT81LLUosSVVIVMhOrVQoSMws0lEoLkksKS1W0DUxNjDhch5VO6p2VO2o
2lG1o2pH1Y6qHVVLc7UAUEsDBBQAAgAIAEhgbklUAsmyNgAAAMACAABQABwAaW1wb3J0ZWQvdzNj
L1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X2ZhaWx1cmVzX1JTQVNTQS1QS0NTMS12MV81
LXN0ZGVyci50eHRVVAkAA0cYKlgZDSpYdXgLAAEE9QEAAAQUAAAAc84vzUlRyMsvUUhPzUstSixJ
VUhUyE6tVChIzCzSUSguSSwpLVbQNTE2MOFyHlU7qnaQqQUAUEsDBAoAAAAAAO9ZbkkAAAAAAAAA
AAAAAAAgABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9VVAkAA1INKlhCGipYdXgL
AAEE9QEAAAQUAAAAUEsDBAoAAAAAAGpgbkkAAAAAAAAAAAAAAAAqABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvVVQJAAOHGCpYQhoqWHV4CwABBPUBAAAEFAAAAFBL
AwQUAAIACAA7YG5JtVXSEaMAAABPAgAARgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvSW5kZXhlZERCL2lkYmZhY3Rvcnlfb3BlbjExLXN0ZGVyci50eHRVVAkAAzEYKlgBDSpYdXgL
AAEE9QEAAAQUAAAA7Y+xCsIwFEX3fsUb28WAiGI2bTuIitiCHSVN3hBI+0L6Uvx8a+nkFzg4Xjjn
cm9ZVbdKwoEZO8/ABMqMqtcICjR13iGjAR3DQCERD3Kxw0EUipUom1o02J4ti5pi0PhJOQUUVzLR
TZjtDb7QmFYMGEYMor5fLOOpOOZz4Up7n673uwwktEQOlgIpJ6SeFSm/HCmXgWm0PW83T86S8n/i
R068AVBLAwQUAAIACAA8YG5JJe6EdJkAAADFAAAAQwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvSW5kZXhlZERCL2lkYmluZGV4X2NvdW50LXN0ZGVyci50eHRVVAkAAzQYKlgFDSpY
dXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiGI2bTuIitiAHSVN3hBI+0L6Uvx8a+nkeOGc
w62b5tFIODFjHxiYQNtJDwZBg6E+eGS0YFIcKWbiRT71OIpKsxZ1q0SL3dWxUJSiwd8qKaK4k01+
xtxg8YPWdmLEOGEU6nlzjJfqXC7BjQkh3x4PBUjoiDysASlnRC2KlH+OlOvBPLmB97s3F9kXUEsD
BBQAAgAIADxgbkkl7oR0mQAAAMUAAABEABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9JbmRleGVkREIvaWRiaW5kZXhfY291bnQyLXN0ZGVyci50eHRVVAkAAzMYKlgEDSpYdXgLAAEE
9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiGI2bTuIitiAHSVN3hBI+0L6Uvx8a+nkeOGcw62b5tFI
ODFjHxiYQNtJDwZBg6E+eGS0YFIcKWbiRT71OIpKsxZ1q0SL3dWxUJSiwd8qKaK4k01+xtxg8YPW
dmLEOGEU6nlzjJfqXC7BjQkh3x4PBUjoiDysASlnRC2KlH+OlOvBPLmB97s3F9kXUEsDBBQAAgAI
ADxgbkkl7oR0mQAAAMUAAABEABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRl
eGVkREIvaWRiaW5kZXhfY291bnQzLXN0ZGVyci50eHRVVAkAAzQYKlgEDSpYdXgLAAEE9QEAAAQU
AAAAXY6xCsIwFEX3fsUb28WAiGI2bTuIitiAHSVN3hBI+0L6Uvx8a+nkeOGcw62b5tFIODFjHxiY
QNtJDwZBg6E+eGS0YFIcKWbiRT71OIpKsxZ1q0SL3dWxUJSiwd8qKaK4k01+xtxg8YPWdmLEOGEU
6nlzjJfqXC7BjQkh3x4PBUjoiDysASlnRC2KlH+OlOvBPLmB97s3F9kXUEsDBBQAAgAIAERgbkkl
7oR0mQAAAMUAAABJABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIv
aWRib2JqZWN0c3RvcmVfY291bnQtc3RkZXJyLnR4dFVUCQADQBgqWBENKlh1eAsAAQT1AQAABBQA
AABdjrEKwjAURfd+xRvbxYCIYjZtO4iK2IAdJU3eEEj7QvpS/Hxr6eR44ZzDrZvm0Ug4MWMfGJhA
20kPBkGDoT54ZLRgUhwpZuJFPvU4ikqzFnWrRIvd1bFQlKLB3yoporiTTX7G3GDxg9Z2YsQ4YRTq
eXOMl+pcLsGNCSHfHg8FSOiIPKwBKWdELYqUf46U68E8uYH3uzcX2RdQSwMEFAACAAgARGBuSSXu
hHSZAAAAxQAAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9p
ZGJvYmplY3RzdG9yZV9jb3VudDItc3RkZXJyLnR4dFVUCQADPxgqWBENKlh1eAsAAQT1AQAABBQA
AABdjrEKwjAURfd+xRvbxYCIYjZtO4iK2IAdJU3eEEj7QvpS/Hxr6eR44ZzDrZvm0Ug4MWMfGJhA
20kPBkGDoT54ZLRgUhwpZuJFPvU4ikqzFnWrRIvd1bFQlKLB3yoporiTTX7G3GDxg9Z2YsQ4YRTq
eXOMl+pcLsGNCSHfHg8FSOiIPKwBKWdELYqUf46U68E8uYH3uzcX2RdQSwMEFAACAAgARGBuSSZn
WmSfAAAAigEAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9p
ZGJvYmplY3RzdG9yZV9jb3VudDMtc3RkZXJyLnR4dFVUCQADPxgqWBENKlh1eAsAAQT1AQAABBQA
AADdj7EKwjAURfd+xRvbxYCIYja1HURFbMCOkiZvCKR9IX0pfr61dPITHC+ce7i3qut7LeHAjF1g
YAJtR90bBA2GuuCR0YJJcaCYiSf51OEgSs1aVI0SDbYXx0JRiga/6UQRxY1s8hPmeotvtLYVA8YR
o1CPq2M8l8fTLFyZEPL1fleAhJbIwyKQckLUXJHypyPlMjBPruft5sVFVv3DiQ9QSwMEFAACAAgA
RmBuSSXuhHSZAAAAxQAAAEsAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4
ZWREQi9pZGJvYmplY3RzdG9yZV9kZWxldGU1LXN0ZGVyci50eHRVVAkAA0MYKlgVDSpYdXgLAAEE
9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiGI2bTuIitiAHSVN3hBI+0L6Uvx8a+nkeOGcw62b5tFI
ODFjHxiYQNtJDwZBg6E+eGS0YFIcKWbiRT71OIpKsxZ1q0SL3dWxUJSiwd8qKaK4k01+xtxg8YPW
dmLEOGEU6nlzjJfqXC7BjQkh3x4PBUjoiDysASlnRC2KlH+OlOvBPLmB97s3F9kXUEsDBBQAAgAI
AElgbkkl7oR0mQAAAMUAAABOABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRl
eGVkREIvaWRidHJhbnNhY3Rpb24tb25jb21wbGV0ZS1zdGRlcnIudHh0VVQJAANKGCpYHA0qWHV4
CwABBPUBAAAEFAAAAF2OsQrCMBRF937FG9vFgIhiNm07iIrYgB0lTd4QSPtC+lL8fGvp5HjhnMOt
m+bRSDgxYx8YmEDbSQ8GQYOhPnhktGBSHClm4kU+9TiKSrMWdatEi93VsVCUosHfKimiuJNNfsbc
YPGD1nZixDhhFOp5c4yX6lwuwY0JId8eDwVI6Ig8rAEpZ0QtipR/jpTrwTy5gfe7NxfZF1BLAwQU
AAIACABLYG5JQHmykZ8AAADYAAAARgAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
SW5kZXhlZERCL2ludGVyZmFjZXMud29ya2VyLXN0ZGVyci50eHRVVAkAA04YKlhOGCpYdXgLAAEE
9QEAAAQUAAAAbczNCoJAGIXhvVfxLbVFQ+BqyEDUQouERnIREaN9pTA/MjMGbbr2glpJm7N5H07M
WHao8nIP6zjfZSkFeVGjbNCUN4Z3icpZiCJYeOSoxSjRkpQ7TrKakRqbbe8I06NpkRT8wVlr+sEl
2iDpkA9kk/w+8Bobw5+5Er1CO+/8MAyAQsESSqdo2Wpl3bd9BoWA2YrS19T5AZwqiOAPP3tvUEsD
BBQAAgAIAFRhbkkE4q4hF1EAAGaJAQBDABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9JbmRleGVkREIva2V5X2ludmFsaWQtY3Jhc2gtbG9nLnR4dFVUCQADQBoqWIcYKlh1eAsAAQT1
AQAABBQAAADsXetzm8iy/3z5K/hwK0fOxg7DG8rrKkeWE2/8OpadbN2tFDXAYHOMQAvIj/Nh//bb
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
I+UyME+u5+3mxUVW/cOJD1BLAwQUAAIACABwYG5JJe6EdJkAAADFAAAARgAcAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL3dyaXRlci1zdGFydmF0aW9uLXN0ZGVyci50
eHRVVAkAA5MYKlgtDSpYdXgLAAEE9QEAAAQUAAAAXY6xCsIwFEX3fsUb28WAiGI2bTuIitiAHSVN
3hBI+0L6Uvx8a+nkeOGcw62b5tFIODFjHxiYQNtJDwZBg6E+eGS0YFIcKWbiRT71OIpKsxZ1q0SL
3dWxUJSiwd8qKaK4k01+xtxg8YPWdmLEOGEU6nlzjJfqXC7BjQkh3x4PBUjoiDysASlnRC2KlH+O
lOvBPLmB97s3F9kXUEsDBAoAAAAAANlZbkkAAAAAAAAAAAAAAAAlABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL1VUCQADKQ0qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMECgAA
AAAA2VluSQAAAAAAAAAAAAAAAC8AHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL1VUCQADKQ0qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMECgAAAAAA21luSQAA
AAAAAAAAAAAAAEAAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvVVQJAAMuDSpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQKAAAA
AADuWW5JAAAAAAAAAAAAAAAATwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9VVAkAA08NKlhCGipY
dXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAFBgbkkhKcUV8wAAAJcFAABnABwAaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlh
LWVsZW1lbnRzL2V2ZW50X2NhbnBsYXktc3RkZXJyLnR4dFVUCQADWBgqWCkNKlh1eAsAAQT1AQAA
BBQAAADt0zFLQzEQB/DZ9ylu1OXRvBbEIA6+DgpaBBEFcbiXXNPQeFeStOK3N1E3F0uHLm9MyP2S
+5NbyA7UDFSnJ52eKqCPpNSsDWIwQMwm0kZi9uxeu6k6v3iDy1teypWGIM6VbUgZY05t2zaLvak5
DVtXrET5nlJCR3c/6nUpWmsohYHsIXB9XC+89G4bMXvhZ59XvbxvAtXVDbINFDX0aFZkYQLEOJQ7
YUCzJrbpsK6eEsWa19ybrP/YGk6bk7MxtyPkxvY3uO++MJOT+Flc3oYwyqP8X7nbQ/bscyUfi15m
qP5vDS8PPRhhJlPnqpzZYfC2+QJQSwMEFAACAAgAUWBuSUaXZkvsAAAApAQAAHIAHABpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvZXZlbnRfY2FucGxheV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA1kY
KlgpDSpYdXgLAAEE9QEAAAQUAAAA7ZPBSgNBDEDP9itytBfp7BbEQTy4PShoEUQUxEN2Np0OHZMy
k634986KN091EXvwmJC8ZN6QpezAzMFUdlbZugJ6y8bMT6I4jJDUJdpK0sD+uarN6dkLnC+o7f2F
hUzc3VLO6Okx6LpBJS/p3cIx9zFOJ8sfkwMHHZD3hR6Er3klFp7uGnDCTE5LrtTsMIZuxJRM+rX+
jXhfKi5L08ZCaYw0CqyYtBFeBd8nHLb99COv20hDdIXcRUoWGnRr6mAGxNiWmdCi2xSredyrHjKl
wdkiOLXf2OV/JkfTf29/4O237mU/cn0Q5H1u/ANQSwMEFAACAAgAUWBuSSZwKMHtAAAADAYAAG4A
HABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVk
LWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfY2FucGxheXRocm91Z2gtc3RkZXJyLnR4dFVU
CQADWhgqWCsNKlh1eAsAAQT1AQAABBQAAADtlE1LAzEQQM/2V8zRXqT7AWIQD24PFrQIIgriYTY7
TUPTmZLMVvz3ZsWbN5fioT1mmHkzeWGylD0UNRSlmZWmqoA+UlHUF0EsBohqI+0kqmf3VlbF5dU7
XM+p7d2NgUTcPVBK6OjF67pBJSfx08A59yFMJ8s/kz17HZBPme6FF7wSA6+PDVhhJqs5lnP2GHw3
oksi/Rn/XpzLGbe5aGMgFwYaBVaM2givvOsjDtN++5HtLtBwukPuAkUDDdo1dTADYmxzT2jRbrLV
NO5Wz4ni4GzurZpf7Pw+k7Ppyds/eDvUvpzIx0WuD/SXfgFQSwMEFAACAAgAUmBuSaNqPdbpAAAA
pAQAAHkAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Vt
YmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfY2FucGxheXRocm91Z2hfbm9hdXRv
cGxheS1zdGRlcnIudHh0VVQJAANbGCpYLA0qWHV4CwABBPUBAAAEFAAAAO2TwUoDQQxAz/YrcrSX
0tkuiIN4cHtQ0CKIKIiH7Gw6HTomZSZb8e+dLd486SIieExIXjJvyEr2YGowlZ1XdlEDvWZj6lkU
hxGSukQ7SRrYP1ULc3L6DGdLant/biETdzeUM3p6CLppUMlLerNwzH2M08nq2+TAQQfkXaEH4Ste
i4XH2wacMJPTkis1e4yhGzElk36sfy3el4qL0rS1UBojjQIrJm2E18H3CYdtD37kZRdpiC6Ru0jJ
QoNuQx3MgRjbMhNadNtiNY971X2mNDhbBqf2E7v8z+Ro+u/tF7z91L38RfJXbvwdUEsDBBQAAgAI
AFJgbkn1wgRE8wAAAAwGAABqABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZGRh
dGEtc3RkZXJyLnR4dFVUCQADXBgqWC0NKlh1eAsAAQT1AQAABBQAAADtlEFLA0EMhc/2V+RoL9LZ
VsVBPLg9KGgRRBTEQ3Y2nQ4dkzKTrfjvnRVvnnQpFPSYkHwv8x7MQrZgZmAqO6ns9BjoLRszO4ri
MEJSl2gjSQP752pqTs9e4HxOTecvLGTi9pZyRk+PQVc1KnlJ7xYOuYtxPFr8mhw4aI+8L/QgfM1L
sfB0V4MTZnJaemVmizG0A1Qy6df5N+J9mbgsS2sLZTHSILBi0lp4GXyXsL/20x953UTqqyvkNlKy
UKNbUQsTIMamaEKDbl1czcNe9ZAp9Z7Ng1P7jV3yGR2MBynsKvddkv+z/jtZ7wf5ZC/IP/lLPwBQ
SwMEFAACAAgAU2BuSUcDUi7tAAAApAQAAHUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRf
bG9hZGVkZGF0YV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA10YKlguDSpYdXgLAAEE9QEAAAQU
AAAA7ZNBSwNBDIXP9lfkaC/S2RaLg3hwe6igRRBREA/Z2XQ6dJqUmWzFf++sePOki+LBY0Lyvcx7
zEoOYGZgKjup7PQU6CUbMzuJ4jBCUpdoL0kD+6dqauZnz3C+oKbzFxYycXtDOaOnh6CbGpW8pFcL
x9zFOB6tvk0OHLRH3hV6EL7itVh4vK3BCTM5Lb0yc8AY2gEqmfTj/GvxvkxclqWthbIYaRBYMWkt
vA6+S9hf++6P7PaR+mqJ3EZKFmp0G2phAsTYFE1o0G2Lq3nYq+4zpd6zRXBqP7FLPqOj8SCFn8r9
P5HfSGT+J8hf+eNvUEsDBBQAAgAIAFNgbkm4PBhT6QAAAFgFAABuABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2V2ZW50X2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRVVAkAA14YKlgvDSpYdXgLAAEE
9QEAAAQUAAAA7ZRBS0MxDIDP7lfk6C6yvg2GRTz4dnCgQxBREA95fVlX1iWjzZv47+0Tb958iDvs
2JB8Sb+SruQAZgamspPKTudA79mY2UUUhxGSukR7SRrYv1ZTM798g6sFNZ2/tpCJ23vKGT09B93U
qOQlfVg45y7G8Wj1a3LgoD3ysdCD8JLXYuHloQYnzOS0xErOAWNoB3TJpN/j34n3JeOmFG0tlMJI
g8CKSWvhdfBdwn7aLz+y20fqT7fIbaRkoUa3oRYmQIxN6QkNum2xmofd6ilT6p0tglP7g13eZ3Q2
Pnn7B29/tS8n8vH9S59QSwMEFAACAAgAU2BuSUeU6cvpAAAApAQAAHkAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEt
ZWxlbWVudHMvZXZlbnRfbG9hZGVkbWV0YWRhdGFfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAANe
GCpYMQ0qWHV4CwABBPUBAAAEFAAAAO2TwUoDQQxAz/Yrcmwv0tkW1EE8uD1U0CKIKEgP2dl0OnRM
yky24t87K9486SIieExIXjJvyEoOYOZgKjut7OwU6CUbMz+O4jBCUpdoL0kD+6dqZk7O1nC+oKbz
FxYycXtDOaOnh6DbGpW8pFcLY+5inIxW3yYHDtoj7wo9CF/xRiw83tbghJmcllypOWAM7YApmfRj
/WvxvlRclqadhdIYaRBYMWktvAm+S9hv++5HnveR+miJ3EZKFmp0W2phCsTYlJnQoNsVq3nYq+4z
pd7ZIji1n9jlf0ZHk39vv+Dtp+7lL5K/cuNvUEsDBBQAAgAIAFRgbknvfOp/6QAAAKQEAABpABwA
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1j
b250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRzdGFydC1zdGRlcnIudHh0VVQJAANgGCpY
Mg0qWHV4CwABBPUBAAAEFAAAAO2TwUoDQQxAz/YrcrQX6WwL0kE8uD1U0CKIKIiH7Gw6HTpNyky2
4t87K9486SJS8JiQvGTekJUcwMzAVHZS2ekc6DUbMzuL4jBCUpdoL0kD++dqas7nL3CxoKbzlxYy
cXtLOaOnx6CbGpW8pDcLp9zFOB6tfkwOHLRH3hd6EL7mtVh4uqvBCTM5LblSc8AY2gFTMunn+jfi
fam4Kk1bC6Ux0iCwYtJaeB18l7Df9sOP7PaR+miJ3EZKFmp0G2phAsTYlJnQoNsWq3nYqx4ypd7Z
Iji1X9jlf0Yn439vf+Dtt+7lGMnfufF3UEsDBBQAAgAIAFRgbkmdEB0N6QAAAKQEAAB0ABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRzdGFydF9ub2F1dG9wbGF5LXN0ZGVyci50eHRV
VAkAA2AYKlgzDSpYdXgLAAEE9QEAAAQUAAAA7ZPBSgNBDEDP9itytBfprAviIB7cHipoEUQUxEN2
Np0OnWbKTLbi35sVb550ESl4TEheMm/IMu3B1GAqO6tsPQN6LcbUJzE5jJDFZdqlLIH9c3Vqzs5f
4GJObe8vLRTi7pZKQU+PQdYNCvmU3ywccx/jdLL8MTlwkAF5r/SQ+JpXycLTXQMuMZMTzWnNHmPo
RkwpJJ/r3yTvteJKmzYWtDHSKLBglibxKvg+47Dth5+03UUaogVyFylbaNCtqQNlM7Y6E1p0G7Va
xr3qoVAenM2DE/uFrf8zOZr+e/sDb791L4dI/s6NvwNQSwMEFAACAAgAVWBuSU+kBxPqAAAADAYA
AHwAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfb3JkZXJfY2FucGxheV9jYW5wbGF5dGhy
b3VnaC1zdGRlcnIudHh0VVQJAANhGCpYNQ0qWHV4CwABBPUBAAAEFAAAAO2UwUoEMQxAz+5X5Ohe
ZDsOiEU8OHtQ0EUQURAPmU62W7YmS5tZ8e/tiDdvjrKXOTYkL+kr6Ur2YGowlV1UtjZA79mY+iSK
wwhJXaKdJA3sX6pTc3b+ChdLant/aSETd3eUM3p6CrppUMlL+rBwzH2M89nq1+TAQQfkQ6EH4Rte
i4Xn+wacMJPTEis5e4yhG9Elk36Pfyvel4yrUrS1UAojjQIrJm2E18H3CYdpv/zI2y7ScLpG7iIl
Cw26DXWwAGJsS09o0W2L1TzuVo+Z0uBsGZzaH+zyPrOj+eTtAN7+a18m8kT+i7/0E1BLAwQUAAIA
CABVYG5JIjwDp+oAAAAMBgAAdQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRt
bC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9vcmRlcl9j
YW5wbGF5X3BsYXlpbmctc3RkZXJyLnR4dFVUCQADYhgqWDYNKlh1eAsAAQT1AQAABBQAAADtlMFK
BDEMQM/uV+ToXmQ7DohFPDh7UNBFEFEQD5lOtlu2JkubWfHv7Yg3b46ylzk2JC/pK+lK9mBqMJVd
VLaugN6zMfVJFIcRkrpEO0ka2L9Up+bs/BUultT2/tJCJu7uKGf09BR006CSl/Rh4Zj7GOez1a/J
gYMOyIdCD8I3vBYLz/cNOGEmpyVWcvYYQzeiSyb9Hv9WvC8ZV6Voa6EURhoFVkzaCK+D7xMO0375
kbddpOF0jdxFShYadBvqYAHE2Jae0KLbFqt53K0eM6XB2TI4tT/Y5X1mR/PJ2wG8/de+TOSJ/Bd/
6SdQSwMEFAACAAgAVmBuScP+Le/pAAAAZgYAAH8AHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZl
bnRfb3JkZXJfbG9hZGVkbWV0YWRhdGFfbG9hZGVkZGF0YS1zdGRlcnIudHh0VVQJAANkGCpYNw0q
WHV4CwABBPUBAAAEFAAAAO2UwUoDMRCGz/Yp5mgv0mwXxCAe3B4qaBFEFMTDbHaahqYzJZmt+PZm
xZvHPajYY8LMl3++kKzkAKYGU9lZZes50Fs2pj6L4jBCUpdoL0kD+5dqbs4vXuFyQW3vryxk4u6O
ckZPT0E3DSp5Se8WTrmPcTpZ/UJy4KAD8qHQg/ANr8XC830DTpjJadkrNQeMoRuVX7/i34r3peK6
NG0tlMZIo8CKSRvhdfB9wiHtpx/Z7SMNqyVyFylZaNBtqIMZEGNbzoQW3bZYzeOmesyUBmeL4NR+
Y5f7mZxMj95+wNvfe4lH8n/6Sz8AUEsDBBQAAgAIAFdgbkkuiMqH7wAAAAwGAAB4ABwAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL2V2ZW50X29yZGVyX2xvYWRzdGFydF9wcm9ncmVzcy1zdGRlcnIudHh0
VVQJAANlGCpYOQ0qWHV4CwABBPUBAAAEFAAAAO2UwUoDMRBAz/Yr5mgv0qwrYhAPbg8KWgQRBfEw
m52moXGmJLMV/96sePOki9hDjxlm3kxemCxkC6YGU9lZZesa6C0bUx9FcRghqUu0kaSB/XN1bE7P
XuB8Tm3vLyxk4u6WckZPj0FXDSp5Se8WDrmPcTpZ/JocOOiAvC/0IHzNS7HwdNeAE2ZyWmIlZ4sx
dCO6ZNKv8W/E+5JxWYrWFkphpFFgxaSN8DL4PuEw7acfed1EGk5XyF2kZKFBt6IOZkCMbekJLbp1
sZrH3eohUxqczYNT+41d3mdyMN17+wdvf7Uve/Iukk92gvyTv/QDUEsDBBQAAgAIAFdgbklgvv0c
OgEAAHUGAABlABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGlj
cy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BhdXNlLXN0ZGVyci50eHRV
VAkAA2YYKlg6DSpYdXgLAAEE9QEAAAQUAAAA3ZRNSwMxEIbP9lfM0R4sm7W1NUjBbg8KWkqLKBQP
2exsNjQmJcnWj1/vbLEXb7oUtLklzDzvzDtDZm4LrA8s5UnK+wPA18BYv2ecFAZ8lB43zkdt1So9
Z8PLZ7iaYl6rMYeAtrjHEITCRx2rTERUzr9zOLW1Md3O7NdkbXVskEuia2dvbek4PM0zkM5alJHe
KGYrjC46qz2/N2IJMehAtrieLGFMB0pTh2pOlZLOAg2KgEuMHFbJ27DMSzFIc8ZGlDihutaQQCUC
WGfPPtA78FiSZm0jsBbtBIxfPt05pShip8WBEg0WbcBR+Jg5W2pVe9HYshuEe9kYbG43whYGPYdM
yAoL6g6tyEkTciHXZEpo19VDQN8MZ6olWfqdTYvQOem2UjjUgh3rRA7o1z+e9d8gXxw5+Sef9idQ
SwMEFAACAAgAWGBuSQiUda3oAAAApAQAAHAAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRf
cGF1c2Vfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQJAANnGCpYOw0qWHV4CwABBPUBAAAEFAAAAO2T
wUoDQQyGz/YpcrQX6ayL4iAe3B4stEUQURAP2dl0OnSalJlsxbd3Vrx50oIoeExIvuTPT5ayB1OD
qeyksvUZ0Es2pj6J4jBCUpdoJ0kD+6fq1JxfPMPllNreX1nIxN2CckZPD0HXDSp5Sa8WjrmPcTxa
fpscOOiAvCv0IDzjlVh4vG3ACTM5LblSs8cYugOmZNKP9efifam4Lk0bC6Ux0u8EKyZthFfB9wmH
M7wfXra7SEN0g9xFShYadGvqYALE2JaZ0KLbFLvyYaruM6XBjGlwaj+xi/Gjo/G/vJ//l79I/sqP
vwFQSwMEFAACAAgAWGBuSdSSf6DqAAAADAYAAGQAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZl
bnRfcGxheS1zdGRlcnIudHh0VVQJAANoGCpYPA0qWHV4CwABBPUBAAAEFAAAAO2UwUoEMQxAz+5X
5OheZDsOLBbx4OxBQRdBREE8ZDrZbtmaLG1mxb+3I968OYqXOTYkL+kr6VoOYGowlV1Utl4CvWVj
6pMoDiMkdYn2kjSwf65OzfLsBc5X1Pb+wkIm7m4pZ/T0GHTboJKX9G7hmPsY57P1j8mBgw7I+0IP
wte8EQtPdw04YSanJVZyDhhDN6JLJv0a/0a8LxmXpWhnoRRGGgVWTNoIb4LvEw7TfvqR132k4XSF
3EVKFhp0W+pgAcTYlp7QotsVq3ncrR4ypcHZKji139jlfWZH88nbP3j7q32ZyBP5N/7SD1BLAwQU
AAIACABZYG5JjcTkPuwAAACkBAAAbwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5
X25vYXV0b3BsYXktc3RkZXJyLnR4dFVUCQADaRgqWD0NKlh1eAsAAQT1AQAABBQAAADtk8FKA0EM
QM/2K3K0F+msC9pBPLg9KGgRRBTEQ3Y2nQ4dkzKTrfj3zoo3T3URPXhMSF4yb8hSdmBqMJWdVbY+
BXrNxtRHURxGSOoSbSVpYP9UHZuT+TOcLajt/bmFTNzdUM7o6SHoukElL+nNwiH3MU4ny2+TAwcd
kHeFHoSveCUWHm8bcMJMTkuu1Owwhm7ElEz6uf61eF8qLkrTxkJpjDQKrJi0EV4F3ycctv3wIy/b
SEN0idxFShYadGvqYAbE2JaZ0KLbFKt53KvuM6XB2SI4tV/Y5X8mB9N/b7/g7afuZT/y/E+Q97nx
d1BLAwQUAAIACABZYG5J/iecevIAAAAMBgAAZwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVu
dF9wbGF5aW5nLXN0ZGVyci50eHRVVAkAA2oYKlg/DSpYdXgLAAEE9QEAAAQUAAAA7ZRBSwMxEIXP
9lfM0V5kd7siDeLB7aGCFkFEQTzMZqdpaJwpyWzFf29WvHnSxUPFY8LM92beC1nJHsoaysoUlann
QK+pLOuTIBYDRLWRdhLVs3uqZuXZ/BnOF9T27sJAIu5uKCV09OB106CSk/hm4Jj7EKaT1Y/Jnr0O
yLtM98JXvBYDj7cNWGEmq/ku1+wx+G6ESiL9HP9anMsVl7lpayA3BhoFVozaCK+96yMO0374Iy+7
QMNpidwFigYatBvqoABibLMmtGi32dU0bqv7RHHwbOGtmi/snM/kaDpK4bdyP0zy/ys64KxPiz9O
/s5f+g5QSwMEFAACAAgAWmBuSY8thKvvAAAADAYAAHIAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMv
ZXZlbnRfcGxheWluZ19ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA2sYKlhADSpYdXgLAAEE9QEA
AAQUAAAA7ZRBS0MxDIDP7lfkuF1kfU7EIh58O0zQIYgoiIe8vqwrq8lo8yb+e/vEmyd9iDvs2JB8
Sb+SLmUHZgamstPKnk6B3rIxs+MoDiMkdYm2kjSwf65OzNn5C1zMqen8pYVM3N5SzujpMei6RiUv
6d3CmLsYJ6Plr8mBg/bI+0IPwte8EgtPdzU4YSanJVZydhhDO6BLJv0a/0a8LxlXpWhjoRRGGgRW
TFoLr4LvEvbTfvqR122k/rRAbiMlCzW6NbVQ2IxN6QkNuk2xmofd6iFT6p3Ng1P7jV3eZ3Q0OXj7
B29/tS/7QjYH8t6Rf/KXfgBQSwMEFAACAAgAWmBuSZvFaVT0AAAADAYAAGgAHABpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVk
aWEtZWxlbWVudHMvZXZlbnRfcHJvZ3Jlc3Mtc3RkZXJyLnR4dFVUCQADbBgqWEENKlh1eAsAAQT1
AQAABBQAAADtlEFLAzEQhc/2V8xRL9LEihjEg9uDghZBREE8zGanaWicKclsxX9vVjzpqRYR1GPC
zDeT9x6ZyRrMBIx1Y+sODdBzMWayn8Rjgqw+00qyRg4P9sAcHT/CyZTaPpw6KMTdFZWCge6iLhpU
CpJfHOxyn9LeaPZlcuSoA/Km0qPwBc/Fwf11A16YyWu9qzVrTLHbYkohfV//UkKoFWe1aemgNiba
CqyYtRGex9BnHLZ900eeVomG0zlylyg7aNAvqIMxEGNbZ0KLfllVLdu96rZQHjSbRq/uE7v6M9r5
6I79Nt9/P3mDFNmfTJH9T9EfJG/yl74CUEsDBBQAAgAIAFtgbkkh3V0U7AAAAKQEAABzABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3Byb2dyZXNzX25vYXV0b3BsYXktc3RkZXJyLnR4dFVU
CQADbRgqWEINKlh1eAsAAQT1AQAABBQAAADtk8FKAzEQhs/2KeZoL9JsK2IQD24PFbQIIgriYTY7
TUPTmZLMVnx7s+JJT2sPgnhMmPnmzxdmKXswMzCVnVT2tAJ6zcbMTqI4jJDUJdpJ0sD+uZqas/MX
uJhT0/lLC5m4vaWc0dNj0HWNSl7Sm4Vj7mIcj5Y/JgcO2iPvCz0IX/NKLDzd1eCEmZyWu1Kzxxja
L1Omg/LrZ/wb8b5UXJWmjYXSGOkgsGLSWngVfJewT/vhR7a7SP1pgdxGShZqdGtqYQLE2JSZ0KDb
FKv5sFc9ZEq9s3lwar+xy/+Mjsb/3n7B25B9+evkITv+DlBLAwQUAAIACABbYG5JtHHQzPEAAAAM
BgAAagAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1i
ZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF90aW1ldXBkYXRlLXN0ZGVyci50eHRV
VAkAA24YKlhDDSpYdXgLAAEE9QEAAAQUAAAA7ZRBSwMxEIXP9lfM0V6ku10Rg3hwe1DQIogoiIfZ
7DQNjTMlma34782WnvTU7kWwx4SZ7728B5nLBooKitJMSnM+BfpMRVGdBbEYIKqNtJaont1bOS0u
Lt/hakZN564NJOL2gVJCRy9elzUqOYlfBk65C2E8mh9M9uy1Rz5luhe+44UYeH2swQozWc13eWaD
wbc/VKq9/OvO/r04lydu8tLKQF4MNAisGLUWXnjXRezdbvORj3Wg/nSL3AaKBmq0S2phAsTYZE1o
0K5yqmnYq54TxT6zmbdqfrFzP6OT8SCFfXr/K+Rj1/+n6yP5sL/0G1BLAwQUAAIACABcYG5JaC5G
XPEAAABmBgAAdQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRp
Y3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF90aW1ldXBkYXRlX25vYXV0
b3BsYXktc3RkZXJyLnR4dFVUCQADbxgqWEQNKlh1eAsAAQT1AQAABBQAAADtlEFLAzEQhc/2V8zR
XqS7bhGDeHB7UNAiiCiIh9nsNA2NMyWZrfjvzZae9FT3UrDHhJnvvbwHmcsGigqK0kxKM62APlNR
VGdBLAaIaiOtJapn91aeFxeX73A1o6Zz1wYScftAKaGjF6/LGpWcxC8Dp9yFMB7ND5Ds2WuPfMp0
L3zHCzHw+liDFWaymu/yzAaDb3+oTPfyrzv79+JcnrjJSysDeTHQILBi1Fp44V0XsXe7zUc+1oH6
0y1yGygaqNEuqYUJEGOTNaFBu8qppmGvek4U+8xm3qr5xc79jE7GgxT26f1QyMeu/0/XR/Lf/tJv
UEsDBBQAAgAIAFxgbknDYk6OhAAAAMAAAABsABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50
X3ZvbHVtZWNoYW5nZS1zdGRlcnIudHh0VVQJAANwGCpYRQ0qWHV4CwABBPUBAAAEFAAAAJ3MsQrC
MBCA4b1PcaMuYmJVDMWlLg4WwUFBHGJ6xkC4k+Ra8e2Nr+D68/N1PIKqQWkz12a5AnxnpepZZGcj
JHEJX5wkkL/qhVpvbtDs8D74rYGM1B8wZ+vxHOTZWkHP6WNgQkOM06r7Ww4U5Eeeih6Y9vRgA5dj
C46J0Elp5RltDH31BVBLAwQKAAAAAADZWW5JAAAAAAAAAAAAAAAAWgAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy9pbnRlcmZhY2VzL1VUCQADKQ0qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMECgAAAAAA
2VluSQAAAAAAAAAAAAAAAGQAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
c2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNlcy9UZXh0
VHJhY2svVVQJAAMqDSpYQhoqWHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACABQYG5JjgHWtLsAAACS
AQAAeQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1i
ZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9pbnRlcmZhY2VzL1RleHRUcmFjay9hY3RpdmVD
dWVzLXN0ZGVyci50eHRVVAkAA1gYKlgpDSpYdXgLAAEE9QEAAAQUAAAApZAxbwIxDIVn7ld4LEtF
DgYaoQ49hlYCNtShYvAlJkSkNkp8oP77poitG4xP8vs++W3kDGYGprWT1k5boEsxZvacxGGCrC7T
SbJGDl/t1MxfdrBYUj+EVwuFdE2lYKCVhFAv3mrpaKEWE/lmcz9YMWsnvI9hyKhR+DPqoZPvU6K/
9I7sE2ULHboDeZgAMfbVCT26I7Evj8hJt4XyB+9lGZ3af2wLT81o/JCB/W2461+oFCT/VC4PKY2b
X1BLAwQUAAIACABRYG5Ju89MxoMAAADAAAAAdQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9pbnRl
cmZhY2VzL1RleHRUcmFjay9hZGRDdWUtc3RkZXJyLnR4dFVUCQADWRgqWCoNKlh1eAsAAQT1AQAA
BBQAAACdzLEKwjAQgOG9T3GjLmLSDhrEpS4OFsFBQRxiesaDcCfJteLbW1/B9efn62QE04Cxbmld
bQHfxZhmkST4BFlDxpdkJY5XW5vV+gabHd6HuHVQkPsDluIjnkmfrVeMkj8OZjykNK+6v2Vi0h95
mnQS3vNDHFyOLQRhxqBTm57RJ+qrL1BLAwQUAAIACABdYG5JvnY3kN8AAADkAwAAdwAcAGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVu
dC9tZWRpYS1lbGVtZW50cy9uZXR3b3JrU3RhdGVfZHVyaW5nX2xvYWRzdGFydC1zdGRlcnIudHh0
VVQJAANxGCpYRg0qWHV4CwABBPUBAAAEFAAAAO2RMUsDQRCFa+9XTBkbyZ6R4CIWXooIGgQRBbGY
251slqwzYXcu4r93T+zsklLLgfe+x7y3kj2YGZjWTlt7MQf6KMbMzpI4TJDVZdpJ1sjhtT0388s3
uFpQP4RrC4X0nkrBQHcSQlXcVNPWQjUm8s3qcLBi1k54HcOQUaPwc9RNJ++7ROO1RPaJsoUO3YY8
TIEY+5oJPbotsS/HhJM+Fcq3vJZFdGp/sS1MmpPT4xL+ezsogf1Pcd9/oVKQ/Fm5PKT018iRo47I
x0qv2469W3h56MAJM7lx76rZY4q++QJQSwMEFAACAAgAXWBuSVTg/x2EAAAAwAAAAG4AHABpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRl
bnQvbWVkaWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2luaXRpYWwtc3RkZXJyLnR4dFVUCQADchgq
WEYNKlh1eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLmJipRjEpS4OFsFBQRxieo2BcCfJteLb
G1/B9efn63gCVYPSZqnNugF8Z6XqRWRnIyRxCV+cJJC/6ZVqNnfY7vEx+p2BjNQfMWfr8RLk2VpB
z+ljYEZjjPOq+1sOFORHnosemA40sIHrqQXHROiktPJMNoa++gJQSwMEFAACAAgAYGBuSab9udbn
AAAATAUAAHIAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNz
L2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGF1c2VkX2ZhbHNlX2R1cmluZ19wbGF5
LXN0ZGVyci50eHRVVAkAA3MYKlhIDSpYdXgLAAEE9QEAAAQUAAAA7ZJBSwNBDIXP7q/IsV6ku1a0
g3jo9qCgRRBRKB6yM+l06JiUmWzFf++seNOTvQj2GHjveyR5C9lBPYG6MePGnF0AveW6npxEsRgh
qU20laSB/bI5rc+nL3A5p673VwYy6R3ljJ5uxfuimBXTxkAxRnLV4vdgxaSt8Cr4PqEG4aeg61Ze
t5GG6RrZRUoGWrRrcjAGYuxKJnRoN8Qu7xNO+pgp3fBK5sGq+cY2MKqOjvdKYPd1uM+9UMlLei9c
7mP8f+RDiw4t+ok8/RPkwEEH5EOhl9YMHzXwfN+CFWayQ5OKZocxuOoDUEsDBBQAAgAIAGBgbkmA
hu/B6QAAAKQEAAByABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3BhdXNlZF90cnVlX2R1cmluZ19w
YXVzZS1zdGRlcnIudHh0VVQJAANzGCpYSQ0qWHV4CwABBPUBAAAEFAAAAO2TwUoDQQxAz/Yrcmwv
0lkr0kE8uD1U0CKIKEgP2dl0OnRMyky24t87K9486SIieExIXjJvyEoOYGZgKjut7Okc6CUbMzuO
4jBCUpdoL0kD+6fqxJzN13C+oKbzFxYycXtDOaOnh6DbGpW8pFcLY+5inIxW3yYHDtoj7wo9CF/x
Riw83tbghJmcllypOWAM7YApmfRj/WvxvlRclqadhdIYaRBYMWktvAm+S9hv++5HnveR+miJ3EZK
Fmp0W2phCsTYlJnQoNsVq3nYq+4zpd7ZIji1n9jlf0ZHk39vv+Dtp+7lL5K/cuNvUEsDBAoAAAAA
ANtZbkkAAAAAAAAAAAAAAABqABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3BsYXlpbmctdGhlLW1l
ZGlhLXJlc291cmNlL1VUCQADLg0qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgAU2BuSW2X
JPv/AAAA+wEAAJEAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVz
b3VyY2UvcGF1c2UtbW92ZS10by1vdGhlci1kb2N1bWVudC1zdGRlcnIudHh0VVQJAANdGCpYLQ0q
WHV4CwABBPUBAAAEFAAAAKWQP0/DMBDFZ/IpbqQDlZ1UarBQJZoOIAFCrRBD1MFxLk5U46tsh3+f
nqOCpWtuO+ne+917tcyVyFWxnAtZ7uGGB6rt7XoHKx7o3Bj7Z/Tt4O0WHeqIO0wKavG57Bq5kK0Q
ZSn2sHZkDiCg1xE8+atvDAQBOzA0+gRF9kTvIBfwjwP8iFIu5izTDkIyAY8UEmPqvJDlNb+ywWa0
KwUR0yPGqC0+kLV8cWIpYKHDdopx0iFV5LvBjkGngfzrkPqK3o4Of7c77VuHQUGlTY8tp0OvG2ZC
o82BS4nTUr1EDPe+o81guNJzbwWX2cVsEsG3f8WdcumElsIX+/rRuVn2A1BLAwQUAAIACABTYG5J
aub9GScBAAC7AgAAjwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1y
ZXNvdXJjZS9wYXVzZS1tb3ZlLXdpdGhpbi1kb2N1bWVudC1zdGRlcnIudHh0VVQJAANdGCpYLQ0q
WHV4CwABBPUBAAAEFAAAAKWSTU/DMAyGz+xX+MgOTO06NojQJNYdQIJp2oRAqnZIUzeNFpwpScfH
r8ed4MKBA/Utkf289muv3BHSCaRjkYxFNgN8C2k6GVmnpAUflceD89GQLsZZenW9g5sllq2eCwhI
1SOGIDU+m9jkMqJ2/kPAObXWDgerf5MNmdght0w3ju6pdgJe1jkoR4Qq8h/nHKU11aD44Y8m2YwZ
HJBvbhdbmHNAbdvQrLlT1tmgRRlwi1FAkbzP6jLNLitZT6fJDhbc1x4SaGQAcnTxid6Bx5o1W4qQ
9RgnYPz26cFpzRknLQFcaLHqA47Sx9xRbXTrZWfLaRHu9WCxe91Jqix6AblUDVY8HZIsWRNKqfZs
Sug31VNA3y1naRRb+pvNhzA4G/ZS+PvAvgBQSwMEFAACAAgAU2BuSQFBZBMlAQAAbwMAAI8AHABp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvcGF1c2UtcmVt
b3ZlLWZyb20tZG9jdW1lbnQtc3RkZXJyLnR4dFVUCQADXRgqWC0NKlh1eAsAAQT1AQAABBQAAADN
kj1vAjEMhufyKzy2Q9GFQ4VGFVI5hlZqEQKhVkIMuZwvF5E6KMnRj19fH2qXLh1Y8JbIfl77tef+
AGIIYiCzgcxHgO9RiGHfea0chKQD7n1IlsxmkIvx7RbuZli2ZiIhIlXPGKMy+GJTU6iExodPCZfU
OnfVm58h2ZJNHXLFdOvpkWov4XVRgPZEqBP/cc5BOVv1Nr/8/ljcMIMDiuX9dAUTDqhdG5sFd8o6
S3SoIq4wSdhkH6O6FENRZXmVZ1uYcl87yKBREcjT9RcGDwFr1mwpgTjJqPTj05M3hjOOWhK40GF1
CjipkApPtTVtUJ0tx0X4t73D7vWgqHIYJBRKN1jxdEiqZE0old6xKfG0qdYRQ7ecmdVs6V82H0Lv
4jwP7D/yN1BLAwQUAAIACABTYG5J0ddgeoQAAAAaAQAAgQAcAGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50
cy9wbGF5aW5nLXRoZS1tZWRpYS1yZXNvdXJjZS9wbGF5YmFja1JhdGUtc3RkZXJyLnR4dFVUCQAD
XhgqWC4NKlh1eAsAAQT1AQAABBQAAADNzLEKwjAQgOG9T3GjLmLSghrEpS4OFsFBQRxieo0H4U6S
tOLbG9/C9efn62QC1YDSZqlNvQJ8J6WaRRBnA8TsIr4kZmJ/07Vab+6w3eNj9DsDCbk/YkrW44Xy
s7UZvcSPgRmPIcyr7g9lYso/8lx0Ej7wIAaupxacMKPLpZVnsoH66gtQSwMEFAACAAgAYGBuSbba
7RKEAAAAwAAAAHgAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcHJlbG9hZF9yZWZsZWN0c19ub25l
X2F1dG9wbGF5LXN0ZGVyci50eHRVVAkAA3QYKlhJDSpYdXgLAAEE9QEAAAQUAAAAncyxCsIwEIDh
vU9xoy6StAUxiEtdHCyCg4I4xPQaA+FOkmvFtze+guvPz9fzDLoFXRvVGKUA31nrdhXZ2QhJXMIX
Jwnkb3Wj15s7bPf4mPzOQEYajpiz9XgJ8uysoOf0MbCgKcZl1f8tBwryI89FD0wHGtnA9dSBYyJ0
Ulp5ZhvDUH0BUEsDBBQAAgAIAGFgbkmHxHns5QAAAEwFAABzABwAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1l
bnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBsYXktc3RkZXJyLnR4dFVUCQADdRgqWEoNKlh1eAsA
AQT1AQAABBQAAADtkkFLA0EMhc/ur8hRL7LTFsRBPLg9KGgRRBTEQ3YmnQ4dkzKTrfjvnRXBgzd7
Edpj4OV7JO8tZAtmBmZi26ltDdB7MWZ2msRhgqwu00ayRg4vk6k5O3+Fizn1Q7i0UEjvqBQMdCsh
VMVVXVpbqIuJfLP4O1gxaye8jGHIqFH4Keqqk7dNonG6RvaJsoUO3Yo8tECMffWEHt2a2JddzEkf
C+UbXso8OrW/2BaOm6OTnRzYfz/u6y5UCpI/KpeHlP4r+ZD1/mR9IP+QI0cdkQ+VXvs4dsXC830H
TpjJjR2tmi2m6JtPUEsDBBQAAgAIAGFgbkmmr+Ul7wAAAAwGAAB6ABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBsYXl0aHJvdWdoLXN0ZGVyci50eHRVVAkAA3YY
KlhLDSpYdXgLAAEE9QEAAAQUAAAA7ZTBSgMxEIbP9inmaC/SbAtiEA9uDwpaBBEF8TCbnaahcaYk
sxXf3qx40tNawcseE2a++fOFZCV7MAswlZ3N7cwAvWVjFidRHEZI6hLtJGlg/1zNzenZC5wvqen8
hYVM3N5SzujpMeimRiUv6d3CMXcxTierX5MDB+2R94UehK95LRae7mpwwkxOy16p2WMM7bcp1aD8
+hX/RrwvFZelaWuhNEY6CKyYtBZeB98l7NN++pHXXaR+dYXcRkoWanQbamEGxNiUmdCg2xar+bBT
PWRKvbNlcGp/sMv9TI6mo7d/8DbkvYzkkfwX5CF/6QdQSwMEFAACAAgAYmBuSTUKtKrvAAAADAYA
AHYAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfbG9hZGVkZGF0YS1z
dGRlcnIudHh0VVQJAAN3GCpYTA0qWHV4CwABBPUBAAAEFAAAAO2UTUsDMRCGz/ZXzNFeZD8KYhAP
bg8KWgQRBfEwm52moXGmJLMV/71Z8aSntYKXPSbMPPPmCclK9lAuoKxMUZuiAnpLZbk4CWIxQFQb
aSdRPbvnqi5Pz17gfElt7y4MJOLullJCR49eNw0qOYnvBo65D2E+W/2a7NnrgLzPdC98zWsx8HTX
gBVmspr3cs0eg+++TalH5dev+DfiXK64zE1bA7kx0EFgxaiN8Nq7PuKQ9tOPvO4CDasr5C5QNNCg
3VAHBRBjm2dCi3abrabDTvWQKA7Olt6q+cHO9zM7mk/e/sHbmPcykSfyX5DH/KUfUEsDBBQAAgAI
AGJgbkn2Khko6QAAAKQEAAB6ABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVy
aW5nX2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRVVAkAA3gYKlhNDSpYdXgLAAEE9QEAAAQUAAAA
7ZNNSwNBDIbP9lfkaC/SbRfEQTy4PShoEUQUxEN2Np0OHZMyk634782KJz1VPRQRcklInny8ZCFb
qGqopm4yMwN6KVVVHyXxmCCrz7SRrJHD43RWHZ88wemc2j6cOSjE3TWVgoHuo64aVAqSXx0ccp/S
eLT4Njly1AF5a/QofMlLcfBw04AXZvJqMcvZYordpy71TvPrx/hXEoJlnFvR2oEVJtpPsGLWRngZ
Q59xOMP74eV5k2jwLpC7RNlBg35FHUyAGFvrCS36tclVfrbVXaE8iDGPXt0Xtgk/Ohj/r/c7//LX
ybv8+BtQSwMEFAACAAgAY2BuSa48zBnwAAAADAYAAHMAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMv
cmVhZHlTdGF0ZV9kdXJpbmdfcGxheWluZy1zdGRlcnIudHh0VVQJAAN5GCpYTg0qWHV4CwABBPUB
AAAEFAAAAO2UwUoDMRCGz/Yp5mgvstuuiEE8uD0oaBFEFKSH2ew0DY0zJZmt+PZmxZOe1gpe9pgw
882fLyRL2UNZQTkzxdwUFdBbKsvqJIjFAFFtpJ1E9exeZvPy7HwFFwtqOndpIBG3d5QSOnryuqlR
yUl8N3DMXQjTyfLXZM9ee+RDpnvhG16Lgef7Gqwwk9W8l2v2GHz7bcrpoPz6Ff9WnMsVV7lpayA3
BjoIrBi1Fl5710Xs0376kdddoH51jdwGigZqtBtqoQBibPJMaNBus9V02KkeE8Xe2cJbNT/Y+X4m
R9PR2z94G/JeRvJI/gvykL/0A1BLAwQUAAIACABjYG5JRtmqzYQAAADAAAAAbAAcAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9t
ZWRpYS1lbGVtZW50cy9yZWFkeVN0YXRlX2luaXRpYWwtc3RkZXJyLnR4dFVUCQADehgqWE4NKlh1
eAsAAQT1AQAABBQAAACdzLEKwjAQgOG9T3GjLtK0RTGIS10cLIKDgjjE9IwH4U6Sa8W3t76C68/P
18kIpgFT2bK25RLwnY1pFlG8i5DUJ3xJUuJwrWqzWt9gs8P7ELYWMnJ/wJxdwDPps3WKQdLHwoyH
GOdF97dMTPojT5NOwnt+iIXLsQUvzOh1atMzukh98QVQSwMEFAACAAgAY2BuSe9wvh/aAAAAwgIA
AIQAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVk
ZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvc3JjX3JlZmxlY3RzX2F0dHJpYnV0ZV9ub3Rfc291
cmNlX2VsZW1lbnRzLXN0ZGVyci50eHRVVAkAA3oYKlhPDSpYdXgLAAEE9QEAAAQUAAAA1ZA7T8Qw
EIR7fsWWUOTsPMTl3J04oSsoUHRUJwqfvSEWfgR7w+9nUZAoqJFA28xoZqVv91w3SrZK3m667e4Z
jqfT44BvCxaC0b0cieYve3B2QIPuHQcsc4oF77T3F21eFeQ1sDBxn92aQyc7uMacU4aqbnZtfwMj
68+SEsIno/2UCqm+l1JMFLwoGHQkZ4rAcEFr0VYmRcJIIqB1ukKPgV0RY0pX52/2Xv5kZ3tYwnzv
ovZPw8M+8gEhEe6tZcSiQK8C6ma7kTw1r3EXlux/B7L9xw9u/+qDPwBQSwMECgAAAAAA21luSQAA
AAAAAAAAAAAAAFUAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdHJhY2svVVQJAAMtDSpYQhoqWHV4
CwABBPUBAAAEFAAAAFBLAwQKAAAAAADbWW5JAAAAAAAAAAAAAAAAYwAcAGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1l
bGVtZW50cy90cmFjay90cmFjay1lbGVtZW50L1VUCQADLQ0qWEIaKlh1eAsAAQT1AQAABBQAAABQ
SwMEFAACAAgAU2BuSR11mmQPAQAARgIAAIIAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdHJhY2sv
dHJhY2stZWxlbWVudC90cmFjay1hcGktdGV4dHRyYWNrcy1zdGRlcnIudHh0VVQJAANdGCpYLQ0q
WHV4CwABBPUBAAAEFAAAAKWRTU/DMAyGz/RX+MgOVP2SOiI0iXUHkAChTYhDtYObumm1kExJytev
xx1w4Uh9syU/7+vXdZqJJBN5GRdJuYcrLqi21+sdrLig06PvH8m0g1Fb0oSedhQE1Ml72S0L2RT5
JcpkD2tt5QES6NGDsebik5wFRx1IO5oAefRgXyEt4FcO6M2naRHzGmpwQTo6WhdYps7ydJmylVvT
2ZUAbZXiMfiALvg4jv+B2lAzKmZ5CvfkPSq6+6aebAvgRU3tHPBkrrKmG9ToMAzWPA+hr+zLUdPU
3aBpNTkBFcqeWg6KDDasCQ3KA+fr51315MlNeW0Gyd/5yxZwHp0tZimY9ie4010YSFn3wVwzar2I
vgBQSwMEFAACAAgAY2BuST23A/u9AAAA7AEAAGMAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdmlk
ZW9fMDA4LXN0ZGVyci50eHRVVAkAA3oYKlhPDSpYdXgLAAEE9QEAAAQUAAAAtZCxbkIxDEXn8hUe
YaleALUiQh36GECibFUHxOCXmBARbJT4terfN63Y2EAdr+R7jnw38glmCmZsm4ltnoC+ijHTxyQO
E2R1mc6SNXLYjifmebaD+YK6PrxYKKRvVAoGWksI9eK1lo4WajGRH2xuBytmbYX3MfQZNQp/RD20
cjon+k1LZJ8oW2jRHchDA8TYVSd06I7EvtwjJ30vlFe8l0V0aq/YFoaDh9FdBvaX4f7+QqUg+bty
uU/pP8k/UEsDBBQAAgAIAGRgbklG2arNhAAAAMAAAABsABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRz
L3ZpZGVvX3ZvbHVtZV9jaGVjay1zdGRlcnIudHh0VVQJAAN7GCpYTw0qWHV4CwABBPUBAAAEFAAA
AJ3MsQrCMBCA4b1PcaMu0rRFMYhLXRwsgoOCOMT0jAfhTpJrxbe3voLrz8/XyQimAVPZsrblEvCd
jWkWUbyLkNQnfElS4nCtarNa32Czw/sQthYycn/AnF3AM+mzdYpB0sfCjIcY50X3t0xM+iNPk07C
e36IhcuxBS/M6HVq0zO6SH3xBVBLAwQKAAAAAABTYG5JAAAAAAAAAAAAAAAAUgAcAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90
aGUtYXVkaW8tZWxlbWVudC9VVAkAA10YKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAIAFNg
bklpCzVHHAEAAIIGAABmABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS1hdWRpby1lbGVtZW50L2F1ZGlvXzAwMS1zdGRl
cnIudHh0VVQJAANdGCpYXRgqWHV4CwABBPUBAAAEFAAAAO3PQU/CMBTA8Tuf4h3hwEbLYHNRE52a
cACXcNCEEFK656jWdnktmH17C8Qo30ANt9em+b/+ZnYHLAHG8wHPhyngh2MsibSVQgN5SdhY8srU
Cz5kGVvC5R2ut/V1Dg5NNUXnRI1Pym8K4bG21ObQNVute53ZLywro/w+OQ91Zc3EvNgcnssCpDUG
pQ934c1OaFV1Fl/9aJwmS1Ae34VrjVzN0ZdkGyTfglO1EVpjBUh01Wc8zUbQfXtQ9a1w+Lh+DdF7
IkuryTEbLFUPuurnSXiI53ZLEgshNxgXlnCKlRLfU5+NxjziySAOq731bYMuLrVokeKw7Ditbvb/
iyRoZRA4vxj+N0SanCAK27R/QjHIshPF6Kw4K86Kg+ITUEsDBBQAAgAIAFNgbknG/BMS3gAAANAC
AABuABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L3RoZS1hdWRpby1lbGVtZW50L2F1ZGlvX2NvbnN0cnVjdG9yLXN0ZGVyci50
eHRVVAkAA14YKlguDSpYdXgLAAEE9QEAAAQUAAAA1ZAxTwMxDIV3foVHGK5Jroc4slVUqAMDOpWp
YkgTl4twkiPx8ftJOWaYkEBe3rOfpc8+qFbLVq/7VSevn2G33z8O+DZjYTj5lx3z9GW33g1o0b/j
gGVKseCdIToa+6ohLwMHY81Xt8yhkx1cYs4pQ6Pa23V/BaeqzyEtBCVraEyFdd9LKUYOJAoGE9nb
IjAc0Tl0jU2RMbLgERszO58aJAznTsn24vA9frXbOUz3Php6Gh42sd4QEuPGuUpZNJhFgGpvVrKW
qms1C3Om3+JU3f96c5yJfuL/E3/+BP0AUEsDBAoAAAAAANtZbkkAAAAAAAAAAAAAAABTABwAaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250
ZW50L3RoZS1jYW52YXMtZWxlbWVudC9VVAkAAy4NKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQA
AgAIANtZbkmEvdaphQAAABcBAABwABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9o
dG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L3RoZS1jYW52YXMtZWxlbWVudC8yZC5jYW52
YXMucmVhZG9ubHktc3RkZXJyLnR4dFVUCQADLg0qWC4NKlh1eAsAAQT1AQAABBQAAADNzDEKAjEQ
QNF+TzGlNsJgBA1iszYWLoKFgljE7BgHwowk2RVvbyy9ge3n8zodAQ0gWjR2MQd6ZUQzi+pdhFR8
oqemwhIuqyXiFdZbug1hYyGT9HvK2QU6cXm0rlDQ9LYwkSHGadP9wOYPYBYuX/FYcVbZyV0tnA8t
eBUhX2qrz+gi980HUEsDBAoAAAAAAA1abkkAAAAAAAAAAAAAAAAtABwAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvVVQJAAOJDSpYQhoqWHV4CwABBPUBAAAEFAAA
AFBLAwQUAAIACABhYG5JNtk/WrQAAAA9BAAAVwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFjdGl2ZXNvdXJjZWJ1ZmZlcnMtc3RkZXJy
LnR4dFVUCQADdhgqWFINKlh1eAsAAQT1AQAABBQAAADN0D0OgkAQhuHeU8wFMMzA8tdpaEyslNgY
iwUG3AR2yS7E4OnlAFJD9+WtnnzkY+QhehgCUuYHmU9HxBTyqR9urGu2hWV+UoAJZoIEpviCS6uN
VbqFyujRmq5QPZfSMTgeoZyh6hTrZXElp6WeHnfZDx2fp6Zhmys3dHK+ypktfKQDWddcw2hAgpt1
9bZGqy/bA/2hEdFuaWKV5seUbkqL4t2+Fu+XlgSrtCgVW9ICEe6B9gNQSwMEFAACAAgAYmBuSVHy
F9WLAAAAmwAAAFAAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1hcHBlbmR3aW5kb3ctc3RkZXJyLnR4dFVUCQADdxgqWFYNKlh1eAsAAQT1
AQAABBQAAAANyLEOgjAQgOHdp7gXwNgWiLJpWEyclLgYh6M9sEm5kivE1KeX5B++/Pqg6kKpQpWg
dHMwW3tjSmjXab4TO5JOiF7aqKNqKl3VJ/OG68hRPI9gIy8SQ+cn6jERJFqgz2CDJ95EFtftnp8P
nOZAl3UYSFqf5oD5hpkEvpgAnSMHSwSElNl+JLL/kez+UEsDBBQAAgAIAGJgbkmk13TaHgEAACkD
AABMABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFz
b3VyY2UtYXZ0cmFja3Mtc3RkZXJyLnR4dFVUCQADdxgqWFkNKlh1eAsAAQT1AQAABBQAAADNkE9r
wkAQxe/9FPMFNNnVpDW3NtYqKEiMvZQe1t1RF5KddP9Y0k/fpBQKIh7bwsC8Gd7h9x6PWTpgbMDG
wHgWj7oZ3nbHNNRNgUahLS3iCx+xO5YlPEknk1dYHAxZbQ4gyXhLValr3AmH4NDDrgVZaTSdQilC
971/3oi6qfAh7Pdop9o1lWiXokUL78KBUAoVeAIBrjXyaMnoD7Q3/BLa+Bpa8qdoSfwf0KINBSsx
F/KIUU4WV6i0+FEDlqR8yMdxtLbkybcNumimD/OyXPc7/6KYC6MqVHlwnuptsey8J93FGspvzHND
blF4LNA1ZBxOtfQzsk/oC3wL6HwGOYVKgSHfxz+h9bAtFz3/arF6hB4jg8u9TtIrvY5+q9dPUEsD
BBQAAgAIAGJgbkkBX9qorgAAAAcDAABMABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYnVmZmVyZWQtc3RkZXJyLnR4dFVUCQADeBgqWFsN
Klh1eAsAAQT1AQAABBQAAADN0rEOgjAUBdDdr3g/gOlrKQqbhsXESYmLcSjlgU2gJS3E4NfLB4gr
bjd3Orm5nGESIUYYA/KMiYzFW44M8rHrL2Qr8oUnunOBe8wkl0kqH3BqrPPGNqCdHbxrC9NRqQJB
oAHKCXRryM6JtBrn9nC7qq5v6TjWNfnchL5V01lN5OGlAqiqogoGBwrCZPXTO2ve5Df8Kw0XaZji
ujTxYzWxLk0u0qTYrUrj/B++9gFQSwMEFAACAAgAZGBuSaZA2vUtAQAAyAMAAF8AHABpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWct
Y2hhbmdlLW1wNC1hLWJpdHJhdGUtc3RkZXJyLnR4dFVUCQADexgqWGANKlh1eAsAAQT1AQAABBQA
AADl0MFuwjAMANA7X+EbcIC2tCsDaRc60HaohIR2QgiFxIWINK7cdBt/v1SIgdC0H+AUx7Etv6yj
0TSMp2EyfE7GGyhY7HNhdUFGbZdNfZidHNZQ670VxqACZH4ZRGmYpNA7LvRv8ZyZePth8btC6VC9
W+1ehRN96K1QklXQLdyp6oJwVAJaSY11yKj6PgPBihqWmAl5wCAjxhyVFtdoED2lo+EoCYMlkyM/
COtgQVwK9yasMsh1kNOnxqBdqQ0WHlKidZf9hhKMtghRGoed9RWdTh4QPX5E9CTaQJavRFkZnDVF
gZx5qB8997uc03f6CHr+8K612BE7bfdgiCpAweYEqkFw1BYS+9/0Vulbd0IeN/9It/7fS/wiPtZ/
oc8956dWeLvu/f0CjdM07vwAUEsDBBQAAgAIAGVgbknGFKBQlgEAAGMEAABmABwAaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNo
YW5nZS1tcDQtYXYtYXVkaW8tYml0cmF0ZS1zdGRlcnIudHh0VVQJAAN9GCpYZA0qWHV4CwABBPUB
AAAEFAAAAOWRz24aMRDG7zzF3EIOsOvdxQWkHhoIaqQiRSXNBSE0aw9g4bVXs96m26evVzRpFEV9
gZw8Hs+f7/d5K7J5ms/TT+N8mu/gwHhcozMHb/X+vm1ON12gBhpzdGgtaSDmzyMh00LC8LwyL8W3
zJ73Pxz9qkkF0nfOhCUGvIbhhpR3Gq4OoauvAIOvgJzyrQvEpK9jBpKNb1nRAtWJkoVnWpM2+C8a
iYnMxlmRJvfsg4+DqElWnisMX9FpS9wka//TUNJL6oNVBKnIhWd9YwXWOAIh83SwfYEu0skHhM6K
DwhdyB0s1husaks37eFAvIigcfRt1HJJv6EXMIxH5Npi6TkYdwTrfQ2EbDvQLUHwfaHn6GZkVbG1
RHXe/Yd0H32v6MnzuXkP+tJzeeoJX8t9e38GzaXMB1kq5EiIkSjgL/JsLKcClm1VfyeniR+YaJvl
Yirmk2wiZ7Md3B2d5x4rfltgbx9MRSU20QcKUHagrInGQkkK25j98vh6/dI0tcXuG3bE8IQNoNbR
uGgJQtM5dWLvzG/iwR9QSwMEFAACAAgAZmBuSQ9D3JCUAQAAYwQAAGYAHABpbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdl
LW1wNC1hdi12aWRlby1iaXRyYXRlLXN0ZGVyci50eHRVVAkAA4AYKlhoDSpYdXgLAAEE9QEAAAQU
AAAA5ZHPbhoxEMbvPMXcQg6w9i5sI6QeGghqpCJFJe0FITRrz4KF116NvU23T1+vaJooqvoCOXk8
nj/f7/NO5gtRLKSYilmxh5rxuEFnam/14aELp9s+UoBgjg6tJQ3E/HEiSzErYXxem7/Fd8yeD98c
/WxJRdL3zsQVRryG8ZaUdxqu6ti3V4DRN0BO+c5FYtLXKQPZ1nesaInqRNnSM21IG3yJJnJe5tN8
JrIH9tGnQRSytecG42d02hKHbON/GMoGSUOwTiANufisb6rAGkcgy0KMdi/Q5XuEvpHvD1qKBL3c
bLFpLd12dU28TKBp9F3Sckm/oZcwTkfi2mHlORp3BOt9C4Rse9AdQfRDoefkZmJVqbVCdd7/h/SQ
fG/oyfM5/Av60nN5Gghfy317fwYtyrIY5UKWEykncgZ/kPPpLC9h1TXtV3Ka+JGJdnkhb+Rins8/
CLGH+6PzPGClb4vs7aNpqMKQfKAIVQ/KmmQsVKSwS9lP31+vX5nQWuy/YE8MTxgAtU7GJUsQQu/U
ib0zv4hHvwFQSwMEFAACAAgAZ2BuSYtoYwc+AQAAegMAAF8AHABpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12
LWJpdHJhdGUtc3RkZXJyLnR4dFVUCQADghgqWGwNKlh1eAsAAQT1AQAABBQAAADlk09rwkAQxe9+
irmpB002mvgHeqhaqVBBqu1Fioy7E1262Q2zm7bpp2+Etn4Ib4/HMPN+D2Yvkmk8mIqkPxqkb5Az
ntZode6MOmwqf57VgTx4fbJoDCkg5rueyOJhBp33pf4ffmB2fHix9FWSDKRWVocFBuxCZ0vSWQXt
PNRlGzC4AshKV9lATKrbOBBtXcWS5ijPFM0d05qUxqvqiTRL+skwjjbsgmsWkY+WjgsMj2iVIfbR
2n1oii6RLmLZgBRkw1++vgSjLYHIBnFrf4VOkxuEzsa3Ap3EIusJ0RND+MUf9kejCSyqonwmq4h3
TLRPBmIspmmSZpPmCVYn61jbEzQ0gZ3Z6YKO6Ak8BTjWII1u7sGRJFaNe/+6xaI0NKvynHihfWmw
fsKaGD7RAyrVtBkcIPjayjM7q7+JWz9QSwMEFAACAAgAaWBuSb2zz+A+AQAAegMAAGEAHABpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25m
aWctY2hhbmdlLW1wNC12LWZyYW1lcmF0ZS1zdGRlcnIudHh0VVQJAAOFGCpYcA0qWHV4CwABBPUB
AAAEFAAAAOWSQU/CQBCF7/yKuQEHaLfQIiQeBCSSSEJEvRBDht1p2bjdbWa3av31lkTxR3B7eZnM
vO9l9iKZxaOZSIfxdPIGOWOxQatzZ9RhW/vTvAnkwevCojGkgJhvByKLxxn03lf6MnzP7PjwYumr
IhlIra0OSwzYh96OpLMKunloqi5gcCWQla62gZhUv3Ug2rmaJS1QnihaOKYNKY3/aiDSLBkm4zja
sguuXUQ+WjkuMTygVYbYRxv3oSk6RzqLVQtSkg1/+YYSjLYEIhvFnf0FWoj0CqFH4lqgk1hkAyEG
Ygy/+JOhSGJY1mX1RFYRPzPRPhmJGzFLkzSbtv+wLqxjbQtoaQI786xLOqIn8BTg2IA0ur0HR5JY
t+7d6w7LytC8znPipfaVweYRG2L4RA+oVNtmcIDgGytP7Kz+Ju78AFBLAwQUAAIACABqYG5JRdtt
xz0BAAB6AwAAYQAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNl
L21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVzaXplLXN0ZGVyci50eHRVVAkA
A4cYKlh0DSpYdXgLAAEE9QEAAAQUAAAA5ZDBbsIwEETvfMXegAMkDiQFpB4KFBWpSKjQXhBCi70B
q44drZ226dc3SG35CG6j0Wh33uxEMokHE3HXT+PxHnLG0wqtzp1Rh3Xlz9M6kAevTxaNIQXEfN8T
WTzMoPO+0P/hR2bHh1dLXyXJQGppdZhjwC50NiSdVdDOQ122AYMrgKx0lQ3EpLqNA9HGVSxphvJM
0cwxrUhpvKqeSLOknwzjaM0uuOYQ+WjhuMDwhFYZYh+t3Iem6FLpIhYNSEE2/PXrSzDaEohsELd2
V+hkdIPQw/RWoJNYZD0hemIIv/jjfpqOYF4V5QtZRbxlol0yECMxSZM0Gw/2sDxZx9qeoKEJ7MxW
F3RET+ApwLEGaXTzD44ksWrch7cNFqWhaZXnxHPtS4P1M9bE8IkeUKlmzeAAwddWntlZ/U3c+gFQ
SwMEFAACAAgAamBuSYPZgb0HAQAAFQIAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kZXRhY2gtc3RkZXJyLnR4dFVUCQADhxgqWHYN
Klh1eAsAAQT1AQAABBQAAADVkM9qwkAYxO99iu8FNG78g+bWxloFBYmxl9LDujvqQrJf+u3Gkj59
DRR66Qv0NMMwDD8mOXArBrk2VyQ5C3awTv+6gZrO0mE6GSV74cixaxCSlbusy3Lfa145+LjW3law
eRsi18die+/enIUMDZk/C7lARxQIDfuApTNxxfKCWOCjRYgZ5dxWljxHMuxvkEjHckORabfZPVOP
kdFDOlKzgVIDNSGVZqNxphbD+WxMy7ZuCvg7QCnAWzpWc5VN06laqHfaXDyL85d+OApXpatx0gEU
EOnU/QDTCUa39/Tx9aDrpsJTez5Dli40le62uoPQpw6krYXtuTSFzpursHdfkIfkP//6DVBLAwQU
AAIACABrYG5JaUeJBQ8BAACEAQAASAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLXBsYXktc3RkZXJyLnR4dFVUCQADihgqWH4NKlh1eAsA
AQT1AQAABBQAAABdULFuwkAM3fkKjzAQuAuJClKHNhSpUlkK6oJQ5VyccOJyjpxEKP36HgKpqJPt
Zz/b7x2UXs3jlVaRXi6PkG13WDeOXvuyJMnQuQ3LG5rTDYbWVj6AVACJPCsYhzCB8QFzls76Chxz
A4TiBih6go6vgyxQCtdgAjVHcz5OADuY7bgXQ1nYTrOMhbZUWPwuBWu6sJzbP3CqklRHejG/c26t
2cZWj+/+ryMDznqCOE3jkZ6rdKrUVC3gLllHyWIJ675uPskXJHshOuhYPalVopN0GR/hvfIsV1mG
fSfs9ramHNvgA3WQD2CcJR8yMtgH9OXr8fzato3D4QMHErhgC1gUwbhgCUI7eHMS9vaHZPQLUEsD
BBQAAgAIAGtgbkmXYw2NigAAAJsAAABXABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS10aGVuLXNlZWstYmFjay1zdGRlcnIudHh0
VVQJAAOJGCpYew0qWHV4CwABBPUBAAAEFAAAAA3IsQ6CMBAA0N2vuB/AcEWIsGlYTJyUuBiHoz2g
SWnJFWLq18v28lSOVYaY4QlQNXnRKDzmJUK7zcuDvWHphPmtCjxjU6qyqusP3EYfxPoRdPCrBNfZ
mXuKDJFX6BNoZ9nvYk3bvpfXk+bF8XUbBpbWxsVRulNigS9FIGPYwBqAICavJwne/lgOf1BLAwQU
AAIACABrYG5J6bmdupoAAAD0AgAASwAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLXByZWxvYWQtc3RkZXJyLnR4dFVUCQADihgqWIANKlh1
eAsAAQT1AQAABBQAAADtzrEOgjAUheHdp7gvIFWiDqxVlEQSg/AApD3RJtir7a2Jb69MLi7uTOcM
//CpM6dgoHtzhdIcUMO6/vvmy/Umz/LVQp0CC8vrjqhKdzm07WlcPTh4OfTeDrA6ReFb1xw/7dNZ
hMyQ+RnogF7QIN7ZR2ydkZLDHtLgkRClIM1psORZyLB/Igh1bUXCVFf1jkZGQTM14Sf8//g3UEsD
BBQAAgAIAGxgbknSa4H6igAAAJsAAABSABwAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVkdW5kYW50LXNlZWstc3RkZXJyLnR4dFVUCQAD
ixgqWIINKlh1eAsAAQT1AQAABBQAAAANyLEOgjAQANDdr7gfwPSKoGHTsJg4KXExDkd7YJPSkivE
1K+X7eVphXWBWOABUDeqbHS5ryuEdp3mOwfL0gnzS5d4wqbS1VGpN1zHEMWFEUwMi0TfuYl7SgyJ
F+gzGO84bGJD67bn54Om2fNlHQaW1qXZU75RZoEvJSBr2cISgSDlYD4Sg/ux7P5QSwMEFAACAAgA
bGBuSZECUTE3AQAAdAUAAEoAHABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtc3RkZXJyLnR4dFVUCQADjBgqWIUNKlh1eAsAAQT1
AQAABBQAAADlkctOwzAQRfd8xSzbRR+2k/QhsYCUSkh0Qys2UYUcZ5JadexokqgKX4+rIqgQsIRK
rGxfe8bn3kkYn4/FnAdDMZ1uIV6tZVkZvG3zHCmWxiwd3Um1O8lQ68J6ETNAomsGPb/0oZfI1FGj
bQHGuQpQkukgaxEad3zoCHJyJShfmkq13/ZBNjBau5YUxr47jmJHuMJMy+ecZIkHR/v6QxywMOJD
Hozfak5Xo6UuznE/n4cKjLYIIorEVfJfjPIxiwaMDVgA75YDNoFFW1aPaDOkDSEmXLApm4c8ZDO2
hfvCOjraUs425MxGl5jK2ueADaQdKKPR+h0q2Xr15un8+4WuKyO7B9khwUHWILPMB+cjkVB3Vu3I
Wf2C9DUaZ9+iRTPxt2iTi0UTwcUOVMwuFi0Ifxho+Ftor1BLAwQUAAIACABtYG5Jv9EzVpkAAAA2
AQAAVAAcAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLXRpbWVzdGFtcC1vZmZzZXQtc3RkZXJyLnR4dFVUCQADjRgqWIkNKlh1eAsAAQT1AQAA
BBQAAAC9zjEOgjAUgOHdU7wLYGihBNg0LCZOSlyMw6M8sElpySvE1NPLAYyj259/+mQqikSIROQg
ZJ1mtVT7rMihWaf5Qq4nbpnoLjNRilpJVVTqAafReTZuBO3dwt62ZqIOA0GgBboI2hpyW5HGdbuH
2xWn2dJxHQbixoTZYjxjJIYXBsC+px4WDwghOv1k78ybeCe/0softOpftA9QSwMECgAAAAAA/Vlu
SQAAAAAAAAAAAAAAAAoAHABpbnNwZWN0b3IvVVQJAANtDSpYQhoqWHV4CwABBPUBAAAEFAAAAFBL
AwQKAAAAAAD9WW5JAAAAAAAAAAAAAAAAEQAcAGluc3BlY3Rvci93b3JrZXIvVVQJAANtDSpYQhoq
WHV4CwABBPUBAAAEFAAAAFBLAwQUAAIACAB3YG5JYssrskkPAADSswAALwAcAGluc3BlY3Rvci93
b3JrZXIvcmVzb3VyY2VzLWluLXdvcmtlci1zdGRlcnIudHh0VVQJAAOhGCpYbQ0qWHV4CwABBPUB
AAAEFAAAAO1d+2/bRhL+PX+FQKBAcvCD+971oT+4idMG57aB7Z4LVMWBltY2E4nUkVQeF+h/v1k+
ZEmkHjaXFi2nSBM+l9/MDmdn59uhXkT6v2MdJ0edb47fd46w2nOGOrkNYds5GweJP9QH+pM3GHuJ
dvackRd5w9g5+uboL6NIx7EfBnDlBTTx3rvRB16/f6bj8SB5OQ503PNG+mXX6TqvXsG94dUH3Ut+
jsLxCG5J4BY46Ae9wbivX4fDoRf0T/1AH79/5xxde4NYTyYvfvyxAygCP7jpmBs68dhP9FHnMow+
6ugAHhWOo56OXyyIQdwGxPiBvDF/sJsjgi2DCf5JUf1AjmFzEVkN2ff352XveXFZ9IPzxIuSkvyo
Afn396tkN6gqRc+Q1ZB/USb8IJmSyL+50VEGLoX08qGA9CcdpHCmMN7oq7Fp/SDuRf4IdBfFuj+H
JTvxzlxMFIFT42gA27ARGyzmGc6Rm++9DgfjYZDu6+z5xXZxhuBUMfEoDIwxfHOitJvMk+62kq8j
uNEZB319DW30ncme89mLL26j8HNQiLOXv+8WxKK1xZLMrljEtSAWa59YyIJYvLZY2K18GX7TyWd4
yw7y9/bSHwx+0udw1RyW/GwKxj3AQgo4fQ1ndX4Iwf4g9Po6Kq6BA/2wNx5CU3+cncKxa3+gjw4P
D/9tAOn48I2XeIcnl+eHl/rqX35yeOp9DceJ8WbxoR/EI3jTw+jwc+oCDqPCNe/7wX527OA2GQ7g
KTk2AzPTkJ0H5Qf2pwcOPsTOjDP7+eQCdm+1kTnV0XGvp0cAw/nH4T+cCXS+8XXQOUPwVehAuFQy
l0mulHAZNW7LT3wPnjxjTlmXZz3c+3gReT04+tc353oc9BLwjL+BwjMTyCT9K/AS/5Pu9MK+/tvc
dmcyrukQMIPfxsMrHaXG0EstYXpgsldquOx2p49qqvdmrVyqBdCohBrTCtg3g/DKG6RamHtNFl+g
uaYXW0aqouVipLr0k9vzXjjSJ18SHaSDVFN98J/imb8Hy4RJ3755PZGSotSqto+D/mXkjTZ+gOIl
dblshb42bliWGoZR4G/z8mRvxJ+/nMEdYIk3Omsis54j94A7lt00Xu0eswed6Z6G3u5b8I7z7oFx
QYmgSinOiCunCjgvXEKB4JH8HCBLxnExwMDmhf6SZB165/NAdUOQ4iKDmsAVhx+8T97UjV1H4fCN
H3987fVuda7uVHAIRtMhzriYC9+YTuohEaKKGA+pID4x48fQ84PTMPw4HmXeyMCZPXoS9PPXKghA
vLuL8gPF+Vj3xhGEiOlBMNf8wn00HT7ubi0UXRyZTFYOnH3Q+uZWsdDpkgmuKHFdl3MMYExjpzq4
SW7BICUyA7jxK/03M8f3USWePJDPevN1pOEtnMeTnVl8ifaaN6byrKByohN4VwPtlGcQZK8kZAxx
za8wWYBZz0WYHdtI1GF2Dxz+1oXGuwZJN28ddroLYLrOpAL87IxmGsUtRU+bRI/n0S+gqYZPquDH
OvkJTObjKPSDJD7umRFtDpOXHTpKonHVLI81KSVZImUV6K4DF2cPgYuhBS8/nCOvUAhdopD33jiG
Qfg4jnVkfEY8P11NVdxfPvHlTaqELldJCXZJJTn07hR7hVLYaqWcfDGxbkkpZqQwMIMQ5h8VOhFN
6oSt1ckd6pJOUuTpfQY7vDlVSpntUhhL4nCwwm3JJmXl87LOg8nf+/fH5+dHneM+DB+dizSA6sS3
4XjQ79x6EK9mz++YMOOgBL6JhKLBk+WcUkzwb4bKpOJSXLBhkE2TUiZdZdDZy0ZRt9wp2Txs4P9v
o+FyZShgQjyIbN5Ck/HtA6IBxZDAroJogAq5LLotwlWyIgjo+/HIS3q3ubG9hTDsoeaWPbebPrgY
MyfOGnBoDXa65jxbc56vOS/WnJcWMjKifqJJWZ7BqNViU3drJoPXmgzeGjayFtv2XjW6FhvdGja2
FhvbGja+Fht/HGyVAcmMfykHIrmPSW8hSqYXgJ9J95ubpKWPmXqxrnFV3Vk/lh/JPZkZBHi2e3c6
C5lq+1X5GFPSjT02iDnrsq3m0OXu59CLrf1x4g8gzrpnFn3POdPXOjJpwWYTFHOhGD5wwQwFxhy7
LkLLkvVhcgvAJuVM3dJsZdlyftHe6ODGi67AYYCNDQD0wrvRy46mAfb00XDaxKyFGWcZNIDtCo4J
YVgp6TIsUtOdnsTS5YJzAeGl5GoysZfulPdMdwIYSggnLhFKKTMrfLRk5zKDfOx0p7ExKRUnRgWM
Ecl2Lt0py51OJUVKuSAxyE3m051IivukOx8056qAxLibTbmQwisTqy0KClQTQUHlm3HvsEA1FBUo
21HBCkewSVygNggL3hVPn6ZO3oaRAfYuAOsJEmigQuDZG83FU8M7MQ+4CE/9GO4Eh/Sym5vmu/gM
XNRX6KvOdJr46p9G7aX8B2rXQrHNFkv9+ctZSRDcgqVSgKuG7Fl6Ls/CVeTnUKcw0VJ6jpJG03PT
7NvS/ByC/6foLKbnaP3FYkXvnMK4AB20rWVj1HVbt2yMIgtiofppL2JZLGxBLNy6bB4lFsSysHbR
tSwWtTiDVrs/gzYhMvgxCE7SNUctnzhjJIli0kycYS5qkiebzJzXLPJZMVIWsVGncPsZ3ZUaWHnY
ZNsaNguYJr6YBQr7GdTacUTRbKGYK90xVlNSAW9UBQWKWdmvzJ7B0oSMELf3O0nYAYOaN5Cy5GI7
khuE5p/Q/HWry3ZiUS+3XtwJwg6IAjbVSR1jWQ/ysfQAaODvwAieIYKNDFODUTPu3Dmokuhqy2Ez
ngmb4zpaODs5//2Ps9cn50eldRtN1NBMHweC1kB939l4SbYmZq/3z4g0If/sKF8SGz+u2LNYakhr
K7ms7p1cxhhxjihHSgmK5UKY0VhqeSFSe0BG2RuNBn7PMxnbw7yVe6WUMRIUyZS2cBERu5dSVuWu
JlIIQqRSEpkld3MLaN3GE8oVgJgrXSFFuohHVeTgGHkKObhfwUBWZuAY3UIGroTKXu6JsTq5JwPM
VuZpRYgTw0A0WB/oML6tQCcF2EDAUzsRUr/aEbm203HMglz1yx0FsiwWtyAWt9BdtuUSFuSqv2hQ
2E4zSgtiydpiKdtpRmVBLFVbLErtisXql0hTVJ+ZkJZ7i1lgJhBqnStkFpgJhFvHIzELzASqz0xI
271FLYhVP87A0uIaQ+XuKkPyMF6kRFgQmKhxgU3RKVPcJEdr1OXH2YqOZurCTa8VU4wsk/E462Fm
V+HgBeC0VBVOln9VoGKOtOWvC8hS0bz7oK8LZK/9yq8LYPH96wLt/LrAdMb91rjJpcTipRev4hZZ
s/RSim0No1ggfHRSkcndJRWN01pGKTLVFkrRoGyCUMx4u+zF8ONUISZzvIRa5O5j6WMGF+z58VQR
w0wRTdKMG+bgONq1HNxy0pHj3SUdOXmWpCOnT5J0LInBnuKC57caRvaSKLwFS55TZFtavsHFrizf
WBRM2l32nHbSy4eDs5dRscBwoPoMh5KWxeKb8MeeP1jDHqfJmblsBKVYUuFirpRiaelpFJkqkHTh
wAVEX3kTEJ/+cXba+Zyu90o61yHA7oQBBGgQpcU6+gTarS67Kb4UktcjpROGOZDTQiXohtSizOdc
MtHM5ApaNF2R4jLoM2iZsCZmNtJP3+Gjzn0xT2dmg/Amn8vNTGzTTfu5o0iPtAd2BG9eOnPPxT0r
d9fEAhWJ6nNbyvIXSpkFaguJ9qXfLVBbyAK1ZZmxYxaoLVSf2lKWe4tboLaw27rBglugtjBqHRHJ
LVBbGLeOiOQWqC1MWucJuQVqC9PWEZHcQnyJ2/fBcG5hBQ3mrVuSwS1EGVi0zwilRboWPY+CtnSG
+kRK2piSyIVpmVlizIWkVkraLC2O38xe5sThrgsCUSVAHCnMz3M83ur4uW7fwvp4pgSBiB5BV3Jl
PtC5W8vjU2tY6GwsletS6bqImu8BzS2Px00vj68CRCQnGGxQUcWZxeJOrp5VcefmhY/C/V74mOoB
7XThI1mRORd4y5lz0jwHKcjucpCCPksOUrAnyUFuHASV5OWPL+8dGousqxBPr8StknMVcutFbnUZ
10WJlM0yt3pM42aLbFYNbNJtySIb0pZCNyzbV+jGLRAWWLWvIkxYYCyI27qKMGGBsSCodelHYYGx
ILh1RIywwFgQ0joiRlhgLAhtHREjLDAWxELNr+VP8AkLjAXhrUvtCwuMBRGt+2CisLAugkg7Xxa0
xpzgXS50awdfsihpiSoRhIPT5cx8eAchVquWzgvC4OswHMeNlUJdG6Uuq+giau3vxaI1RXpv59rf
ZpmeLJdXbV6m14QY9yzUw6UyLowfVqiXuq3VhXrffwZ4pwv1JHoehXqbFrFJ/L2IbU4f5JkVsa3M
r9Fdy68tJ5Ak210CSfJnSSBJ8bwIJCl3hECS6imW7b0bjsIoyX7DalEi5bagem8W4FbHFYV2bVxZ
FBDXL+mb7a02VPMJCzQObV+BhrTA4lDUupouiSwVKZZWkApFGPxnFsRyzun3KsUGqxTnEn+b1ili
K3WKFLeu8k1aoPAoaV3lm7RA4VHaPsdqgcKjrHWEq7RA4VHeOsJVWqDwaPtqgKUFCo/K1hGu0gKF
R1XrCFdpIcRkFkJMy2IpCyEmQ61z8MrCQiFWP8rAwrJY2CItTXa/oC+vovPT6eo+WvMD7yXSWErk
CoQQVkq5DJPG6+uyaiwTyvfNjzhnlWNrOtFioZIi3wuVKpkoRb8XKqV6YDtdqERX5QX5lguVaPM8
kxK7yzMp+Sx5JqWeF8+EXPeJEk33CmPKYj/yDxCWIW3/9/g2i2gXIjzCsBLcRHhEmqq+x/nkQGVg
+oDPDpj08eEH75M3XbpY9dUBW0X8pKw+5jIkCFGKu6Z+a7aI33yetqKI37VXw1+Bh7tUICkAD2Ks
8kk581hEnL9m6XoTbmdn5h6Z9dNiFL93l+R3vnXzprvOUbd6htl19rp5m3AR3FDMMtNbKCPpBWBf
6X5jFpY+ZTqN7Ro7685OZPMj+VQW9ki2d3d2MnEsZO8Zsb3ydNnbtMmEncxN2I1x9sLhaKATbR77
8lV9cVv4+27KQlqfsfaVvSkLeX3GW1f2pizk9ZloXdmbspDXZ7J1LIyykNdnqnUsjLKQ1+du61gY
ZSGvz1HrWBiYB1mQq34GXAjbcqFJefJTc6H4/Ii/pfJ4Xp/9x9aNCE9e/B9QSwMECgAAAAAAAFpu
SQAAAAAAAAAAAAAAAAMAHABqcy9VVAkAA3ANKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBAoAAAAA
AHdgbkkAAAAAAAAAAAAAAAAHABwAanMvZG9tL1VUCQADohgqWEIaKlh1eAsAAQT1AQAABBQAAABQ
SwMEFAACAAgAdmBuSUsbgTWnAAAA0gAAADUAHABqcy9kb20vY2FsbGJhY2stZnVuY3Rpb24td2l0
aC1oYW5kbGUtZXZlbnQtc3RkZXJyLnR4dFVUCQADnxgqWHANKlh1eAsAAQT1AQAABBQAAAA1zM0K
wjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHbDHwzVdPUjYYrGRsQEkPKQsAEnpzg
iJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t2SfVchaHn3ZkQXXhPoeZPdD2s7Rm
wu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hHpAP1NxQ/vArLHMrFG1BLAwQUAAIA
CAB3YG5JXlX1LqAAAABmAQAAJQAcAGpzL2RvbS9jdXN0b20tY29uc3RydWN0b3JzLXN0ZGVyci50
eHRVVAkAA6IYKliiGCpYdXgLAAEE9QEAAAQUAAAA1Y5BDoIwFET3nuIfAKEFokkTVkXCyhjDjrio
8JGG0q+l6PVFw8IrmFm9ySTzah4Lloh0FyaMXaCsqtMZHzNOHjp9K72/r5jrtlDaSGXMVTWDgCP6
F7kB0DlyAloalbbZIIvDp8i/KIt1FUBDLWZbzlgagKTZtGDJL6212HjwBL5HmNA90YXQkYN++RZR
xON9yJbwaKIRZ2c29Y9y/B/Kb1BLAwQUAAIACADPYG5JSxuBNacAAADSAAAAMAAcAGpzL2RvbS9l
eGNlcHRpb25zLXRocm93bi1pbi1jYWxsYmFja3Mtc3RkZXJyLnR4dFVUCQADRhkqWBIOKlh1eAsA
AQT1AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHbDHwzVdPU
jYYrGRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t2SfVchaH
n3ZkQXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hHpAP1NxQ/
vArLHMrFG1BLAwQKAAAAAACEWm5JAAAAAAAAAAAAAAAABgAcAG1lZGlhL1VUCQADZw4qWEIaKlh1
eAsAAQT1AQAABBQAAABQSwMEFAACAAgAemBuSfa9DZTaAAAAUgIAAB8AHABtZWRpYS9hdWRpby1k
YXRhLXVybC1zdGRlcnIudHh0VVQJAAOnGCpYdQ0qWHV4CwABBPUBAAAEFAAAAM2RMUsDQRCFa+9X
TKmNZJNYZBELL4WBJAhBFMRibneyWbKZCbtzkfx798TOzjSWA+99j3lvLScwUzBjO5rYOwP0WYyZ
3iZxmCCry3SUrJHD+3hiZrMPuJ9T14cHC4V0RaVgoKWEUBWP1bS3UI2JfLP+O1gxayu8jaHPqFH4
NequlcMx0XA9IftE2UKLbkceRkCMXc2EDt2e2JdLwklfCuUFb2UendpfbAvXzdXNRQnsf4r7/guV
guRz5XKf0v8kR446IDeVXhcY2rHw9tyCE2ZywypVc8IUffMFUEsDBAoAAAAAAApabkkAAAAAAAAA
AAAAAAAKABwAbWVkaWEvbWFjL1VUCQADgw0qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgA
gGBuSdteKDKrAAAAFAMAADMAHABtZWRpYS9tYWMvY29udHJvbHMtcGFuZWwtbm90LWNsaXBwZWQt
b3V0LXN0ZGVyci50eHRVVAkAA68YKliDDSpYdXgLAAEE9QEAAAQUAAAA7Y+xDoIwFEV3v6IjDlAo
okLioEQTByMJIzHkWV6wWil5VBP+XoyDfoAj27nTuacIROKHSRR7fihOTFm8Q9c3sszRZmRaJNuz
TtUNaI0VQ6KVG4jFMmLObafqDXR4PF9R2i2RoXLfPEGrCixWU+ao3wWW8dw8SGIK8oI8NYQHrBR8
yQ2iufDEzOeD2hrbt9jxTEOPxAfZh8r1+58nmVYNMiHicFKMEWPE/yJeUEsDBAoAAAAAABJabkkA
AAAAAAAAAAAAAAATABwAbWVkaWEvbWVkaWEtc291cmNlL1VUCQADkw0qWEIaKlh1eAsAAQT1AQAA
BBQAAABQSwMEFAACAAgAgGBuSQiM01gtAQAAkAEAAD4AHABtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLWFib3J0LXJlc2V0cy1wYXJzZXItc3RkZXJyLnR4dFVUCQADsBgqWIQNKlh1eAsA
AQT1AQAABBQAAABFkEFPwkAQhe/8irkBB+huaYuQeBCQaCIJEfVCCBl2p7Bxu9vMbtX6660H8fby
8jLzvreX6VxkcyHGeS4OUDKeN+hM6a0+bptwWbSRAgRzdmgtaSDm25EsRFbA4H1truF7Zs/HV0df
NalI+tGZuMKIQxjsSHmnoV/Gtu4DRl8BOeUbF4lJDzsHkp1vWNES1YWSpWfakDb4r0YyL9Jxmolk
yz767hCFZO25wviATlvikGz8h6Hkt9KvWHcgFbn412+swBpHIIuJ6KVCFiMpRzKDK/5U3MCqqepn
cpr4hYn26UTO8nmeydl0doDHs/Ns3Bk6msjevpiKThgIAkU4taCs6f7BiRQ2nXv3tsOqtrRoypJ4
ZUJtsX3Clhg+MQBq3a0ZPSCE1qkLe2e+iXs/UEsDBBQAAgAIAIRgbkkYoJVtjAAAAJsAAAA3ABwA
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yZW1vdmUtY3Jhc2gtc3RkZXJyLnR4dFVU
CQADtxgqWIwNKlh1eAsAAQT1AQAABBQAAAANyL0OgjAQAODdp7gXwLTlx8CmYTFxUuJiHI72wCal
JdcSU59eti+fErIppCxkBVJ1ourE6Vi2DfTbst7JG+KBiV6qlG3d1ZVQtXzDdfaBrZ9BB584uMEu
NGIkiJRgzKCdJb+LNG77np8PXFZHl22aiHsbV4f5hpkYvhgBjSEDKQBCzF5/OHj7Iz78AVBLAwQU
AAIACACEYG5JtLdWIIsAAACbAAAAMQAcAG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
cmVzaXplLXN0ZGVyci50eHRVVAkAA7gYKliNDSpYdXgLAAEE9QEAAAQUAAAADci9DoIwEADg3ae4
F8Bw/IiwYVhMnJS4GIejPbBJackVYurTy/bly1I8JYgJFoBZkxZNej7mFUK3zcudnWbphfmV5ViX
TVlgXdVvuE7Oi3ETKO9W8bY3Mw8UGAKvMERQ1rDbxYq2fdvng+bF8mUbR5bOhMVSvFFkgS8FIK1Z
w+qBIESnPuKd+bEc/lBLAwQUAAIACACFYG5JdfOxvC0BAACQAQAAPAAcAG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2Utc2Vlay1kZXRhY2gtY3Jhc2gtc3RkZXJyLnR4dFVUCQADuRgqWI4N
Klh1eAsAAQT1AQAABBQAAABFkMFuwjAQRO98xd6AAyQOIShIPRQoKlKRUKG9IIQWexOsOna0dtqm
X99wKL2NRqPdeXMUyTxO53E+nuSzExSM5RatLpxR513jr4s2kAevS4vGkAJifhiJLE4zGHys9T38
xOz4/GbpuyYZSG2sDisMOITBnqSzCvpFaOs+YHAVkJWusYGY1LBzINq7hiUtUV4pWjqmLSmN/2ok
plkyTtI42rELrjtEPlo7rjA8o1WG2Edb96kpulW6iXUHUpENf/3GEoy2BCKbxL0kFtlIiJFI4Y6f
xjGsmqp+JauID0x0TCYin86nqchn+Qk2pXWsbQkdTWBnDrqiC3oCTwEuLUiju39wIYlN5z6+77Gq
DS2aoiBeaV8bbF+wJYYv9IBKdWsGBwi+tfLKzuof4t4vUEsDBBQAAgAIAIdgbklP/FkJiwAAAJsA
AABIABwAbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1zdGFsbGVkLWhvbGRzLXNsZWVw
LWFzc2VydGlvbi1zdGRlcnIudHh0VVQJAAO+GCpYkw0qWHV4CwABBPUBAAAEFAAAAA3IsQ6CMBAA
0N2vuB/QcFgwZdOwmDgpcTEOR3tgk9KSK8TUr5ft5ZUF1nvEPSrAsilUg+pQ1hradZrvHCxLJ8yv
8oi6aiqF+qTfcB1DFBdGMDEsEn3nJu4pMSReoM9gvOOwiQ2t256fD5pmz5d1GFhal2ZP+UaZBb6U
gKxlC0sEgpSD+UgM7sey+wNQSwMEFAACAAgArmBuSaKIakrDAAAAJAMAACgAHABtZWRpYS9zb3Vy
Y2VzLWZhbGxiYWNrLWNvZGVjcy1zdGRlcnIudHh0VVQJAAMIGSpY0g0qWHV4CwABBPUBAAAEFAAA
AO2QsW5CMQxF5/IVHulSkQeVSoQYeAxUatlQh6qDX2JCRLBR4teqf09A3bqBunW0dO858l3LJ5gJ
mMaOHm3zBPRVjJk8JHGYIKvLdJSskcN7MzbT6QfMltT1YW6hkL5SKRjoRUKoiUUt7S3UYiI/WF8P
VszaCm9j6DNqFH6LumvlcEx0vlbIPlG20KLbkYcREGNXndCh2xP7coucdFMoP/NWltGp/cW2MBzc
3d9m+N/tKgP7n+Euf6FSkPxdudyn9JfkE1BLAwQUAAIACACuYG5JXlIWI4sAAACAAQAAMAAcAG1l
ZGlhL3N2Zy1hcy1pbWFnZS13aXRoLW1lZGlhLWJsb2NrZWQtc3RkZXJyLnR4dFVUCQADCBkqWNIN
Klh1eAsAAQT1AQAABBQAAADzyy9TMDRRMDSyMjC1MrJQSC0vNjQ00cvJT07MUSgqSS5KLcgvKsnM
S482Mja0tIxVsHFJTSpNt7NSKE7NS/FNLS5OTE8NzyzJcE4sSU3PL6q0UtDIK83J0eTyI9vkzLzM
EpCRwUDTM/PzPPPS8q0UIgKcFZLz8/JSk0uAYkA1ZYk5mSkU2DI43A8AUEsDBBQAAgAIALBgbknP
TinSkAAAAL0AAAAhABwAbWVkaWEvdW5zdXBwb3J0ZWQtcnRzcC1zdGRlcnIudHh0VVQJAAMLGSpY
1Q0qWHV4CwABBPUBAAAEFAAAAG2OQQ6CMBQF957iX0BQoi7YVhESSQjCAZr2RZtgP7a/JN5eXblx
NbOYxeRXTsFAaXNHrjighXX6Z+vt/lBkxW6Td4GF5TUj5pW71cPQfakmBy+19naCVSkKP8b+8mkX
ZxEyQ+ZvoAK0oEec2UccnZGKwxnS45kQpSTFabLkWciwXxCExqEhYWqb9kTfjZJWb1BLAwQUAAIA
CADaYG5Jcy+stYUAAADoAgAAOwAcAG1lZGlhL3ZpZGVvLW11dGVkLWFmdGVyLXNldHRpbmctcGFn
ZS1tdXRlZC1zdGF0ZS1zdGRlcnIudHh0VVQJAANcGSpYJw4qWHV4CwABBPUBAAAEFAAAAIs2NLIy
MLMyNdQzMzaIVbABAgWn/OJiBTsgUEjLTA/ISaxMSkzOBgkGlyQWlQQUpRbl5+Q45qUEp5aAZIGi
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
EE08s0aN3wWQknl1GAcXggd1LENQPS2QgNwYMkpOqJIZCzeywHcaUlzhf2IEqGYBO06l3LxuD8fH
1Tj5uoujIRm61cGRZr969LIXbjNyNnpJcWprqUQ2d27j3LzzayyBupmTFtHD0enPX3C6w1PnfEpd
o7rTMR1L/mOgAZMe4ygAaQlxJQ2/qIENhhqv58CiEdeAeFIopXKP6HZ73QpWjVQb3HUk/dKhty0Y
qDjfWd1jclhs3xgMVS3r6xI2DwP8CNPTuswZaHLw/TRiIuLjq85KV4CXF1dSzSsQgxJoV0w1UBAn
+GNfiKbWoNuieRI8m2W7o3TrZv+4jq9z5WNqgtCuSJlXtZgTHHpEfaT9lPSuDOOmDMvkjGJdNhiF
uV7dXsU8Id57PdguRYZhpi54aHxwX3dFwUWTIiD1Ic5jpJ7JnR7HI7/Whc22bT9nIetEAw8buCAq
q9nIr5o+a4yeEvyibIxaEY+JxrqefyzxQNXFgQg/q56dKT9YyHaqCrBpK8DUYGh7Gvuh7Zn0tsm8
tNMQoDN5UnKeq1pCk9vYTzWnIFTNSjbcGIcltkw1F5v5imVcwsVCWfDemWDX8+f4oILBbpwuKHht
LmlwT7vbrRw1g6mj2r6fi+0EGew8rHf3lnju03UwHLoMdFQ1VldHLtH9fCYcOuOewGAMU3EjhXll
f8/9l9ers9dfXpkpDc1ZgasG3aqLoW4WRzoUxf/aRwLaQwQ8RN2wZ/c6UMSGZgUONAHmdfPyoD5u
g9nzOcuXdPJ4jO4J/Vg2NbsSHiGieXlf7PK5+XDK/vq5edzM8EQPCY2CR9ZNUlsec4bncz4ujuUs
nZBDxCWa4HE/s2QJRiYlhu6L4ZMOckEFB2a1f0JmEelAMD+Di8l+P+yGpYxe2wfmaShK1Gj+kweD
EYjEGh+vK/PZd397XLh46OV6/jaM7oMmwoytVnPW+eiFmCyazWZU9tft22aVHG27DEPnbPhJ0Ns9
TAHTd49x9224vpy3Vys22qdcqkmgdbVTBVYGafVaMYc5VZTxg7buGUwpKVhv15lS8i+8XofBNHSD
mQG1EpFUk8Gf63OfTw+7XSnVhp+X42F3uB8/vyTc8n5id5U47EtAL46fEBfXm1s98EruIQqZV/xn
MzIYj+XcbC8XsmPEP9QiZ4Ni9sTxkkR04vjj/EKVYxJJ8KgKr26pMK/PHOrGAwe0k6mcBM1O5808
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
n/myPL/nGg7M2PYMTGDcaDqLYMBS2zfI6MAGP5CP1JOa0OKgUsNGZWWhSqwuNauCgrf4vU7kUd3I
hWaK1Z3DNzpXqQH9iF4Vj2vNeE6Pp3lwZfs+Xu93CWioiBpYBrSeIsVc0fqno/XyYBzqjrebFydR
JghBCEIQghCEIAQhiL8RH1BLAwQUAAIACADXYG5Jm94SNKQAAAAUAwAALQAcAHN0b3JhZ2UvaW5k
ZXhlZGRiL2luZGV4LW11bHRpZW50cnktc3RkZXJyLnR4dFVUCQADVRkqWDMOKlh1eAsAAQT1AQAA
BBQAAADtj7EKwjAURfd+xRvbxYCIYjZtO4iK2IIdJU3eEEj7QvpS/Hxr6eTs6Hjh3sM9ZVXdKgkH
Zuw8AxMoM6peIyjQ1HmHjAZ0DAOFRDzIxQ4HUShWomxq0WB7tixqikHjJ+UUUFzJRDfVbG/whca0
YsAwYhD1/WIZT8Uxn4Er7X263u8ykNASOVgAUk6Vep5I+bWRcjmYRtvzdvPkLCn/En+J30m8AVBL
AwQUAAIACADXYG5JJe6EdJkAAADFAAAALQAcAHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LXBvcHVs
YXRpb24tc3RkZXJyLnR4dFVUCQADVhkqWDQOKlh1eAsAAQT1AQAABBQAAABdjrEKwjAURfd+xRvb
xYCIYjZtO4iK2IAdJU3eEEj7QvpS/Hxr6eR44ZzDrZvm0Ug4MWMfGJhA20kPBkGDoT54ZLRgUhwp
ZuJFPvU4ikqzFnWrRIvd1bFQlKLB3yoporiTTX7G3GDxg9Z2YsQ4YRTqeXOMl+pcLsGNCSHfHg8F
SOiIPKwBKWdELYqUf46U68E8uYH3uzcX2RdQSwMEFAACAAgA2mBuSbIzOJ/EBQAABTEAAEUAHABz
dG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLW9wZW4taW4tdXBncmFkZW5lZWRlZC1wcml2YXRl
LXN0ZGVyci50eHRVVAkAA1wZKlg8DipYdXgLAAEE9QEAAAQUAAAA7VrNb6M4FL/31D/Bx0SaSkD4
zC0lU20PO6kmnbkbcFp2iMkCbaaX/dvXhgAGbEPSpI12I7VS47xvv9979nPv57d30M/i5G06DVCE
MjSHGfRgisANuL66n9+6McbIz8IYP8ZLlLyiREQp+fYHDv9+QYSmXJ1OO0ujMRgpv63VamV4SIOT
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
WJ9vuvuWHdPS9rdTQtzIHKkv7RyAq758eMDVcpfQ1TSOBHll2HJ/Sp8P96SU3+mD7CIjVcWWtmU5
2ujEmW9ZqnbwiXqo3CkP1VMcT9a5jMe0IrfOdzx2kmvTZeB2GbhdBm6Xgdtl4HYZuP1HB27S5l63
NPszmnsd7qCHNPdHm8xdbgefcjvYl18OGwRepmhnPUU7/nnTt8/+SKxP8nMop/45VE/aFv4xo/v7
xd67G0WUZnTNrS72BXuNKFYZbjc129550MD1Uel3ZJiqo32x6ZPF4F9QSwMEFAACAAgA3GBuSbUr
ZOrRBAAAWCoAAEwAHABzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXBlbmRpbmctdmVyc2lv
bi1jaGFuZ2VzLXNhbWUtcHJpdmF0ZS1zdGRlcnIudHh0VVQJAANfGSpYPg4qWHV4CwABBPUBAAAE
FAAAAO1aS1PjOBC+c+In6JhUDVW24/iRGzhLDYfdUAuzd9mWiQtHytgGlsv+9pXsxJFsSU4yCYSp
VMEBpV9qff2p1eRuevOA8leUTyZkifD05m/08wUVZQBxhLIMxRd3HyVxC6OS5O+TSYwyVKIpLGEI
CwSuwCX7OCAYo6hMCX4ka2NySc2nP3BKHVOZ9epk0lkaDMHA+NdNkmQcIguOYmNINQcLmOIhkBiY
QxxnaFo56xdb/T1bohyyzRQ0rsc5yhGA9Ncc2+bYMyzDAzRPcYqfLnYzdU+WSxQDiAFZL38DmLyB
UuejL+rgJc8RLhtPGgUqkpB8sdKos9LoVWcwiEOpZn1cNzB6piE9UCjoshmn8bQrzx1+lJECdRRl
2fyvDwGmUyFAhcF1JI0PKjjjUT6Z5Cu4k8WSScYSEYJFKw8vUYSKgoZyBaI6mYD6K1gW0wKYtuGO
bPrjO65vGcxgYypOiyUso/kfr0yJppzfjT8KjaFQbqwiVZurqpUrIDC4pLmxxyPHtf2R5Q07pa1J
dG+loSrPEk3e8ibMQxWbZR+/2DgfRys2hqhNqQmZteiZq+qOJZevIqZpjrxxFI5dpqarwVlL9yBH
4nqm/Znp8kNDu++ihHn5T12LAQ3iCT3mEBewBmVHYQNYyko5giVS6VYVdsXXtu35jgyUKX4lz5sk
XuOYM/OYLlA+UB94iJ5SzMnfiUf4J1pQXqAa/GpXS5MgoonrNs0p/x0EJmPHdBqYqNl5xtPSdty8
CYf7g0YQsOOj3kC8XrsEb2k5b5iZp2XHsUHUhAQ2pMmw5vuG4ViJYYSR5YahObzYHmL1XcQtVGG2
cCS9Yn4sn3IYo78QilG8zdXijR3KaOhNsr7HlSOE3IBkAwtByY4kShFZLNJSzNVbmmVBta7P0S84
nOEaTyqURW33QifS+bADe9ke1SXSMahtq9akJ1VS1HqkEeYlJXEPem6Me1042yQGDCKYZSGNYqjn
WupM6kVkWIf2wXszrJp0AhkihN00QhftFCnALJGZ5dchyXtwn1Ckz/Ca306PtltZ4YhEwmFsM6vW
+DopUS5wZLBC4Jr/Pq0jPpwlBbxuU5wW8+8s6TSLyl5kh+b8w1rsE49p6+TKCatFQBpTXSryRp6t
J0+NuV/hsN2vydMikeO82kQfn/AMMS1tpjEp0+R9A7hilrQBxoHLcg1bRSiMVAXVhn033uQykg6S
B7Rhe9/AqsGmKVeK7Nsmi7w+4OyO/LE1FHGbGHpGVeWgX6ifBRS5axOAbRgXqsrfznMDi/pU1nPW
Jp6AjcXiWV2K0pj4eKy6zVek7IE9UlrXjfxxdZOR6Ll+Wu14J3NdL4tciG9su/XkSxpf5yju60qu
MiCaXsD3EFXrd6tGv+XHca3t/dQpFpCjjaWNAdmLX5ghSK3c5mQRZKkCV7anj6eOef9Iav3eGHRv
Gq0pvrRd17eGR0a+65rW3jfq3vOaI16qx7ie3FOZklkMW19uSnaedH2VSdfJPZnPc7fz3O08dzvP
3X6PudvBZlzn2c15dnNKs5vD09seHV6nNWq+WXKw/s+lnd4O/d9Xb6f45pUsxVGBY3le79yCPlg+
ZG7hmP5ecwvlfyuk39vbTVrgq1X+Lnc389ufgTJPB9v5YfagOKL/AVBLAwQUAAIACADcYG5JGFbx
7B0FAACALwAARAAcAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJzaW9u
LWNoYW5nZXMtc2FtZS1zdGRlcnIudHh0VVQJAANfGSpYPg4qWHV4CwABBPUBAAAEFAAAAO1aS3Oq
SBTeu/In9O5q1b1VgAjoLupNjVVTY2bMnT2PRqlgtwMkmWzmt88BFBvobtRg4p2xKlmI5/34+vTB
+WyyxNELjsZjz05sx47xlBKC3SSg5AETLyCraUhjjL4hVVfMgQ5/I8OC/84PEvz1jOezyazGOR67
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
r0vPneUI539VvTgnQTwBdWF2cBoMKAeRLstrLJewJFHhfHiKEkp90S7FeznMn7Alc4Ho0dZYbx/i
EleBie0YTg0T8XRe0mOp32xuwqE+kAjmRfmIN+3EcUm9DlH+XE9meiw7jqU1xFNrhmaBtelU1x1z
o+t+YE583xgN+kOsuouohTLMMxxxr5jvuyeMQvgGEELY52pxbYdMNDhw1t9x5VCEvOyDpf83SU41
dG7J1aLdjJiTMZLlwZqPpKv3+RJ/CUNG9VjZlWi/hmkDzFbYVqD3iGeZVFgTIZB7APEm0xId2ZA8
9LCygkFymouMgmAU8KqHwqINteX61BILT7NNS7edydgwj5ZoM61zEe1vcKAs1nNIpvL1R5QV7ciG
3ALIAUc5rbsumks6hMjUWIlycmGBtGGA4tgnpxjJrwbic86DimCqcWVbofCEaLB+vBdOndfVAnSH
MmvyfNZiklu9FpHDu54DAlS/wFsJqGyR9OiB6mnloRjNPMz124YgxcJ4CMBbAi0DzWYfFK8uSzaN
WTEChXOV2qORQd1Dx4ebC64Qy6jw10pCwVwJmctSLJr9S7HEuxDfeOzCfDs2zqq8FJSglGfVQnLs
U3kQoC09l6AyXa3PZoINQjY4CH1F8R7uU/wHvPXC6PLy1PTDqQQDrd1WRY8nziD/HfIHyPZxTrEl
MioqhnUVTJ9/BSId6jyJX4FXMQfrajBuJsSbckyx8hLIsrLy5vMYBemd0jOKunG8j571Eori8bIu
/Vqsg6J4sroruq7ouqLriq4ruq7ouqLriq4ruq7ouqLriq4ruq7ouqLriq4ruq7ouqLriq4ruq7o
uqLriq4ruq7ouqLriq4ruq7ouqLrPyVdvwIpSbfbKG8z90MUx/NynXmPWvizF/a3dueesjzdnd61
pt/dLleb16Vtx3TdsycJ5qeZRMjShYWT/sSzbXqL3nwo1xfHGp75Mabmhef+D1BLAwQUAAIACADm
YG5JKvAzV9YFAAB1PgAALgAcAHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtZmV0Y2gta2V5LXN0
ZGVyci50eHRVVAkAA28ZKlhPDipYdXgLAAEE9QEAAAQUAAAA7Vtbb+JGFH7niZ8w2pcFaVeyjTEm
bwksFVJb0lz67suQuDEeOjbJ5mV/e4/H2IyZC7Cw6rYaKVHC+Nx8rt+x8Hx6c4/pK6ZXV2SNs+nN
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
ytJ7nkEwd8B/KS5aaXhBP4SGFTcbLGoCxx+wxGe7sVaAxTKz0PkMTFRNVbSpoZqNamrrXGaAwerQ
qBnWtv8sllg4Do0JW60sLZFidKV3iSI307hc51nDTRibQtbp1wGqiWaloEKdSs34ChSFetAi4se/
gPT9caSXBwjiV8MAp6pHUABCCUmQwaf+p56VviIe1fES3wX84AVi8ARfk4qFOECwJ9lgPtJCW1uy
s72G5mIU6ibbwZVfd6yPwXbrVTopL57vW8n4G/RSUoS1ul9FX7IA6mWN4NI9ilrO1c2K6vTMGJiT
eGYhBm5HbkF5mcs24UYrDWZhKWe5uqqY5/RNeVbBUgPKNhgqzKS6z4FZYKoNTCv72otDQZbtXngH
tpTIMTLaeDOH7sbNOoK4lDGnTEmy3P556SH1TWsyjpMInryF38bKS2/tVwcm4/ODJ6ng0U2lOZ70
Q1O3HRmORjf78ik/Gb7zJ8P2X3LrOm2yX9ZFv+wSOjj61Lj0Ds5pRyt+jk+Psnv1rt2rD+wXlZVV
9pJkL0n2kmQvSfaSZC9J9pJkL0n2kmQvSfaSZC9J9pJkL+mn7CW16Qm9+zUd2UuSvSTZS6JvDVCj
HiI5ErL9m+xtuVZqkD1+8BWG05sc/NqTi6/B3a62l7ne+qpWx56w7V0lmkFtyjMWjnIEmxgj9eTw
8qM4/JsGes8wYBYD+62KDd2YjvVTio0WpWgLYgxD5xSv+e4Z1eBXjAPMrAXj+Eiej/WgLASG9QX3
WxTN7cvfSylnz/Ehb3I5aXq8nCSv4fwQpeDJVc7H3N/pPqOQl34u99LPe5T5svCWhbc8xCEPcchD
HPIQhzzEIQ9xyEMc8hCHPMQhD3HIQxzVvurZRy+4XTL6j7K1hi6JOIyCXSahYjWSjBY4oaumWSsW
XdWUdgzWR1P1/4v6EiXxIZrXxTL/AVBLAwQKAAAAAABrWm5JAAAAAAAAAAAAAAAAGQAcAHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9VVAkAAzkOKlhCGipYdXgLAAEE9QEAAAQUAAAAUEsDBBQAAgAI
ALNgbkmy8BjfSQYAAGtpAAA3ABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2F1dG9pbmNyZW1l
bnQtYWJvcnQtc3RkZXJyLnR4dFVUCQADEhkqWOsNKlh1eAsAAQT1AQAABBQAAADtXd1z4jYQf88T
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
cHa4gGs3eHLS9UAgTqyy5AVQ17o4Nu1Lqrd1g5Q9EK3+qqx2QoC1aGVMRBsmwX62SbG0JGRBRFk0
ofM5CxlrBDspWdqaO7F52DckjPx8mojmgX9tFn3uKeVKQFWh219QSwMEFAACAAgAu2BuSdMHnHKL
AQAAQgQAAEAAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtcmVxdWVz
dC1ldmVudC1zdGRlcnIudHh0VVQJAAMhGSpY/A0qWHV4CwABBPUBAAAEFAAAAJVUy27CMBC8c+IT
9gZIRQokNOAjhEpIlWgL/QBjb8Ai2KltaHvpt3cDBFERQD3k4PXMzuzDmSTDGdodWsZMjjoZvuHH
Fp0fcS0wy1DWJsnwiQtv7DdjEjP0mHDPF9whtKFeXI+M1ii8MnpuymTVyBu371qRMGHKKGMXoWYL
msFXnKZpbxEO+qEMWsRsbrjSLahIsOJaZpjsxe7DjudpjpYXxTjyNV+hReD0dXphEA0eo7AL1Cep
9LL2v1QvJs9RAtdgyvADaPMJ/pbGPdejrbWo/UnpBoEgqbGbI+PQlRNvP4OmXFQyD+MacrEmSzNa
BazNXp+VL1DnUcaW6Kd27IiYKbcqM0x0akhAlvOuX6NfCsE+RCdIVYbQqDeAzErl1jcqlUoml5bP
9k9kxuEFsWqgP/eWsPO4X8Jrz6B0ctIg4PT8oTFmjy/ObPICKSsgRv/NMtsKgc6RlTaIwzyB9Fwx
SOWgEwVxGMXdsN+POlFUJDylotbl3IvVeFeQaOrn1cThImhdq+XK/+EXUEsDBBQAAgAIALtgbklg
NvQyVgAAAJkAAABCABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFiYXNlLXJl
cXVlc3QtcHJpdmF0ZS1zdGRlcnIudHh0VVQJAAMhGSpY/Q0qWHV4CwABBPUBAAAEFAAAAPN0cQpO
LSpLLbKyyi9IzXNxCkotLE0tLnFOzEtOzclJTeHydHFyS0wuyS+qtLJKSc1JLUl1SSxJTEosTlXQ
VRAASTvn5+WlJpdk5ueF5MMMI14lDmsBUEsDBBQAAgAIALtgbknKUEI9EAEAACEDAAA6ABwAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFiYXNlLXJlcXVlc3Qtc3RkZXJyLnR4dFVU
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
TMa6q+IV2/aJtNffP3xpH6e0D+6qiOaDuz0aOKoHdxHLI0+i89XC+Y/4b3p1dOb7sOHC1L1G+BLG
Mg//KB6u5dPyUb7r6fxYz/TtNZYPyV5e7/tNXH/f9OZh6njlddXZcE3s2XnXvTdbiIcw7kR48r5K
06xiAoxNR/+uTVPdHzsf/io+D+8nr76bVP07TtmDfdNNoC2LxF3upV2vGssyjbeIp5HFu+MP/Xrw
TS/uH/a3tK43fw/1e1/zoH7kDuXa01Aro1+vDnfhluWlqmm3saTZ5RqaA9s8C/3X117qeRtMRz8p
TmF+VQ1OdfPMirPZU5TLCvP0yc+f5Ii7URKLD7QThS984Qtf+MIXvvCFL3zhC1/4whe+8IUvfOEL
X/jCF77whS984Qtf+MIXvvCFL3zhC1/4whe+8IUvfOELX/jCF77whS984Qtf+MIXvvCFL3zhC1/4
wtff3BdwgAMc4HBHwxe+8IUvfOGLH1bAYWHCF76AAxwWJnyxMAGHhQlf+MIXvvCFL3zhC1/4whe+
8IUvfOELX/jCF77whS984Qtf+MIXvvCFL3zhC1/4whe+8IUvfOELX/jCF77whS984Qtf+MIXvvCF
r7+KLz9Zr8P84iipL2EUueXxWlHj8j0b7NLsnzZfV908qR/y3TW2K2pUWCS8i7mrDGoh7+sLv667
B/TqPpyTjbr+RvnDiJSNKVuRH8s2J0N7Mhg6zsAeDi4UXQ3j5+RRzPdQruKgVk3JptfXXGmiCSy9
aWJXXhxEYv+96kImO36/EnKB8eTHGg1Ne2o5tmlsRBzIAdOsBa4K5ema4ComlDKHly1l5unVIkk7
pt5SXvw8lgGbSORC0Y/a6tE4K9fXTQnlqAO7o4dBnQxG1uC4jB8lmTgpZI/t1pw1PN1uk+wW9RxX
vfa+LUR5/Ga3Npy2Y43Pb6esKGgrL1nF1VrrerEvougtpdVZ/T9QSwMEFAACAAgAwWBuSQSLlY9f
BQAABB4AADYAHABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaGFuZGxlLXVzZXItZGVsZXRlLXN0
ZGVyci50eHRVVAkAAykZKlgGDipYdXgLAAEE9QEAAAQUAAAA7VlLb6s4FN5nlZ/g3U2kW8kQB0h2
bdJeRbqaZPqYWRNwUqbEzhjSTjfz2+cAAUywgaSt7makPhJzXj7nOw+bxfzmgYpXKqZT343dtRvR
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
IZIj5ZIjFf/sR9CEoAlBE4ImBE0ImrwgPVIpoVL9geTY0ikETQiaEDQhaELQhKAJQROCJgRNCJoQ
NCFoQtCEoAlBE4ImBE0ImhA0qRQ04W3+a8ZneLl/4hONfJh81KEnIvnYWavVX2wO/vTBjCbMaELQ
hKAJQROCJgRNmNGEGU0ImhA0IWhC0OQAQZNXDozs/8GaoAlBk1MLmlCRipuK5I3IG5E3Im9E3oi8
EXkj8kZ8oguwARuwARuwARuwARuwARuwARuwARuwARuwARuwARuwARuwARuwEcLLCuEKVUktPLVi
bUslQHy0pgtx4/llMcMdxx3HHccdxx2v5o5njNPbBnnR8IxPjk+OT45Pjk+OT45Pjk+OT86HC/hw
AT45Pjk+OT45Hy7AJ8cnf2WfHCkYKRgp+N1JwbzoP4IX/bzE5yU+L/FP4SX+sbzuPu23obyiLAs1
oZK9vEklRXLiKZI3fVW+t+gGr93LvXav+DcT3tLzlp639Lyl5y09b+mZ9Z1Z33lLz1t63tIz6zuz
vvOWnlnfmdicitqKzoqnpclM4IPAB4EPZoFnFnhmgSd7xCQjzJ4D2IAN2IAN2IAN2IAN2IAN2IAN
2IAN2IAN2IAN2IAN2IAN2IAN2AjkZQXyiJGkOq4sKinTYoUztTtTuyPlMrV7tckMEoPv9jQGn41W
q9OutetmmMRexFId07gzjTvTuDONO4I4gjiCOII4gjjTuDONO4I4gjiCOIL42wniu94mmcYdQRxB
fNsPxgTGBMYExgTGBMYEJmhC0ISgCUETgiZ8fuDdvbHnLTtfIuBLBISe+BIBXyLgSwQETQiaEDQh
aELQhKAJQROCJgRNCJoQNOFLBARNCJrwJQIq8iUC8kfkj8gfkT8if0T+iPwR+SNmcAJswAZswAZs
wAZswAZswAZswAZswAZswAZswAZswAZswAZswEYQRxD/kII4Ai0CLQItAi0CLQItAi0CLQItAi0C
7bELtMfmwu70dIRAi0CLQItAy0ztzNSOQItAS0UEWgRaBFoEWgRaBFoEWvIZ5DMIHgE2YAM2YAM2
YAM2YAM2YAM2YAM2YAM2YAM2YAM2YAM2YAM2YAM2Ai0CLQItAi0CLQItAi0CLQItAi0CLQItAi0C
LV+gRaBFoEWgRaBFoEWgRaBFoKUiAi0CLQItAi0CLQItAi35DPIZBI8AG7ABG7ABG7ABG7ABG7AB
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
wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8wAM8zB+YP/bO/IFOAZ0COgV0
CugU0CmgU0CngE4BnQI6hdzQreVIqOdhqH9m0YaDAZ0COgV0CugU0CmgU0CngE4BnQIV0SmgU0Cn
gE4BnQI6BdIgpEFIgxDDAjzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzA
AzzAQ6eATgGdAjoFdAroFNApoFNAp4BOAZ0COgV0CvuoU6hnRWhmXkCngE4BnQI6BXQK+6RTqOhF
wHWA6wDXARVxHeA6WOM6WCPiqWPYQaeATgGdAjoF0iCkQUiDEMMCPMADPMADPMADPMADPMADPMAD
PMADPMADPMADPMADPMADPMADPMADPMADPMBDp4BOAZ0COgV0CugU0CmgU0CngE4BnQI6BXQK+6dT
aOxIqOdhQKeATgGdAjoFdAp7o1NoOCm2ooWhztxZjA0YGzA2UBFjA8aGNcYGdAroFNApoFMgDUIa
hDQIMSzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzzAAzx0CugU0Cm8
tE7h1S0Imbpyx/dQ6GNQvyidGZV2/LntTcR0msxDqFe6pZW+SdtbaqI6gyL+VBkl3ZNOd+2Q7VrJ
JOvqg69rJcKEN1z1FgyqLRg79Razo5t7+znc1nH5hl22/Ujs56r3Db83ORbBJXC00qb/A1BLAwQU
AAIACADDYG5Jx885IW8GAABJQAAAUgAcAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJkYXRh
YmFzZS1kZWxldGVvYmplY3RzdG9yZS1mYWlsdXJlcy1wcml2YXRlLXN0ZGVyci50eHRVVAkAAy0Z
KlgKDipYdXgLAAEE9QEAAAQUAAAA7VtLc6M4EL7nlJ/A0a7aVAHGNvYtsSezrt0dZ8eZvcsgO+xg
8Ao5nlzmt6/EywI9AD82nh0OSQXU6m61uj91N8ps+rCA6BWi8dgFGCxBBCdhEEAHe2HwBAPXC9YT
P4ygdqcZlj7sWUOzZ9vkt37zJfD+2cHZ9GHKzRyPHSGXRxRuJr4HA0z43ZZ4DobmzeygT7iFwfTh
MyQyIjwBgQN9H7q8VBklldDyuzJ+nQ3wgq4mmHRwmNhT3JKrdBhP6dmW3lWwAssQ4WcEggjEDGuu
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
1hpfBjI0faELAyX9UlFV9NF+dXAyvj2XgLoeddFdT/oNHenF8Oa3YHpTV1x79t9Y/OJfUEsDBBQA
AgAIAMZgbkkFp6ggtgsAAHbKBQBBABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmtleS1h
cnJheS1lcXVhbGl0eS1wcml2YXRlLXN0ZGVyci50eHRVVAkAAzMZKlgQDipYdXgLAAEE9QEAAAQU
AAAA7d1NU9vGHwfwO6e8BB1h5p8ZP4ENt8Y0Mxz+hSlp78JaEjdGprITmktfe1c22DKWDORh2sNn
JsnE1n5Xq93PrnX7nZ2+uQzF51CcnGTpPL1KZ2E4zfMwmo+n+UXIs3H+fjiZzkLyOmn3Wv1ur9/p
Dgbx39beb/n4z0/h7PTN6Vby5GRU28vbYnoznIxDPo/9vXrU51G/s3e2azyLLrKvH8ky/+QY9m/S
cX6QbHX6ZFf71Z5a7aODvZo+xvnn6cdwfhuKtOzopzx7V6T5LF10+258E4r9g+o0TG9Dfvrm1xD7
mc2HaT4Kk0nI6nqub1mO7Lv31zxF0x0P9nZcxDtVxjIqZ3Grk7qx/L313f5Bst/6q399fX141T3u
t49aB8sHfRvvOC2+REBhEubhof3DPKxpvJuuqNW23HG1ZoRPDHDQzRYDbJ65D2meTcLp4mZPN7v/
vHI0i+N69yEUIUnj3/Zht9U7Pup1O8ntcvvtvayri+ntbVzrNE9WC/q/JJ/eJfNd93hq1MNPRRE3
y+pOOwKxyfW0uLlPLGdllVsazK5qk8vlepOOPsYhXUYKu2YzG2en2+1/CNHBmmitwYeRrO4RG55X
t+DJSXG/F6c3t2XLrKbJNN/s5fLTaBRmsziU18loOZlJvN+snMXxbOPsa/d6ZYerrrLx7Dadjz78
/Hl1wFU2XPeqdbCx3crjounhFkdJZQMl+6/i3PQOe/1B57jVGmyfeDsm+smdFhbz3HSibf1EfK/N
1hv8+M1WuccP22ylqPVW25jZTlzzpn1XTm51F5XJdqfdHR0f9svYrj14/ij7fZak1z36N6erf9Xa
+dyzeVrMf1/uxWEcxPtQ+cF84p2mCOk8NGW332va7fiW1LRwV+H9OK/EzzaX4mvfYf4fbuK5EHPV
3rbv9k3vEt+FSTu+rK2YNJ/O59Vj6Xln83o4lQ9xBMNy+eLdkod33Lhed+P5h9XJXFm6+GeQrF88
k/WhWVq7jv85DqPDo8NR2mmlvYO95xNb/hZVvlgM85Gj2p+Y327fF2kWfgkhC9lzflpag1Y80cJd
zfdf8ZNTeSFf7IPzqz/i5CwPndfxpyV5dbD1ZFstFw+2/hh39af5efFTlm1F71f2onJdUFBQUFBQ
UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ
UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUPAbgxvXVxUc1zUb
Nyr69UatZ5TqO8+XZRibijPW1vZrvrhVLfKJQoE76oFvt22osflQMnQr0FAls66wYZqVFSqT88uH
apFnp0lvcNg5HBy1Wq37nqrdbDxXTP8S7io9rkp07or8/Nd4Vlaq3B7yBpC7YjyvZi/LupM763Nm
4+yiaU5euEDJ/iidTK7iUxzsrpoa7zmso9JQ8LO27cZQ6hpVsX77XnjYeU9tgeoO3fpu93yumu0o
eLtqspv36hxoUP0xfFmAmp3lz9gDy0Lev5ZVS+vMPe9yGE2LxvFE4BsNNjpYX3yO4ouXTXbVbLPA
xnO1cq0qo1Ki9b7u9wuqq/baNf6ghRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo
oYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo
oYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo
oYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo
oYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo
oYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGF
FlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZa
aKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmih
hRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUW
WmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpooYUWWmihhRZaaKGFFlpo/0toR9Obm/F8b2Om7saT
yXDxfaVp8morO5tPb8uhNc1KHFC+eqRhmo/CZBKyzXvd99HutfrdXr/THfQ7h+3OZpvRZDoLjxr1
jnqNi3EfXF+7CHkWJQ3Lfja7vkm/XIXF92f3a/P4Pu2jFz7eP1BLAwQUAAIACADHYG5JWDXzmMMN
AADd2wYAOQAcAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJrZXktYXJyYXktZXF1YWxpdHkt
c3RkZXJyLnR4dFVUCQADNhkqWBQOKlh1eAsAAQT1AQAABBQAAADt3U1v28gBgOG7T/4JvK0NbABJ
pi05t0ROAANt7SbZvdPi2FYjky6lJJtLf3tHH5YoS5SdOtuiwAPsVyi+wxE5D+09zfnZ24+h+hqq
16/L+1Ccvf0Q/vkljCf9rBiE0Sjke78Vw3jk/OztWTbJrrJxaDozeZXs752vxssX5/fLogiDybAs
LkORD4ub/qgch3h2O211j9Ju56jXi/9sbV5pVb5+Pdg6yvuqvOuPhqGYTK/+aMyTbqc+n5/y/Q7u
smFxmGyJVhOczSx/NLWD2syOemnrcMdQ2VVZTT5VWTHOZgPOr5xfbT35PlTXZXX3ZlsTT6wdmn2x
Kpv+56fhXajeD6v4rQ5af3Svr6+Pr45Ou+kgzuuv4a6svsf0bTb4HG/0x0lZNU3q8QUG5d3dcHJR
zO/5Yqj6OGtnz4Y8OJyOsnrUn8qHBzYfrFY0Ta2Kh7+Gi6t/xBFmh96X1e+hGk+fxW1W3ITZzVnU
tdPiGg2jMAkfwqCs8vpaabr0Wpzl+aLceCxbbsqTl9+1tB7NZnbvd87oqYuJxWKxWCwWi8VisVgs
FovFYrFYLBaLxWKxWCwWi8VisVgsFovFYrFYLBaLxWKxWCwWi8VisVgsFovFYrFYLBaLxWKxWCwW
i8VisVgsFovFYrFYLBaLxWKxWCwWi8VisVgsFovFYrH4/zD+Vg0n9S103w+L4fg27NoiNx/mlzs2
Qt5SDIuv5edw8bAj8psir0Wz/ZHnOxO/j0fiBB++0sMAD9sfb9u4ePuZOz7dMr2NQweH9a2ae0d5
63DnftS3WZGPwtnsYk+ftvjz8naM47w+3YYqJFn8u3181EpPT9KjTnI/331778eGuizv70OeZEWy
3IL616QovyWTXdd4atb9L1UVisnySjuCxS7Zi2J+V5bdzv2154+rvuH0jsuUO5bTbLvtvY9//0tc
3BtbWN+EyUX1bhzHGcWl/jDgeXFdxsk97KQeZ9mQb04ymR2Kf0quh6OQ/LL/SxK/aD4cf/45i6Hd
S1vPeFDR5dnmDazvtD3dLH0j3La8/vUUifbJjEQTyoeZLK8RT7yo7/Q+3Uh8vuV7eXc/PTPfckpZ
rI/y8ctgEMbjOJVXyWC+upKv873Hk+F4bT/6dppOB1wOFR/GfTYZ3L77utwkvrYX+9FVa/39M92V
vunLzXasr71RkoP9eG/S47Tb65y2Wr3D+i2vn/wfvXrC7D5vX/7LkVfT/Flvn7T35799atf4094+
0xW1eves3dlOfOZNL6LpzV0THst2J+2dto+7MXvhi2Un4YtHl/45TzQ9Ovlf3u3uVWt6txuHifes
mvw+p9yPk7ip/0qyuQJX6z2+1KqQTUJTOwP6qv5qaLc7rcbnfhVuhkUtP19/FA3P/XH10l+DGl6p
F/V3yfNeqKtr1/4Qp9ef3rTpD6zVqky+DSe3y9dp7YbFv3rJYDmlZPWmmz7h6/gfp2FwfHI8yDqt
LD3ce/6Dnf8AqR2YTfPxjdz2c+G3+5sqy8PfQshD/pyfB61eK76Gwrctx1/0K8bP//n+4z+1Vtec
W6j9fh+bg/1k/3DjPm+cObvN9f8xuP8SX2Zv8nwjXayzy9rnQqFQKBQKhUKhUCgUCoVCoVAoFAqF
QqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUCgUCoVC
oVAoFAqFQqFQKBQKhUKhUCgUvjBc+3y5n+BqB8G1Hf3SQesZW/VdFPNNIZu2ity6t1/zhxt7Fz6x
UWDzlodbzm3YZ/Nh29CNoGGHzW0bG2b5dL/E5OLjw96V52dJetrqnh61eu2TZ+1f3n/pzUgOBtlo
dBXnerh7l9J4zf62x9Kw1efWc9emsu2k+sJ4+bp7WOVPLbe6ho1ju+/n8rQdG8wuT9m9lJbmGlbQ
5/D93R/D8WR8Xqwvo/hBsv9rUs4OJuPZ0dky6px2TtLdm4B/mG5oGseoZv9uGKXV6z0xShiUVb5z
Kr1W2jhIdPCcEbqt9FkmLn/s0dUFNK/nxjdi7bP6Oqtt9brY9PsH9kVN21tWMwIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII
IIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA
AAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC
CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg
gAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA
AggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIPDfIjAo7+6Gk721O/VtOBr1Z8drpyb7TV8+XrdY
zryfFYMwGoX8x89eTSA+1fv4ndtpq3uUdjtHvW7nuN1ZP2cwKsfh0UlpXM1NT2gRrj67DEUel1h/
Os760HfZ96swO36+eGCPr9M+2biRiznv7/0bUEsDBBQAAgAIAMhgbkndPQ2tLgcAACFzAABCABwA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWNsZWFyLTEtcHJpdmF0ZS1z
dGRlcnIudHh0VVQJAAM3GSpYFA4qWHV4CwABBPUBAAAEFAAAAO1dT3ebOBC/55SPwNF+b/seYGzj
3BK76fp1t8426d4xKA5bDF4hJ81lP/tKYLBAfzAxaZ12DskLMKORZn6aGaERmc+ubhF+RPjiItmg
eHb1Gf27RSmZerGPoggFZ1/ikN6Zz65mHvGWXopUlMY74/xs3nF7vbUXxn1DwuQncYx8EibxNEpS
FFzjZD2NQhQTxmj0LMccD5yxPXDdgeuYfU1T3jLB5A57ceplDdZHEuwop6XIGxQHYbzKJFNqThb9
bZ71gqVU0Abh+wSvL2XyBPK9NH6wvOTakKv9GI3ts9u//ggJa/PK879SrluSYM14uVuZUbDH/rwL
1whfh5hapGd+G9/f3w+Xg8nY8alO60x+sl6HZBHnmmOP96O4Swp95lQcI69s8aGgGYlILVBqDTYA
KwiDmzZ2urgI48fkK1oUCruMA44pU18vU9U1vZPgZyoCRYigooFC/TJVySk1TyXdE271+rwl3UFg
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
7K7xwjY+9yZx4+TX7VycykbcC2XBbNjTxMJNRF1sdV/T68ldUt3ALcR9ECrhV8WheO0e5kexknlB
xqm1Ve/2XXuJozDpyc1azqQ+O8/VtNQuNx+ao/wiWzBNh0/ezdrvceV4PQfJQ56ZlaGT/0ysw8bT
OiTN1Nqd/I8z4Q1HQ8/t267TPWlPbLsWKS9kzSw50i4xv6zvY9cXPwnhC7/N0mJPbJnRxLPm9Vcs
OcqGPJsH88VvsnO2SeeDXFqs027lySolswc7/LrfN1w+hluW5Qp247tdXX8WXhT7lSrWj8k8vvD9
uuBr5fq7uTeBBBJIIIEEEkgggQQSSCCBBBJIIIEEEkgggQQSSOA/PdCLHsOkLmqaXrQ6xZjqaVJ+
Mnk4iyycVDme3eIIah5ujxfrDh21Z1b1FyunoA0HYIbPuVXL1pwd74/CKwE1p7+6AzvXT09erfnN
/hT0amY5k2F/OBnZtr2rSa2m8Fwy+ifxrNSYHz2bQj59DTbpCWy1yQUrz3GQqLE36Xmq8dzZD/zr
uj554QBZHc9dLhfyKbrmTwPIe051VGoOsrVlC03RFVKxfv9c8JWjzKZp4JeOPbWvm/u2UNQweIVi
ZvKFw9ga7bv60nN3na52lxsbnYubva5DVGdNH047jEIZzKxmRJWPDew+i/aCE3+nZx8p+e6XiyZs
6rJSec3cp3kxwyeH8iJmXPni9fawau4gc2ShQKGCw8U2LK9f1n3tOF7XLf/KtXfIkLxH3iPvkff+
a3kPhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjC
EIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCG
MIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCE
IQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEM
YQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEI
QxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMYwhCGMIQhDGEIQxjCEIYwhCEMYQhDGMIQhjCEIQxhCEMY
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
YJxxd8bdz4k7idjbcKdcCfQ3zamW5Q0FlWXNuJtJCsYn+ybu4vyKJPnlG+Ac1zKbeODPCYTXUezf
sAi+QRCLMNkLo7NjE3cIRmeqEhpPCFowOjOB6MyNZ248r8ln3J1xtzfu4vWapc0Ho1cWRdN83Pxo
foTDVnTvum+gW7rZUtBijqZ3dLuTNb0FKGGtVNJB2yx8WLg1aCvN7pONgzCt8tI8Q3PcvnPMC2Vd
h6hgIHWIAsLKqDsamYW48mPRAvYly1qvPEv7fEdEO1mpHRM1Z50akqk+a2uIVF8itHWw8iMHXSTo
6ioMs7cEePkCJNVX7eeMf+e8MgPT27urq2UKonEeWoAyP8OU48eHhI3yBuNoh9Moh7LM53sgvG66
fl6bj2573XMGtnPiuGrULH1I4jnu0NVyhvGDlKbpNf3hQz4+f8PCrh/cYOztp/i6w/iKUP7y4mBp
dc7/A1BLAwQUAAIACADMYG5JYiaE/CABAACLBAAARQAcAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9pZGJ2ZXJzaW9uY2hhbmdlZXZlbnQtY29uc3RydWN0b3Itc3RkZXJyLnR4dFVUCQADQBkqWB0O
Klh1eAsAAQT1AQAABBQAAADdUstugzAQvHPqJ3CEQyWecZJbAUXi1KqlH+DgpViFNbVJ1M+va9SK
Ji6RIvXSwx7snRnN7k5ZZE8gjyC3W1Aj3XdctZWkqGg9coHOM/K3A5RFVlDdpQpygQimZ2e4t+6N
rjAJSJyQKF6vkzRan+toNuqfA5xwbUiOR/EK9wNI+gm7QzYjVbwH6flO+R8nYWdeHwAZx5e8EwpO
3JEoWJ6ytqrspOjzjgOOlolXJFr2YyTY9U4m/kUPXk85+q5lpRekvLlSEK5+rFcMgEX2CFpTjTnF
GroOmO1wdqQ58x/ozUJhoFNaTD52XGqcF7yTpmnSfbwhSR3415F+X6pYSKgRW+C2FFkHX+/vrCs9
XNWCBJfqCtM4SDahPok7TFl0PgBQSwMEFAACAAgAzGBuSYhSIpMkCAAAs1YBADMAHABzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtMS1wcml2YXRlLXN0ZGVyci50eHRVVAkAA0AZKlgeDipY
dXgLAAEE9QEAAAQUAAAA7Z1RT+NGEIDfeeIn+DGRepKTOCTwBqaHUNUGHdz12bEX4p6xU9uBu5f+
9q7txF7Ha8c50VZ3/SSQyO7M7uzsN+MNzIbb66v3jptG8deLC08EIhXXTuosnUQY74zTk9vrKzsK
Q+GmfhQ+RPcifhFxm2RH78fQ/3MjpMyu9eKi0TQYGgPzy+zx8XG6nJzPJ545lJqDZ8cPh4ZmgJUT
eoG4zic7LLZ9vViL2MkWk0i7HlYiFoYjv0fTiWmdn1mTsbEWoeeHTyfHDXUXrdfCM5zQiHbNPxlh
9GqkXXMcstrexLEI03KmDgUp8hjFz1uNwiulXr4HA2+p1Sy268pxP0uT7iUKXd70fO+6Ka9svhtE
iWgo6rz51yECRmc5AW0M7iwp55CCcsXh9dUHIcdN0ouLuPjBjp7XmaSnEYnC+ij3G9cVSSJNeWe4
hTMNOV+SedFPjJFlzibWbDyZz62RZWUDlkN5frJ2Unf180umJF2urmY2WZrDTLwMNwlK2La4rE8N
IGNwKn1jTa3ZfHxumvOh6nJV+JsiTeR+1miqI1dmvlWwWfN/PtiUOf6xYMuIqkKt5tmx3PO2uMuc
q0ZRpjkajybu+XSWqXXF4GJP9222xJqc/Zfumi3NznUnqROnn4pYtKURT+IhdsLEKaBsKFTAyqwU
CycVbbp5hL1TY3s0GputG7cUT36oqN/Wt+JX8SzjW2qorU0tHfN++BJ9rvboMvQUhQf/WcSDLgdF
HYrv/VjmvzfBZDS3zBKT9uy8UNNSv9xcmaO8kBbY2fbJ2Qxv13ZqvPrpqszMytbJr7nhliYZVdLM
WHuUP5wLd3o2dZ2x6VjDk/6IFc8ipSE3c48j7SPm4/opdjzxmxCe8Po8Wsy5KTOaeNW0f8Mjp1pf
EQeL5R/SOUXSeScfLcbpsLGyhmS+sOrlTuI29MQXjWeU3u9cc71JF/Gl5zWUtgTfKf0o/s8Vc4Qu
Lp5E2iZ9I9JPTrARffqr0X4RX992QMzDPMzDPMzDvB/DPDfahK0G2lmnMdhJD/E65mEe5mEe5mEe
z2qgwDzMwzzMwzzM41mNeZiHeZiHeZj3Iz+ra3Jl/VBVMVSrJ7Fcs0ehyCIsioDaSoO0lSXtnY1a
pQNlKu0lThrZlgqvXcFaQ6GltktXVuN4WX2Usbjf1SrdXhvWfDqezs9M09yOpA5TW5fU/k28KiMO
hj1Ufv7iJ1mdVNPkWkHDa+ynqu59VvXUWR3m+d5dm0+O3CBj4DpBsJSrGHbX7Mk5bR0qLeVmWtma
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
qIM6qIM6qIM6ln/AiSRCHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRBHdRB
HdRBHVtTgBM4vy5JTL9+dQ/ozPV3uFau7UxlZtZK3MpkJ3CZXTNq2ZfJntQcd+9rY8P4TOh9uLmZ
3kzEeRzL+SIWcSAs59nybSksYQfzRXKk31m5PDr9FHjLuYxOk+c7/fDL7ekvcvajG5/eBsvQlskn
U0V9+p/AWXrKzE26RzrO7DRKM3+aP30W6L/sxaLTGw+7YiJmQeCJ1QSTSalYW2OSPyIgDbCzdP14
YPwv7u7bP4fUfO/uMWu/ILh0j+UEio1iQx3UQR3U8asTcAIn1EEd1EEd1EEd1LH8A04kEeqgDuqg
DuqgDupY/gEnkgh1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1UAd1HGDn
ADsH2DnAjmKj2FAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVAHdVDHH68B
nEgi1EEdkgicSCLUQR2SCJxIItRBHdRBHdRBHdRBHdRBHdRBHdRBHQfYOcDOAXYOsKPYKDb/SRw4
WU5AHdRBHdRBHdSx/GP5B5xIItRBHdRBHdRBHcs/4AROJBHqoA7qoA7qoA7qoA7qoA7qoA7qoA7q
oA7qoA7qoA7q+F8YwAmcSCLUIYnACZxIItRBHdRBHcfhOQ7Pcfiv6zi8KuzcTYMuMvXiep6ZXi+Z
KsV7Q4e7WtXedl/u2erN9kKunrEZjcqEqcDv6GOzdlBDU9vtxoeFW5BcH8M+2ShDXbEvKpI6q/Wi
fnRDG/aNYa8/GvWMfu+oJlTXfw6e5HQNyrnvlKZJsem09WzQMjDlrWXso1I4T64/5yFEKvC7R6kE
1VI/+llfM8b6yNDEQqYy2dLiZh2U271u1jRUbQ6PG2ym4fksCHe03r16+KlvrlS5Jo6SeiR31eP7
JXVJhq9U5/w+luEnGUZqoKly9iCzMDrdlKWGbATl+cxEgz1PVhcO6s21WE9TPOrqaoHPsHem9zZt
bC+I5JaRMTAaq1Mh9zorp5nMszn13HqdyfT61UqFtv3og/39pBM5B+bpD1BLAwQUAAIACADNYG5J
GvQHktALAADubgEAMwAcAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC0yLXByaXZhdGUt
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
sEZvrwLKGG+mAinqWw0oRbablg4NgpAGVz3eqWen2+k5Z/2htuKQR3K24/s6W2L1Bj8zXMO5qV13
nNhR8jUXiYmcxL3QFgqlgjQSdiKafKvlaKcjS9ymjZuLey9Q3KflrXhujfCbWEhdqNRru6O9SAtf
BZOOrIgLTJrTxkyVpcOSxnY6yi9yBpN0++RoxuY1Re7Xo5c8FCmjVK+PRsa2vje2opmydid/OBNO
f9B37K5pW+2TwxGrqZPLv28qtEru+7K8j2xXfBLCFe4hOc8cmVLRxGPN82ekHKUczs7BbP6nDE4u
Ou9lajFOa4r5XctsYdtfNxbTwBU/aiKjtFY8l6tkFn1w3YrTmolrpR1HHP9lxwza9NVxFSRN9pO0
0WhtrNuKX5rXZaqLw6jJedZs8bwX792zuvcdvO5wNzfueQev2Gtex6u2+nuQScWhIU3WKZvtpinK
mN1s0sX0wrBG/W5/NDBNc92T2k1pXdL7k3hUeixytM7l4w8vTlNVdcolHh8jL1F9b9LEo03Q25uJ
yUs3yGg5tu/P5Sra+rJJjjmpQ6Uh49falqZSZ6TC+lpnITuKh52CIkXVPT4ksLnlPubXVofQnptq
OVdNmpLyYXxnpkeRvW+9u6AeGcnj4Sx2UItlYVUPZIWYl6O4yTn7OFRzU+WZPm6FmeblqzDRs1dk
wAbw8vurz2lNXAfeYc3CCaPGESRjJYNSB7uN62S7jMLvXlpB275cQPbwF/F0EJ3Xx4VY5bKZteum
OkNpU3lQXhLWV2JH1PdWp4Y6UAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVVUAVV
UAVVUH0LVO9F/qnYPlQ3diqqxTN9HAuz5r3ZmuhRvdrYNYB0X24vf3mSNlyGkaREhVX9mE5tzZ5/
tf2VWPv74aPcGdn+h5c85EROg8w2/6z2f25/yMG5Om7DDzs4VwpZuwfnqobO/8jB2X5Fue/olL+3
rHmqj6ZiqP2yvjDSHyHl286GQxRWLFKU8ifjceXRgezMjl/vYfxoPlYttZa2ab2YWCQSsc8iXvmJ
8tH7N/G086dTL2FtM5gTBokXrMTlKsi/xm8lYT5UlS4vSZEUr/kRbqnLfcxWxq9v0O9k2bYZkh07
Pb/TknEDwl6dkUrx2sDY7MA7o98fDjqDrpn+bYY+WW2Znj43GIeRPdVCsGsA3/AN3/AN3/B9FN8/
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
gRiIgRiIgRiIgRh+PIbTf7JRG9EszN9frHqrUbsF1V+WXrOr2U/DT3XKbSte7dy+4VrqUPFSp+78
HS99tU/MbrevWU4nwh5Zg1HXGrb75veBb6rmP3EzRNN1gmCu1tqq/WXaWHcsFW+latseJpumUTEx
3ivvsjvhuIzb3TS6y8dsbN6yLr9eWx2TWXlTY07ldeBcFA/1NYvsdv+TyL/fX2ns3vJ1H+MkivPU
U1MItZL45UJ8OPvQGOdf+YmY+9kLqCKInmUsHuRL9rMTJ/TE43q9v3JCtp64nadn6O4Yjbm5a6XP
ylLa/Hw+lsprXVZq63H1l+YtLbc3HFm5rTlbJ6UOxh81HdbBKPskkmLqdmzLPMS38DGR3lUQza/9
QH6VbhR7yVFZOPnZjTslIye6IzT+OKqmZk5MSYTVWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3VWI3V
WI3VWI3VWI3VWI3VWI3VWI3V71Izo9XK3zQOtu7ZD4Jxdr3QVJy954S19fnt9AdVuvRlTXHJYzSU
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
kHLuOfeec8sqiTYgDyDDUOyBJ9ELvH9ApWLCMygKoNYrZ/XJKokSokhKKhhC2g/2yHJKwrhr9xRl
gnPIFBM8LkQFdClFGRcMuGoKbWeMke9hf+IFgRdg5N6gIqmQaisJr4gm1Mqr8yT0iIyvJGtcR6V+
Isuhaa/EHmQuZLnoUzLgZ51fx7zsYOZPrM3zI1MNW0SyHeNvGyXk0Ix/4i5G45nb2NVh15lK0rxu
WQlyyWRtl4M+/TzPp6k393GGzCLd5Jq3vi84bXfhuBhVAz9bsxWneK5H60ZnfDNmNRu4d1OG4ZTR
p3uCD0PGD2IH65N5tQedIm2lc2uTxY1CnUHXm6xJ1iDp6+rbOHPcizTHM+S2d2ZZKwr51V7qocT0
hT8ytfs0qvnwFPvBZI5Q4P4Xk/m7ug/9A1BLAwQUAAIACADWYG5J6fUddzQBAABjBgAAOAAcAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtcmVxdWVzdC1zdGRlcnIudHh0VVQJ
AANUGSpYNA4qWHV4CwABBPUBAAAEFAAAAO2TTU+DQBCG75z4CXuERJPlywJHICacamz9AQs7WCKd
xYX68e9dYmi1QGtNox487GEn8z6zO+9MmkQLkE8gw1DUgAlrWcYa0O6wfNxAmkR9JAwHIcMkBn2Z
FUXhZU7gO0BNoo8pP5JjgQh5WwrUjDUr0SQjghVDXkF/n9cgWadoyCVZrkACYepYnkPd4Mp1faL4
vMR77TTUjahr4IQhEX34gqB4Ju2hGsdeHW+kBGy3lQ4IVEoh5HqnwK3qc2dtamrphFMGz0bhXVLE
8gf15kUr1F8U0bItJw+8mcL9G/zXDP6mkftzEd2CIjRtzDCHqgI+adggU7VMPztvuju85PO9v51n
ZKhNv2Lnz9RXkGuWK/jre5u6wG5HlmJsqbvGEUNX6+d67sy3A0p987dIwwE4LfsNUEsDBBQAAgAI
ANdgbkkXK09CGQQAADIkAABUABwAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFz
ZS1zdWNjZXNzLWFmdGVyLXZlcnNpb25jaGFuZ2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQJAANVGSpY
NA4qWHV4CwABBPUBAAAEFAAAAO1Z33PaOBB+5yl/gh5hppnxDwGGt4Q0c8xcS+6S3rssL6CpkTjZ
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
7dbzwwANSTX5KX6j8hVGdnxsWm/oyQQ9OpRv4l3um3jy/OHo8weRlxkF71rq+IuP8pSi0zqbXzcl
T01k4kamWi831SpvipD+qbwpQt4U8VF9ao738nErft7fD5Te+wf13qV/Lv1z6Z9L/1z659I/l/65
9M+lfy4r8mVFfssW7XFfzlFl1B7Juo/yQ/7OHeDY1CZg+MJ5qEBhv4+Z8/N4Tud0OFZrMf1vokut
53mxy2nIRqrvFUStwc4JAWHo79bhDnZ85nguPk216vsVBUmmlExZkymTwPAOAiuqPk35c06Ej+2w
KBmQVnGpVRid+rzC9JGgHM7IgfE5NkeTo4P3KQTeRwfvE31cgeS7uwuwdet4qzvbSVEGtURl3ozY
9QSGy1+F9tO+UiDl4dLkQTJ30QMRfx2Od9WprmhD/R2uOtWVkT5p9wKes5Vfd+3W1c7cdn7RX+Ns
6bpsYzRU2776+KypXcErUGQmWFYSd+WO4a5mrwUuIZxojS4Q5+XH5X3eXb/Pm59+l7d9n+G2b5Ez
j/ZVrLztW972Lb/n3Ob3nJt/ublWSH4pDaTwedv8x010dTKp/NIKKF1F7Jsp+nCqnnloZspiL03J
nfBOohdPCZ3jypQOPXE0dWjJHOr4S/nfcZtqO8XMFTanMhPNGVlZfM30hv8DUEsDBBQAAgAIAOxg
bkm1/P+dpQoAANGPAAA3ABwAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLXdv
cmtlcnMtc3RkZXJyLnR4dFVUCQADfBkqWFwOKlh1eAsAAQT1AQAABBQAAADtHctyo7i2apZZ+RNU
sxm7Kl2FMQaTXeJ0Zlwzd5zb6Z49NnLCBIMHcCfZ3G+/4mkBkhAvh86oqru6DUdH0nmfower25sH
6H2H3tWVe4DO7c0X+M8R+sHScLbQtqF58c2x0JPV7c2tERgbw4c0SPAJjC5WHeMb7w3LmQBCo63r
OHAbWK6ztF0fmneeu1/aFnSCsCEYTxVJmynoj65q6lSdMFAZG9cLvnqG4xsRQs6ZjM0NEd0BejvX
21+TsNab/X/g3vXeEPSNsX22nMeHwPWajzfGhqPCcCRYx5NGQ1xv/ka8SIb34lkBjvrOciz/CQ0A
G6KZ4F4WuIhwYoxboL+1eqgDW5rnaSyV0lUYpbLoSFA1XZ50rkMILsdoBOoZ4X+/Wnvo3VkeghtL
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
clUx1Qf5Rdq2eRomI3+a7v26o3+xlst2bzzsiIkwfd8VmwqSU6btZO3FxFfISQfbK8eLBvq/os5B
9j8dN+eHXQh/yiXXPodPJQnKhTAXwlwIr09VfpAj39u9LG+8EObqtP7q9Oe5uORaiWuln/5a6X90
dfK273ZyrcS1EtdKB18rvcZpAv7whz/84Q9/+MMf/vCHP/zhD3/4wx/+8Ic//OEPf/jDH/7whz/e
leRdSd6V5F1J3pV8o+9Kvnwrb1vytuUP9rYlvwvG74JxfcP1DfcXuL+AP/zhD3/44/4e9/e4v8f9
vZ/4/l7ZHvn5PxQ2jddR15XFP2qojj7L0lt9B32R7eBma5Y0/UFvNNotY7l+KPcL6VrlnBTy9Xo9
idO4nt2qF8ZXUybbrzZrz1473XHv8HaSiurH6ogh/xNQSwMEFAACAAgA8mBuSduq9KIMDgAAx6wF
ADcAHABzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jdXJzb3ItcHJpdmF0ZS1zdGRlcnIu
dHh0VVQJAAOHGSpYaA4qWHV4CwABBPUBAAAEFAAAAO3bTW/aahoG4H1X/QksE2kqAQFCsjslp6No
NCdR0zN7A29apsTOGKc53cxvH/MRMME2SZrqjGYuqV0UjDH25Zv7fVDPz95fhfRbSE9Pk9sQn73/
GP51F2bZIIpHYToN4ze/x5P8kfOz92dRFg2jWajasvGu8fbN+WZ/49X2gySOwyibJPFliMeT+PNg
msxCvnWr0zw+6uR/Tnr9/O/uO21eeXo6Kt3LhzS5GUwnIc7m7/54n51+/fEsdjF++ZEsX7/3GA5u
okl82Cg5kXt2dVDY0/HxSfuw7GJM4m/J13BxG9JovqNf4vGnNIpn0WK3nyY3IT04LJ6GV7nM1R8p
qTmQD5M0f6fCsYzmn3pnJ2XH8u+dxw4OGwfNP46vr6+7w9A+afWah0t/H/J3TNLv+QUP05CFh+0f
eG4u5adkTaN0y5pnS45wzwFGR+PFAVafuS9RPJ6Gs8Wb7d9s9e/1dZ/lx/XpS0hDI8r/trqdVrff
bDf7jdvl7fLmebu6TG5v82sdxY31Bf1LI07uG1nde+w76sFdmua41+9U84J8k+skvVm9YnlW1q9b
GhwPS1+5vFzvo9HX/JCucgp1Z3M8GZ/tbv9TiEYboqUGH45k/R75hhfFW/D0NF3di8nN7XzLcckm
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
lPJ+totXLMHdisMgSWtbyNZ7IaBQwbpwl2V087Thyx8urBd2U/fCkyvLz3XuCPzi7NoTTqd1Dtr7
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYogh
hhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYY
YoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhi
iCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYogh
hhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYY
YoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKI
IYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGG
GGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYoghhhhiiCGGGGKIIYYYYojhizPM
kuLuQzpO0m0Q15F5irmrzaOZC6yfo3xQM8jeOrIGTLIZkRMzv35xUVPQeluF7Ft/9BDeJenfw/ed
mPWePjS7UesVZmITW696Rhd3PA6Tv4bJ+zB+GE1ZDR7SdArsa/ie3fRLsVw2NkjiSRRng/YQz/rX
2psk86bKEKPJVG+oua9n2S5UuY13qf3qguaZLMbWI9mIa6Z+XQiu0R5VBFWAX4S1lvPwEs6vnztA
u2m/boSxGcA888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wz
zzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM888
88wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPM
M88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPP
PPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzz
zDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wzzzzzzDPPPPPMM88888wz
zzzzzDPPPPPMM88888wzzzzzzDPPPPPM/wnMF4ZwGEZhsmJf6nQ6r/pqFvU+DJJ0+IqWzTDXrW2r
ZrhxC5XXm0kUQhu8FcKaV0xhYGsWzKK+fvw5VC2C3YrzLShXrly5cuXKlStXrly5cuXKlStXrly5
cuXKlf95ynf5EPDqeR/47PYR4OYHZZufAF7VfGL1Ih/s+Rz6j/gc2gfNu3pcj8xk3b9Sd4s/Tysr
hWRt9m9H0fjLNpKrwI/FBit7kjV1ORxmy2L647dshnNF5T4kaxqlD9HvHya9NKur7uPzm1y5RIkS
JUqUKFGiRIkSJUqUKFGiRIkSJUqUKFGiRIkSJUqUKFGiRIkSJUqUKFGiRIkSJU4Tk/sQ13wpfJHa
q4941oGBQXJ3F02KX7F+jEaj7uz6x81vVDd+T7v0Nfn1N7yrM2ZfPP+lddBpnx51sn/nJ2dH7c6b
im/mhzi78hA2v2dedc4g/pZ8Db3lWFzGw1zSbGT2XuisxQ+M97avwQ82R7/h0ELScKuzTjXkfunH
w1FY/rwatHE2uB+/hDS0+tn/g+POwfHp8cnBSSvDN4ziz3kJ5a42n5ZYgKvvU6nC2UxvOTDSrUyq
OTgyaAjOR1b0O7NTcYTpMY0m+eh3UZxBD7sdZ6ru+i6DmD9r0rj2ssYqWymuvZPD9tmzV9Tr8llf
4+yoSL8wW9dxftKfPwLNQi+3Nlyj9TZ8juKN4zA1x4pKk7wNdX84/O33aDzJCnOgdyH+YdJPJ6Hy
iFy34pFSKfBtTUz2bLxN0nJooaFPGZ1enCXcTw/k7bTSLn/a3G85hRgNl01vtPfqdvWNfucOiTWw
m1n42HBCbBlTmu/NzKpjW895yi5fwLY9Z/MvaqVrzZO6Cqufh3VI89aweh38o/5+aKmFbB+oP6C7
Ltxlkd08bfh2Oy95U/dCnSt7hadxMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwx
xBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQ
QwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMM
McQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHE
EEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBD
DDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwx
xBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQ
QwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMM
McQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHE
EEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBD
DDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwxxBBDDDHEEEMMMcQQQwwx
xBBDDDHEEEMMMcQQQwwxxBDDYlLcfUjHSboN4joyTzF3tXk0c4H1c5QPagbZW0fWgEk2I3Ji5tcv
LmoKWm+rkH3rjx7CuyT9e/i+E7Pe04dmN2q9wkxsYutVz+jijsdh8tcweR/GD6Mpq8FDmk6BfQ3f
s5t+KZbLxgZJPInibNAe4ln/WnuTZN5UGWI0meoNNff1LNuFKrfxLrVfXdA8k8XYeiQbcc3UrwvB
NdqjiqAK8Iuw1nIeXsL59XMHaDft140wNgOYZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZ
Z5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWee
eeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnm
mWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555pln
nnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ555
5plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZ
Z5555plnnnnmmWeeeeaZZ5555plnnnnmmWeeeeaZZ5555plnnnnmmWee+T+B+cIQDkahX+5rOq+x
Oy3Mhb+iFTPY6Nq2RTOouJXasmYZpfB6euXQ5gVUGvCaNTSojquY2V2WRffH7j+/OEqZ67mYtVgp
qno1VYVuLqhug4IXWSu29j9ia7d3/3EeB8ndXTR5Uxjlx2g06s6u50LnvS7kjifJ/bRrdeOYdShe
3VK3Hw/CaBSGjdXUFqx7t7h60GmfHnWyf+fHJ4dnZ282NtpkHDaDOu3aCS/tTjchHmaQu9N6ilXf
9b/fhtn168Wsb7RzcH74xAH5f1BLAwQUAAIACAADYW5J382jT2MUAAA9PQcAMgAcAHN0b3JhZ2Uv
aW5kZXhlZGRiL3ByZWZldGNoLWludmFsaWRhdGlvbi1zdGRlcnIudHh0VVQJAAOlGSpYgw4qWHV4
CwABBPUBAAAEFAAAAO3dTXMaSZoA4LtO+gkVvliO6I5AMkIfNzcezypid/Da7r3zUZZoo4ItwBpf
9rdvUiBRUB8gWb2rmXki7LAp8s03K/PJrIIg4er9b5/j9HucXl6OJ3Hy/rdP8X/P4+ms3U368WgU
Dw5+T4bhyNX73953Z91edxpXlYx+jQ4Prtb1DVbl2+Mkifuz4Tj5GCeDYXLdHo2ncSh93GycvW2G
Pxet8/C3mGkdeXnZL63lQzq+bY+GcTJbZN+us3meb89znd+XtJtMu6tmhaJpd/HfL8PbOP0wTEO5
o8bfz75+/Xrai08umv3Gm0JQf3x7O5x1kmXLFk+vz/TL+L69y1K5wPzJFJ8snEdJyoOj2+4weROV
nHOhwux0jwa90tLhrL+O09t2adB/xLfj9Eco/1u3/y2M1OfZOK3MsCycL1nS7qM3q3Kd3h+hm1YV
3qXDWb70h2EynN6EIa0+y8Fw8LGu6ft0YnTU745GvdDiN/VkQ7LSLJtMWyeN8zKEw+T7+Fvcuff1
Lhnkqsm0hV6pPtNxTWDGtCb2ppsMRvH944cmTEPDv9zEaRx1w9/j0+bx6dlp67gVTZYzsgpyWT8U
5sRDoYPtASv24WFFmU76rjdO64redn/04mzluFrNvs3BODtvNipPozDEWUWDwql8Dd3bSUKTJqN4
Ftcvicsqnr4YLuN3LoN18762qqN855xdnLz556H6IaQJS0oYlXgxTvd13C/zpQRKS9Y8W9LiwqGj
N/krRvftoPFmsfLuOuUs2bP0zHkjLEEPPfO4qj6OJ5Pgt5tED6P4S5SM76JZXY5drW7P0zQIfMhU
E3B/JVpGLHvlIa72GrYcrvyV5+Dzf/57uKQUrlzXcVha/jINgaNwgbmv4Sr5Og4J7ud0yFQRXkwU
ZYfCo+jrcBRHrw9fR6Gxg+H0W/21632xyfl7gsUELgSWDej/7EJ43MoQVi/o7zesLwp28jdNl5fp
6u5ptQoOSoqMk81aPs/7/Xg6DU35NeovxzMK+aaLgRxON5bpi5NsmX6oKnTdpDvr3/zl+8PClbsJ
e9tb3oQ9zPjFDV7VyWU3f7k5HB0dhr5pnr5tnTUv3p6cvyncU9Z09M7JHmf9XHUPWlj6n2u+nzT/
/Pmey/GnzfeFqPVs3+jZkzDmVVN/0bkb8zFEHr89P3t7enoWwn5yGaidwp2t1M9zbTs/bv5/9vZF
r9Gou8KHPktn/7Wcyu3QiOu49pXLxq1OGndncVVs8XaneR5unqrGvRdfD5Nc+FWyz/K/HVV1Zd/r
Nqh6Se3k15L9FtR17tyD0Lz2otMWl5e1yuhuOLt5WE7za2mr1YzWd4HReqVbjPDFRaPROvnaaPT6
J2e93vGbg/0HtuTl8ubj+xuownXh98l12h3Ef4vjQTzY53pwftoKy1B8V3L85d14PvKqlbtXz+ZC
7jVwiDk6jA5L3mHYLvlMb1xsV7vzPYyydlQ/uePld6F8zcuaYtkdb2UUAipWg7JB6A4WYxt1Pt/P
s6v30elJ86TRvDg7Od/v/Yif7YxHvS1RNixVL913UiorlIfxXG+YbU6Gu+FoVPHWgHfodrxDV0W7
vvDjmvvP9lbbS31zq+6tpxd36dvqldzlr+Q+YHEyq9eE777O4nTjPqO9emP4/h7iyRfVWc24ld+u
bBSJ718P7FosHgpuQSltSUj1bjBYvNAKD7/H0ax+idtcnDfeJJ/MF3IGxXcpV/eTH3PPCxQoUKBA
gQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUKBAgQIFChQoUGC62nLZnqfTcVoV2tko
UfFZ++V3fPzb4hPow+S6ckthbh9G6eeuazcTlEWUfK/C20azbDNBnIQj8/gZ9ws++vTLE27tl6ip
quxkz5v1ez1qqvuZc//5rTx7Bb2sjRLVNWbbAbob33qztYf1yV/PUb+P6N3OxI/ZPPuP0t3rPUzv
/rSOr98HFVpwn/pq333jL+urfz4vtgjv2ByVlSnse9qOfK7NfffXsF07dvLXusKx+mF7KFaztf6h
SP3Me7ii1n67yKfVup1m/x7+Ei33BEXTbGvoci/qeaPR2FFL3B+ni28j+hb/qKikddGqrKQ7GOxR
w1lws9ec+/i4vs5vFqzm+LHqBib3XB5Gblf6ai/aI3abNY8bb5hllllmmWWWWWaZZZZZZplllllm
mWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZpll
lllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZ
ZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZ
ZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWW
WWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllm
mWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZpll
lllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZ
ZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZ
ZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWW
WWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllm
mWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZplllllmmWWWWWaZZZZZZpll
lllmmWWWWWaZZZZZZplllllmmWX2IShpz9PpON2ldl0y7zZ3tL43cwWrxyhfqF5vZ12yncbhtJPr
qJ89ju6Gs5soSIpCaPrjMnp1+OpgWTQaTqPeMBksCo/Gd3GaaXp9+DrqJoNoPpmsj+wFqfP4k98P
U2ejr7c5dcrHLDtyeTmNZ3+NZ5/i6Xy0gBM6JV0QyubNs8G7T9YfJ6Hr5/GHeZK1LzqajZepitTC
zA4+44rzepLejSp3AS7kL3+ifiQ3y1Yj2SpXj/lqo3DFIrhv5jXPq6ee135Ir2rHc7sAqqiiiiqq
qKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqii
iiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooq
qqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqo
oooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKK
KqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqq
qKKKKqqooooqqqiiiiqqqKKKKqqooooqqqiiiiqqqKL6L0O10/sjNH7ViYN4FM8etBYanS6rfp+V
+hT3x+ngBWkf5Jq1C/tg6xRKj9eT2Cha422jWD30jY6tcL6qr5tcx2FM0+zfw1+icTaM0XRRKDo9
aZ40mheti9ZBO41DRybXCz0LunfD2U0Uqo5CE9Ifl9Grw1cHK9XDadQbJoNF4dH4Lk6zoXt9+Drq
JoNoPpmsj+xoW9b+0Lhs6Eubdt46bdVX8nsyn8aD30bj3ofhaFXlVF555ZVXXnnllVdeeeWVV155
5ZVXXnnllVdeeeWVV1555ZVXXnnllVdeeeWVV1555ZVXXnnllVdeeeWVV1555ZVXXnnllVdeeeWV
V1555ZVXXnnllVdeeeWVV1555ZVXXnnllVdeeeWVV1555ZVXXnnllffF5d3n5xHeP+2r8Pf7cYTt
nxDY/m2E9xXf5f8sP3nghzWe/sMaf87vCTw+wg987Kt93TOzdfsKzd18vKisUCTk7PZGw+nNLvAP
Bb9sJixtSUj1bjAIk27x8Hsc5Z8qtmG8/rWSwo+XTOazThrqqvrZko+55wUKFChQoECBAgUKFChQ
oECBAgUKFChQoECBAgUKFChQoECBAgUKFChQoECBAgUKFChwETiexEnFh8JXoZ3qEk/ajtAf394O
Z5sfsb4bjkbt7PiX7U9U135Ou/Ax+fUnvMsjsg+e/xodNxtnb5vhz0Xr/G2jeVDyyfw4CUfm8fbn
zMt2MSTfx9/izn1fvEsGuaCsZ46eaSfHT/T3ro/B97d7v2bTwrjmVLNG1cTedJPBKL5//NBp09C5
X27iNI664e/xafP49Oy0ddyKAr7FFouyfp91v8V/i/8++zRPkjDQW0O12hey2oE0TkY/oul8Mhmn
s2l0nP/g/i/Zho27kHmUxt3Bj+im+z00IW+v2Dn1+zNWxKt7oVBhZmvHBph2aVDFRph+feHHNXe9
S6W8Dfv0Rn6bSu20DclKs2xO29ZJ4/zJk/Fl0a6uMdtl0p3lu/MqyY/z03ugntq7nYkr2PXi62FS
sjenYldSYaDLdia1Sy4YpUgOK8qEK18vzPsvtZt1vobR7SQhYLLYzLfXZHj3pw3Pjh2Mw8F96q18
Lwt2cSxzW8BqVHyeddNdKLIyhfHejizblPWUa+j97dWuq2j+NqxwrH5QH4pVj8O6SP3sfbjZq9+x
202u4zCEafZvxZbdRqPx0/t+Wxetykq6g8EeNZwFVXvNyI+P6+v9tk5+rLq3zj33Arf9Mssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPM
Mssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLL
LLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyz
zDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy
yyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMsss
s8wyyyyzzDLLLLPMMssss8wyyyyzzDLLLLPMMssss8wy+49vNgQl7Xk6Hae71K5L5t3mjtb3Zq5g
9RjlC9Xr7axLttM4nHZyHfWzx9HdcHYTBUlRCE1/XEavDl8dLItGw2nUGyaDReHR+C5OM02vD19H
3WQQzSeT9ZG9IHUef/L7Yeps9PU2p075mGVHLi+n8eyv8exTPJ2PFnBCp6QLQtm8eTZ498n64yR0
/Tz+ME+y9kVHs/EyVZFamNnBZ1xxXk/Su1HlLsCF/OVP1I/kZtlqJFvl6jFfbRSuWAT3zbzmefXU
89oP6VXteG4XQBVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVV
VFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRR
RRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUV
VVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVU
UUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFF
FVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVUUUUVVVRRRRVVVFFFFVVU/2Wodnp/hMav
OrE/irvFtqbLGtuLJ3PFXxD0/lbTdlnvl5xK5XP1MgrFq+kVi9a7L3R4Bf3tesNYj7NH0TR7eHrS
PGk0L84b53vNi/bPdUB+dhQi14ORZSwlVT6dyopuz6h2DYNnmSyW5Kcvye00Dr2VXC/WscUiejec
3UQhMgop0h+X0avDVwer9XU4jXrDZLAoPBrfxWm2krw+fB11k0E0n0zWR54Q4dLwf6e9P769Hc4O
Nnr5bjgatbPjuaLLVm/EhrVrsmha7RPraldHj5uNs7fN8OfitHVyfn6wtQCPp/F2oWajcqQKi9bH
ODPWXtSzWfVt90cvzo5frYZrK8/xxUntmZQ1IPR58jBq7W7Sj0ejePDI0v8LUEsDBBQAAgAIAANh
bkk4pK6ZrQYAANBYAAAyABwAc3RvcmFnZS9pbmRleGVkZGIvcHJlZmV0Y2gtcmFjZS1wcml2YXRl
LXN0ZGVyci50eHRVVAkAA6UZKliDDipYdXgLAAEE9QEAAAQUAAAA7VxLc+JGEL775J+gI1Rlq4QQ
ILjZsE6oJItjvLnrMdiKhURGwl5f9ren9WRG85B4ZdnyVK2rVpru6enur3t6Hmg+u10i/IrwZOLZ
ie3YMZpGYYjcxI/CexR6fvg0DaIYaZ+0nqmP+ib8Gw8t+Lv6Gvr/btF8djtjOCcTl9vLHY7W08BH
YQL9Xdf7NK2r+W480QaFs9sHBDLiZGqHLgoC5LFSRZSphHP094jtMLYLNYEU2+l/H/01wnc+BrqO
/m20Wq0GDjLGpqt3GSY3Wq/9ZBHmI0ubd5Z7jMrx5lQEI6kM28jowRF51VnbftjVODozHWbqdjyH
Sw1aryK8nnKZln/94Scp/a3tvoDnl0mEhRIq4v2G6/nevWwMbayhdVw7CBwYZFeOZRDGlULjd2jo
Fg9NfvgavaBFCZSb0CO6yWDT6YowwJPMwKkiuqqbiB31tYBmgW+cCMtI1/a7g7IgnhfApdUfWaYu
VIMxataRx6iyggBahDCkTYASJPF/JDFnFoUS3mc79AJUPleOiUGfx2eEkWbDX29g9gajwbA31DZ5
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
mZIpmZIpmZK/n5KLe3cNUWfO0zbjmpIpmZIpmZIpmZIpmZIpmZIpmZIpmZIpmZIpmZIpmZIpmZIp
mZIpmZIpmZKLTaO2xjUlUzIlUzIlUzIlUzIlUzIlUzIl7+Ya18aSKZmSKZmSKZmSKZmSKZmSKZmS
KdnqXda4pmRKpmRKpmRKpmRKpmRKpmRKpuS3M5a8arQ317ztnHOn1xiJzkvfDRbTpmRKpmRKpmRK
pmRKpmRKpmRKpuSdVnIR5G5D1JRMyZRMyZRMyZRMyZRMyZRMyZRMycaSC72XvErT2xGw1bsomZIp
mZIpmZIpmZIpmZIpmZIp2RrXlEzJlEzJlEzJlEzJlEzJlEzJlEzJVu+yehclUzIlUzIlUzIlUzIl
UzIlUzIlG0v2JShKpmRKpmRKpmRKpmRKpmRKpmRK9l6y95IpmZIpmZIpmZIpmZIpmZIpmZIp2Viy
sWRKpmRKpmRKpmRKpmRKpmRKpmRKNpZsLJmSKZmSKZmSKZmSKZmSKZmSKZmSKXnba4AZS6ZkSqZk
SqZkSqZkSqZkSqZkSqbk16Hk/KPCLy5pSqZkSqZkSqZkSqZkSqZkSqZkSt4dJW+s3XWT0JegKJmS
KZmSKZmSKZmSKZmSKZmSKdlYsveSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmS
KZmSKZmSf1glF0HuNkS98fvGuYydF7Hb+eTUAn0LePs1efN1iv6FlLzbGcnszM7szM7szM7szM7s
zM7svt7sLWkj20a2KZmSKZmSKZmSKZmSKZmSKZmSC4w3bwGx5n9TMiVTMiVTMiVTMiVTMiVTMiVT
8ltT8namZS/a+lV9vdn8b/O/zf9mdmZndmZndmZndmZndmZndt+Szhz9znjTO+8jACPbRrYpmZIp
mZIpmZIpmZIpmZIp2ci2kW3zvymZkimZkimZkimZkimZkimZko0l+0oWJVMyJVMyJVMyJVMyJVMy
JVMyJRtLtpYYJVMyJVMyJVMyJVMyJVMyJVMyJVPyqxhLNuOakimZkimZkimZkimZkimZkimZkinZ
WDIlUzIlUzIlUzIlUzIlUzIlUzIlW+PaGteUTMmUTMmUTMmUTMmUTMmUTMmU7L1kY8mUTMmUTMmU
TMmUTMmUTMmUTMmUbMY1JVMyJVMyJVMyJVMyJVMyJVMyJVOy7yX7XjIlUzIlUzIlUzIlUzIlUzIl
UzIlJ0ppY+2um4R5lby2fAvaeq3XhYu9+EzJlEzJlEzJlEzJlEzJlEzJlEzJxpLNuDbjmpIpmZIp
mZIpmZIpmZIpmZIpmZKtcW2Na0qmZEqmZEqmZEqmZEqmZEqmZEr2XrIZ15RMyZRMyZRMyZRMyZRM
yZRMyZT8apXsvWRKpmRKpmRKpmRKpmRKpmRKpmRKpmRjyZRMyZRMyZRMyZRMyZRMyZRMyZRs9a7t
rt7lvWRKpmRKpmRKpmRKpmRKpmRKpmRKfhtKNpZMyZRMyZRMyZRMyZRMyZRMyZRMya93xrUvQVEy
JVMyJVMyJVMyJVMyJVMyJVOysWRKpmRKpmRKpmRKpmRKpmRKpmRKpmRK9r1kSqZkSqZkSqZkSqZk
SqZkSqZkSqZkY8mUTMmUTMmUTMmUTMmUTMmUTMmU7L1k7yVTMiVTMiVTMiVTMiVTMiVTMiVTsrHk
XZ5xTcmUTMmUTMmUTMmUTMmUTMmUTMmU/HJjyWuPAhc0+FqvCxdjOCVTMiVTMiVTMiVTMiVTMiVT
MiVTsveSjSVTMiVTMiVTMiVTMiVTMiVTMiVTsjWurXFNyZRMyZRMyZRMyZRMyZRMyZRMyTsx47oY
SLewPJgZ15RMyZRMyZRMyZRMyZRMyZRMyZS8Y2tcrz0anDlPe4PZ1JRMyZRMyZRMyZRMyZRMyZRM
yZRMya9MyVbvomRKpmRKpmRKpmRKpmRKpmRKpmTfS7Z6FyVTMiVTMiVTMiVTMiVTMiVTMiVb45qS
KZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmSKZmS3+Ya18UN7r1kSqZkSqZk
SqZkSqZkSqZkSqZkSt6kTcnN0G2MO2eOEecaZd4mYrezmPYCfQto/TV583WK/oWUvNsZyezMzuzM
zuzMzuzMzuzMzuzf3ewvNkK9blL7erORbSPblEzJlEzJlEzJlEzJlEzJlOwtaW9JUzIlUzIlUzIl
UzIlUzIlUzIlUzIlvzYlF541vtbr2JRMyZRMyZRMyZRMyZRMyZRMyZRsLbHtfb05/6jw887tNpZM
yZRMyZRMyZRMyZRMyZRMyZRMyS+l5O0s8bWOrSmZkimZkimZkimZkimZkimZkimZknf3u1RW76Jk
SqZkSqZkSqZkSqZkSqZkSqZk7yVbvYuSKZmSKZmSKZmSf0Alv8QG0iZt0iZt0jZr+0VmbW+saOPR
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
V9kfVb+5WdB13M+bAP0e90cZuJmKfj2JbllNv06nu3iwOP9n4fILNRWmuLbPciB/CWeujhVV+JP9
w/JKNe33dR91tbqWX5zpk5m1rTc427tr90OE/e5do38XSvys3UnijVVK7Mhgx6O/H3o+THmkqfqm
Xo9t1/wpI6p+7XP8R/xX//1dkoSCvldU415x3N91kva3qHd3e9vp9nvRfrqxvBy+5v0aUm5341rz
W/SpFlrTvteDz/f1IM0+WLPrvGFdc/PAlr+NZd6NvUMm4p9dxKNI/kzuenHzTbtTf9dqj6PsQTRE
QzREQzREQzREQzREQzREQzREQzREQzREQzREQzREQzREQ7R91d//afpT/C4IoiEaoiEaoiEaoiEa
oiEaoiEaoiHaSjREQzREQzREQzREQzREQzREQzREQ7SVaIiGaIiGaIiGaIiGaIiGaIiGaIiGaCvR
EA3REA3REA3REA3REA3REA3REO2P9z2BP973M6yeFwDQX8/y17OQHumRHumRHumRHumRHumRHumR
/pmRfpsR/Uhs3e7FeYiGaIiGaIiGaIiGaIiGaIi2udwX2jaX21xuJRqiIRqiIRqiIRqiIRqiIRqi
IRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqi
IRqiIRqiIRqiIRqiv/8PbuXDeE2KQzREQzREQzREQzREQzREQzREQzREW4m2Eg3REA3REA3REA3R
EA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REA3REP0D
voleE9wQDdEQDdEQDdEQDdEQDdEQDdEQDdFbheh1DLwJcPvFYhAN0RAN0RAN0RAN0RAN0RAN0RD9
UyB6+xeHt0+Ij7pdHvg3UpxIj/RIj/RIj/RIj/RIj/RIj/Q2l9tcjsnWxSEaoiEaoiEaoiEaoiEa
oiEaov2aM4iGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIi2nRuiIRqi
IRqiIRqiIRqiIRqiIRqiIdpKNERDNERDNERDNERDNERDNERDNERDtJVoiIZoiIZoiIZoiIZoiIZo
iIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiPZNNERD
NERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERDNERD
NERDNERDNERDNERDNERDNERDNERDNERDNERDNEQ/ENEPxvD3ZiFEQzREQzREQzREQzREQzREQzRE
QzREQzREQzREQzREQzREQzREQzREQzRE285tOzdEQzREQzREQzREQzREQzREQzREQzREQzREQzRE
QzREQzREQzREQzREQzREbzOi14HxmuCGaIiGaIiGaIiGaIiGaIiGaIiGaIj2TbSVaIiGaIiGaIiG
aIiGaIiGaIiGaIi2nRuiIRqiIRqiIRqiIRqiIRqiIRqiIRqibeeGaIiGaIiGaIiGaIiGaIiGaIiG
aIiGaIiGaIiGaIiGaIiGaIiGaIiGaIhevTE+o/3F4L86/AtQtw71n0phbDP4HwnR2/1eAemRHumR
HumRHumRHumRHumti/tC27q4dXHr4hAN0RAN0RAN0RAN0RAN0RD9TDaX58N4TYr/tNsQijlqXdy6
ONIjPdIjPdIjPdIjPdIjPdIjve/FrYtbF4doiIZoiIZoiIZoiIZoiIZoiLa5HKIhGqIhGqIhGqIh
GqIhGqIhGqIh2ko0REM0REM0REM0REM0REM0REM0REM0REM0REM0REM0REM0REM0REM0REM0RNvO
bTs3REM0REM0REM0REM0REM0REM0RFuJthIN0RAN0RAN0RAN0RAN0RAN0RAN0RAN0RAN0RAN0RAN
0RAN0RAN0RAN0RAN0bZzQzREQzREQzREQzREQzREQzREQzREW4mGaIiGaIiGaIiGaIiGaIiGaIiG
aIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIiGaIj2TbRvoiEaoiEa
oiEaoiEaoiEaoiEaoiH6KSN6HdduYtU6B8ZrUhyiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqiIRqi
IRqiIRqiIRqiIRqiIXp7Ef289hfbgv5jtqAXAPCpFMY2g/+REL3d7xWQHumRHumRHumRHumRHumR
3rq4X3NmXdy6uHVxiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoX2j7Qhui
IRqiIRqiIRqiIRqiIRqiIRqirURbiYZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZoiIZo
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
grWsUQh+iNGaWqiU/W+75CmzQlOzrFp3m5qutnOc2RtqYpv+A1BLAwQUAAIACAAKYW5JRzT2jBMB
AAC1AwAAPwAcAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNyYXNoLWluLXRhc2tzLXBy
aXZhdGUtc3RkZXJyLnR4dFVUCQADsxkqWJAOKlh1eAsAAQT1AQAABBQAAACtks9ugzAMxu+c+gg5
wmHSKIEAtwFC4rRpYw+QEWuNBg4NtNLefqHsTzegVadK8SGR/fPnLy6y5An0HnQcC97zF95BqhCh
6qXCB0Ah8TWtVQfkhrj0lnnUnCgITVjPKLc7KLIkm1TGcTVLybVq0loC9oa3+sukoVWc0nNAiP8r
GevParAbLtEhE+hZlH1EYixaO9YMQ+JevcF9C5oPoDsUpebY8QO2lA1o2zm2QbWAWfIIhtP1KccK
6hrEHHk+c1B2dd6yRerEYLnUptNy7YajqOHr/m1RZ1qWG9BAuAnXp67P/MANSDtu1jBdbtoo/T6K
Hh5+NqBUv0b/pI8ftnKITX0vYDTy1qFzXdJi4dT9y7I/AFBLAwQUAAIACAAKYW5Jdc6hJSkBAAAz
BAAANwAcAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNyYXNoLWluLXRhc2tzLXN0ZGVy
ci50eHRVVAkAA7MZKliRDipYdXgLAAEE9QEAAAQUAAAArZPLboMwEEX3rPgEL0FqJV4uhCWgSqxS
NekHGDw0qGRMjdPH39eoImkDpI3EwguP5p4Z3xnnWbIB+QYyjkULmDHFCtaB8YT16wHyLBkicTwK
WTaxnI+wqipagMd8cGxiTil/klOBCKWqBRrWntVokwnBjiFvYLivW5CsV3Tklmx3IIEwfVwauDRy
PC8gms9rfDauQz2ItgVOGBIxhG8IineiLtX4q+v0ICWgOla6INAplZD7kwKPqt/Oeo5t5DOTsngx
Ce+TEla+6J43Sui3aKLrR7QsaKhx/x/TeeHkEbSyUynDEpoG+CxrlKlNNxfnzfvLa74+c2GRpQv9
VXRaCA25Z6WGf3632QdO9m3F1NT6xoll6g8UUP8uDFa+F9nLkmaFY7+vy/4CUEsDBBQAAgAIAAph
bklzWjQ3aQQAACEYAAA/ABwAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tY3Jhc2gtb24t
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
jkmI6NkjjgRYvOphgMWpfK7X1wKZFWauZ1iMbIIUseWA8f7mpkZUqJOcM0Skmym46e0mgbg2pDhF
tZYDyPnzAXunqepTTZhv6d1ofekd+ObC7PmyaEANO1Nb724nv/Ydlk8LKjqH9+9pnsnOhPzjvV0Z
S/3Jw3e+J9xbd8619SAX+NZMG7+lU3W9J/m47RjituM90HdzZpnn0vBzC60rfadx2bW5dJlY3j7Q
nzVjftxGfNxGnDtt5G8epCSMJzHYdUbl+AF54PC8Te5fPbjPe0K2hwyXHLqXvUNdHOBT9ACCEPrF
QoxcgMikhkCYDass0esww57F8zL3SppH0Je/VS+cjEUgab4Y5g3ui2Y+hIy4jT4LrcqpUCbe923+
OW/PBe0ciGXFnTnV6UklB+7FfV9rs/73YZ88G/UD2rAm2g95mf49j5zbDoDidAZeAK/7cSlrNjXP
4VI9mHYPZyzLFHDzavccsnuPcYS5VDc9ocnnE9394Dnj9vuES9wJ9Gf374Wtv7se8kFSvyNJHeAy
oR93G5SXMAN99T8rg7EWi/CTfqzlJ2COPTuksHOx//Z6Yela7OMk2pc1R1PJ7Okpx4ap2XZboydC
utqr0ZOYzrSfxfSFr7wrh/uOacJ89yib/wFQSwMEFAACAAgADWFuSW0rimOKBQAAXC4AADEAHABz
dG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1hYm9ydC1zdGRlcnIudHh0VVQJAAO5GSpY
mA4qWHV4CwABBPUBAAAEFAAAAO1aSW/iSBS+58RPqFuDNJGM8cotgUSDNBp6Jum5l+0CPDFlpmyS
7sv89n628YarvIDpJq1IyQHz6u3bV2Yxv38i7JWw6dTfETq//5v8tydBOMPUJp5HnJsv1IUni/n9
HIfYwgERUaJbNLhZvB9+zoF+5lNK7ND16WdCHZeuZ54fEKAeK5I+UeDP1Az4r0rKT06nNpfLI/O3
M88lNIykH/NUjHp9YhbO6Zok5xt1GG6xS0eI48gGVsMCJ1035REvGC599V/IckcYjhjdUeeZYRrg
mO2zuyVsOOo9zGKT/BpFHl0GksRnN5g6Hkk/ZyYFIPJ5QxhBGP7HqjJWdVUba2iXZEJk3SOI8dk3
iDLxSJjxSHMyj9+zn+UDl7LmW47GlUfDERpKX/XVaqVaRMYTRxrVuutgciysF88YkiwZmWe6sfrs
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
0PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMEFAACAAgAs2BuSUsbgTWnAAAA0gAAAEYAHABzdG9y
YWdlL3dlYnNxbC9jaGFuZ2UtdmVyc2lvbi1uby1jcmFzaC1vbi1wcmVmbGlnaHQtZmFpbHVyZS1z
dGRlcnIudHh0VVQJAAMSGSpY6w0qWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBB
tCeRQov2nKRbCKS7YZv48/ZW0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIE
hgBFWMqFunHII07qZJJRVdeqDu3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqM
yTPVsruz7/fwe9D6z7WOKAPLWEekA/U3FD+8CsscysUbUEsDBBQAAgAIALNgbkmLNn8dsgAAAEgD
AAAoABwAc3RvcmFnZS93ZWJzcWwvY2hhbmdlLXZlcnNpb24tc3RkZXJyLnR4dFVUCQADEhkqWOwN
Klh1eAsAAQT1AQAABBQAAADtj80KwjAQhO8+xR7bg0YQL0EE0Z5EChXrOUlXCKS7YZv48/Za0Vfw
5G0Gvhn4qqapGw0nMjYgJIaUhYAJPDnBHimZACYnnl6Ny7mHYg7ECQwBirCUE9VyyD0OameSUdX5
qM5o9z6pI2dxOLYtC6oDdzm8sBva7kVaM+B7MoaZi7FYLJclaKjuDmPyTLWsruy7NXwetP7iWkeU
C0tfR6QNdS2KvzwKyxzKSfU3+hv93OgJUEsDBBQAAgAIALRgbklLG4E1pwAAANIAAAAyABwAc3Rv
cmFnZS93ZWJzcWwvY2xvc2UtZHVyaW5nLXN0cmVzcy10ZXN0LXN0ZGVyci50eHRVVAkAAxMZKljs
DSpYdXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR
2wx8M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO
7dkn1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tY
R6QD9TcUP7wKyxzKxRtQSwMEFAACAAgAtGBuSa+IHNetAAAApAEAADQAHABzdG9yYWdlL3dlYnNx
bC9kYXRhYmFzZS1sb2NrLWFmdGVyLXJlbG9hZC1zdGRlcnIudHh0VVQJAAMTGSpY7Q0qWHV4CwAB
BPUBAAAEFAAAAN2PzQrCMBCE732KPbYHjSBeggiiPYkUKuo5SbcQSHfDNqn69v6gL+FtBr5vYOq2
bVoNZzI2ICSGlIWACTw5wQEpmQAmJ55NxuU8QLkA4gSGAEVYqkJdOOQBR7U3yaj6elJXtAef1Imz
OHy3HQuqI3c5vLAb2u5FWjPiR3mHuYuxXK5WFWio7w5j8kyNrCf23Qa+C1r/cK0jSs8yNBFpS90F
xfeP0jKHqqj/7tETUEsDBBQAAgAIALRgbklLG4E1pwAAANIAAAApABwAc3RvcmFnZS93ZWJzcWwv
ZW1wdHktc3RhdGVtZW50LXN0ZGVyci50eHRVVAkAAxMZKljtDSpYdXgLAAEE9QEAAAQUAAAANczN
CsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8M1XT1I2GKxkbEBJDykLABJ6c
4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn1XIWh592ZEF14T6HmT3Q9rO0
ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMEFAAC
AAgAtGBuSUsbgTWnAAAA0gAAACoAHABzdG9yYWdlL3dlYnNxbC9leGVjdXRlLXNxbC1hcmdzLXN0
ZGVyci50eHRVVAkAAxQZKljtDSpYdXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0
J5FCi/acpFsIpLthm/jz9lbR2wx8M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSG
AEVYyoW6ccgjTupkklFV16oO7dkn1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJ
M9Wyu7Pv9/B70PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMEFAACAAgAtGBuSUsbgTWnAAAA0gAA
ADIAHABzdG9yYWdlL3dlYnNxbC9leGVjdXRlLXNxbC1yb3dzQWZmZWN0ZWQtc3RkZXJyLnR4dFVU
CQADFBkqWO0NKlh1eAsAAQT1AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwik
u2Gb+PP2VtHbDHwzVdPUjYYrGRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO
6mSSUVXXqg7t2SfVchaHn3ZkQXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ
+s+1jigDy1hHpAP1NxQ/vArLHMrFG1BLAwQUAAIACAC0YG5JSxuBNacAAADSAAAAPwAcAHN0b3Jh
Z2Uvd2Vic3FsL2V4ZWN1dGVzcWwtYWNjZXB0cy1vbmx5LW9uZS1zdGF0ZW1lbnQtc3RkZXJyLnR4
dFVUCQADFBkqWO0NKlh1eAsAAQT1AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pyk
Wwiku2Gb+PP2VtHbDHwzVdPUjYYrGRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpx
yCNO6mSSUVXXqg7t2SfVchaHn3ZkQXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/3
8HvQ+s+1jigDy1hHpAP1NxQ/vArLHMrFG1BLAwQUAAIACAC1YG5JSxuBNacAAADSAAAALgAcAHN0
b3JhZ2Uvd2Vic3FsL2hhc2gtY2hhbmdlLXdpdGgteGhyLXN0ZGVyci50eHRVVAkAAxYZKljvDSpY
dXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8
M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn
1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD
9TcUP7wKyxzKxRtQSwMEFAACAAgAtmBuSa+IHNetAAAApAEAAD8AHABzdG9yYWdlL3dlYnNxbC9t
dWx0aXBsZS1kYXRhYmFzZXMtZ2FyYmFnZS1jb2xsZWN0aW9uLXN0ZGVyci50eHRVVAkAAxcZKljw
DSpYdXgLAAEE9QEAAAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq6jlJtxBId8M2qfr2/qAv
4W0Gvm9g6rZtWg1nMjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYARViqQl045AFHtTfJqPp6
Ule0B5/UibM4fLcdC6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPyTI2sJ/bdBr4LWv9wrSNK
zzI0EWlL3QXF94/SMoeqqP/u0RNQSwMEFAACAAgAtmBuSWikNzmwAAAAdgIAAEQAHABzdG9yYWdl
L3dlYnNxbC9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtc3RkZXJy
LnR4dFVUCQADFxkqWPANKlh1eAsAAQT1AQAABBQAAADtj80KwjAQhO8+xR7bg0YQL0EE0Z5EChXr
OUlXCKS7YZv48/Za0Xfw4G0Gvhn4qqapGw0nMjYgJIaUhYAJPDnBHimZACYnnl6Ny7mHYg7ECQwB
irCUE9VyyD0OameSUdX5qM5o9z6pI2dxOLYtC6oDdzm8sBva7kVaM+B7MoaZi7FYLJclaKjuDmPy
TLWsruy7NXwetP7iWkeUC0tfR6QNdS2KvzwKyxzKSfU3+nmjJ1BLAwQUAAIACAC2YG5JSxuBNacA
AADSAAAALwAcAHN0b3JhZ2Uvd2Vic3FsL211bHRpcGxlLXRyYW5zYWN0aW9ucy1zdGRlcnIudHh0
VVQJAAMXGSpY8A0qWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRb
CKS7YZv48/ZW0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHI
I07qZJJRVdeqDu3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fw
e9D6z7WOKAPLWEekA/U3FD+8CsscysUbUEsDBBQAAgAIALZgbklLG4E1pwAAANIAAAAoABwAc3Rv
cmFnZS93ZWJzcWwvbnVsbC1jYWxsYmFja3Mtc3RkZXJyLnR4dFVUCQADFxkqWPANKlh1eAsAAQT1
AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHbDHwzVdPUjYYr
GRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t2SfVchaHn3Zk
QXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hHpAP1NxQ/vArL
HMrFG1BLAwQUAAIACAC2YG5Jr4gc160AAACkAQAASAAcAHN0b3JhZ2Uvd2Vic3FsL29wZW4tZGF0
YWJhc2UtY3JlYXRpb24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtc3RkZXJyLnR4dFVUCQADGBkq
WPENKlh1eAsAAQT1AQAABBQAAADdj80KwjAQhO99ij22B40gXoIIoj2JFCrqOUm3EEh3wzap+vb+
oC/hbQa+b2Dqtm1aDWcyNiAkhpSFgAk8OcEBKZkAJieeTcblPEC5AOIEhgBFWKpCXTjkAUe1N8mo
+npSV7QHn9SJszh8tx0LqiN3ObywG9ruRVoz4kd5h7mLsVyuVhVoqO8OY/JMjawn9t0Gvgta/3Ct
I0rPMjQRaUvdBcX3j9Iyh6qo/+7RE1BLAwQUAAIACAC2YG5JizZ/HbIAAABIAwAAOQAcAHN0b3Jh
Z2Uvd2Vic3FsL29wZW4tZGF0YWJhc2UtY3JlYXRpb24tY2FsbGJhY2stc3RkZXJyLnR4dFVUCQAD
GBkqWPENKlh1eAsAAQT1AQAABBQAAADtj80KwjAQhO8+xR7bg0YQL0EE0Z5EChXrOUlXCKS7YZv4
8/Za0Vfw5G0Gvhn4qqapGw0nMjYgJIaUhYAJPDnBHimZACYnnl6Ny7mHYg7ECQwBirCUE9VyyD0O
ameSUdX5qM5o9z6pI2dxOLYtC6oDdzm8sBva7kVaM+B7MoaZi7FYLJclaKjuDmPyTLWsruy7NXwe
tP7iWkeUC0tfR6QNdS2KvzwKyxzKSfU3+hv93OgJUEsDBBQAAgAIALZgbklLG4E1pwAAANIAAAA1
ABwAc3RvcmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1lbXB0eS12ZXJzaW9uLXN0ZGVyci50eHRV
VAkAAxgZKljxDSpYdXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsI
pLthm/jz9lbR2wx8M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgj
TupkklFV16oO7dkn1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B7
0PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQSwMEFAACAAgAtmBuSUsbgTWnAAAA0gAAADQAHABzdG9y
YWdlL3dlYnNxbC9vcGVuLWRhdGFiYXNlLWV4cGFuZC1xdW90YS1zdGRlcnIudHh0VVQJAAMYGSpY
8Q0qWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRbCKS7YZv48/ZW
0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHII07qZJJRVdeq
Du3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fwe9D6z7WOKAPL
WEekA/U3FD+8CsscysUbUEsDBBQAAgAIALZgbkn8nM2zBgEAAK4CAAA5ABwAc3RvcmFnZS93ZWJz
cWwvb3Blbi1kYXRhYmFzZS1zZXQtZW1wdHktdmVyc2lvbi1zdGRlcnIudHh0VVQJAAMYGSpY8g0q
WHV4CwABBPUBAAAEFAAAAN2RT0vDQBDF7/0Uc5IE1JRKQRYRxOYkEki0PZbNZiKLm5kw2Y3225uN
fw4VPPXkbWfnzePNb/KyLEoFz6Rrh+AZBL1YHBGcHTxwC432utYDAukOB2hZgMW+WILWOtzvl4ts
yy5MvWwzSbN8V2U7rB+szyoOYjBW9yyYPXIT3CR7w/rbdB6JjyfR5hXl0vR9cr1apaCgZnbwNavU
kVCpBh16LOYoyY+sQhPE+sPnP5yd/+GwiQ6WacqF6SI/JuGDEDCBJSPYIXntQAfPF6M2IXSQLIHY
gyZAEZb0JBxmAFfrdQSQvxvsY8BCbka2ze3vXZTqUaaTdEWPdEfNFsW2hySi+48bfQBQSwMEFAAC
AAgAt2BuSa+IHNetAAAApAEAAEUAHABzdG9yYWdlL3dlYnNxbC9vcGVuLWRhdGFiYXNlLXdoaWxl
LXRyYW5zYWN0aW9uLWluLXByb2dyZXNzLXN0ZGVyci50eHRVVAkAAxkZKljyDSpYdXgLAAEE9QEA
AAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq6jlJtxBId8M2qfr2/qAv4W0Gvm9g6rZtWg1n
MjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYARViqQl045AFHtTfJqPp6Ule0B5/UibM4fLcd
C6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPyTI2sJ/bdBr4LWv9wrSNKzzI0EWlL3QXF94/S
MoeqqP/u0RNQSwMEFAACAAgAt2BuSUsbgTWnAAAA0gAAADkAHABzdG9yYWdlL3dlYnNxbC9wcml2
YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLXN0ZGVyci50eHRVVAkAAxkZKljyDSpYdXgLAAEE
9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8M1XT1I2G
KxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn1XIWh592
ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD9TcUP7wK
yxzKxRtQSwMEFAACAAgAt2BuSWikNzmwAAAAdgIAAEcAHABzdG9yYWdlL3dlYnNxbC9yZWFkLWFu
ZC13cml0ZS10cmFuc2FjdGlvbnMtZG9udC1ydW4tdG9nZXRoZXItc3RkZXJyLnR4dFVUCQADGRkq
WPMNKlh1eAsAAQT1AQAABBQAAADtj80KwjAQhO8+xR7bg0YQL0EE0Z5EChXrOUlXCKS7YZv48/Za
0Xfw4G0Gvhn4qqapGw0nMjYgJIaUhYAJPDnBHimZACYnnl6Ny7mHYg7ECQwBirCUE9VyyD0OameS
UdX5qM5o9z6pI2dxOLYtC6oDdzm8sBva7kVaM+B7MoaZi7FYLJclaKjuDmPyTLWsruy7NXwetP7i
WkeUC0tfR6QNdS2KvzwKyxzKSfU3+nmjJ1BLAwQUAAIACAC3YG5Jr4gc160AAACkAQAAQAAcAHN0
b3JhZ2Uvd2Vic3FsL3JlYWQtdHJhbnNhY3Rpb25zLXJ1bm5pbmctY29uY3VycmVudGx5LXN0ZGVy
ci50eHRVVAkAAxkZKljzDSpYdXgLAAEE9QEAAAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq
6jlJtxBId8M2qfr2/qAv4W0Gvm9g6rZtWg1nMjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYA
RViqQl045AFHtTfJqPp6Ule0B5/UibM4fLcdC6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPy
TI2sJ/bdBr4LWv9wrSNKzzI0EWlL3QXF94/SMoeqqP/u0RNQSwMEFAACAAgAt2BuSUsbgTWnAAAA
0gAAACgAHABzdG9yYWdlL3dlYnNxbC9zcWwtZGF0YS10eXBlcy1zdGRlcnIudHh0VVQJAAMaGSpY
8w0qWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRbCKS7YZv48/ZW
0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHII07qZJJRVdeq
Du3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fwe9D6z7WOKAPL
WEekA/U3FD+8CsscysUbUEsDBBQAAgAIALdgbkmviBzXrQAAAKQBAABBABwAc3RvcmFnZS93ZWJz
cWwvc3RhdGVtZW50LWVycm9yLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAkA
AxoZKlj0DSpYdXgLAAEE9QEAAAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq6jlJtxBId8M2
qfr2/qAv4W0Gvm9g6rZtWg1nMjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYARViqQl045AFH
tTfJqPp6Ule0B5/UibM4fLcdC6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPyTI2sJ/bdBr4L
Wv9wrSNKzzI0EWlL3QXF94/SMoeqqP/u0RNQSwMEFAACAAgAt2BuSUsbgTWnAAAA0gAAADIAHABz
dG9yYWdlL3dlYnNxbC9zdGF0ZW1lbnQtZXJyb3ItY2FsbGJhY2stc3RkZXJyLnR4dFVUCQADGhkq
WPQNKlh1eAsAAQT1AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2
VtHbDHwzVdPUjYYrGRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXX
qg7t2SfVchaHn3ZkQXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigD
y1hHpAP1NxQ/vArLHMrFG1BLAwQUAAIACAC4YG5Jr4gc160AAACkAQAAQwAcAHN0b3JhZ2Uvd2Vi
c3FsL3N0YXRlbWVudC1zdWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRV
VAkAAxsZKlj0DSpYdXgLAAEE9QEAAAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq6jlJtxBI
d8M2qfr2/qAv4W0Gvm9g6rZtWg1nMjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYARViqQl04
5AFHtTfJqPp6Ule0B5/UibM4fLcdC6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPyTI2sJ/bd
Br4LWv9wrSNKzzI0EWlL3QXF94/SMoeqqP/u0RNQSwMEFAACAAgAuGBuSUsbgTWnAAAA0gAAACoA
HABzdG9yYWdlL3dlYnNxbC9zdWNjZXNzLWNhbGxiYWNrLXN0ZGVyci50eHRVVAkAAxsZKlj1DSpY
dXgLAAEE9QEAAAQUAAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8
M1XT1I2GKxkbEBJDykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn
1XIWh592ZEF14T6HmT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD
9TcUP7wKyxzKxRtQSwMEFAACAAgAuGBuSUsbgTWnAAAA0gAAAEMAHABzdG9yYWdlL3dlYnNxbC9z
dWNjZXNzLWNhbGxiYWNrLXdoZW4tcGFnZS1kZWZlcnMtbG9hZGluZy1zdGRlcnIudHh0VVQJAAMb
GSpY9Q0qWHV4CwABBPUBAAAEFAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRbCKS7YZv4
8/ZW0dsMfDNV09SNhisZGxASQ8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHII07qZJJR
VdeqDu3ZJ9VyFoefdmRBdeE+h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fwe9D6z7WO
KAPLWEekA/U3FD+8CsscysUbUEsDBBQAAgAIALhgbklLG4E1pwAAANIAAAApABwAc3RvcmFnZS93
ZWJzcWwvdGVzdC1hdXRob3JpemVyLXN0ZGVyci50eHRVVAkAAxwZKlj2DSpYdXgLAAEE9QEAAAQU
AAAANczNCsIwEATgu0+xx/agEcRLEEG0J5FCi/acpFsIpLthm/jz9lbR2wx8M1XT1I2GKxkbEBJD
ykLABJ6c4IiUTACTEy/vxuU8QrEG4gSGAEVYyoW6ccgjTupkklFV16oO7dkn1XIWh592ZEF14T6H
mT3Q9rO0ZsLv5BNWLsZis92WoKF6OozJM9Wyu7Pv9/B70PrPtY4oA8tYR6QD9TcUP7wKyxzKxRtQ
SwMEFAACAAgAuGBuSUsbgTWnAAAA0gAAAD4AHABzdG9yYWdlL3dlYnNxbC90cmFuc2FjdGlvbi1j
YWxsYmFjay1leGNlcHRpb24tY3Jhc2gtc3RkZXJyLnR4dFVUCQADHBkqWPYNKlh1eAsAAQT1AQAA
BBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHbDHwzVdPUjYYrGRsQ
EkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t2SfVchaHn3ZkQXXh
PoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hHpAP1NxQ/vArLHMrF
G1BLAwQUAAIACAC4YG5Jr4gc160AAACkAQAAPQAcAHN0b3JhZ2Uvd2Vic3FsL3RyYW5zYWN0aW9u
LWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAkAAxwZKlj2DSpYdXgLAAEE9QEA
AAQUAAAA3Y/NCsIwEITvfYo9tgeNIF6CCKI9iRQq6jlJtxBId8M2qfr2/qAv4W0Gvm9g6rZtWg1n
MjYgJIaUhYAJPDnBASmZACYnnk3G5TxAuQDiBIYARViqQl045AFHtTfJqPp6Ule0B5/UibM4fLcd
C6ojdzm8sBva7kVaM+JHeYe5i7FcrlYVaKjvDmPyTI2sJ/bdBr4LWv9wrSNKzzI0EWlL3QXF94/S
MoeqqP/u0RNQSwMEFAACAAgAuWBuSa+IHNetAAAApAEAAEMAHABzdG9yYWdlL3dlYnNxbC90cmFu
c2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1zdGRlcnIudHh0VVQJAAMdGSpY
9w0qWHV4CwABBPUBAAAEFAAAAN2PzQrCMBCE732KPbYHjSBeggiiPYkUKuo5SbcQSHfDNqn69v6g
L+FtBr5vYOq2bVoNZzI2ICSGlIWACTw5wQEpmQAmJ55NxuU8QLkA4gSGAEVYqkJdOOQBR7U3yaj6
elJXtAef1ImzOHy3HQuqI3c5vLAb2u5FWjPiR3mHuYuxXK5WFWio7w5j8kyNrCf23Qa+C1r/cK0j
Ss8yNBFpS90FxfeP0jKHqqj/7tETUEsDBBQAAgAIALlgbklLG4E1pwAAANIAAAA0ABwAc3RvcmFn
ZS93ZWJzcWwvdHJhbnNhY3Rpb24tZXJyb3ItY2FsbGJhY2stc3RkZXJyLnR4dFVUCQADHRkqWPcN
Klh1eAsAAQT1AQAABBQAAAA1zM0KwjAQBOC7T7HH9qARxEsQQbQnkUKL9pykWwiku2Gb+PP2VtHb
DHwzVdPUjYYrGRsQEkPKQsAEnpzgiJRMAJMTL+/G5TxCsQbiBIYARVjKhbpxyCNO6mSSUVXXqg7t
2SfVchaHn3ZkQXXhPoeZPdD2s7Rmwu/kE1YuxmKz3ZagoXo6jMkz1bK7s+/38HvQ+s+1jigDy1hH
pAP1NxQ/vArLHMrFG1BLAwQUAAIACAC5YG5JSxuBNacAAADSAAAALwAcAHN0b3JhZ2Uvd2Vic3Fs
L3RyYW5zYWN0aW9uLXByb3RvdHlwZS1zdGRlcnIudHh0VVQJAAMdGSpY9w0qWHV4CwABBPUBAAAE
FAAAADXMzQrCMBAE4LtPscf2oBHESxBBtCeRQov2nKRbCKS7YZv48/ZW0dsMfDNV09SNhisZGxAS
Q8pCwASenOCIlEwAkxMv78blPEKxBuIEhgBFWMqFunHII07qZJJRVdeqDu3ZJ9VyFoefdmRBdeE+
h5k90PaztGbC7+QTVi7GYrPdlqChejqMyTPVsruz7/fwe9D6z7WOKAPLWEekA/U3FD+8CsscysUb
UEsDBBQAAgAIALlgbkmviBzXrQAAAKQBAABFABwAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24t
c3VjY2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1zdGRlcnIudHh0VVQJAAMeGSpY+A0qWHV4
CwABBPUBAAAEFAAAAN2PzQrCMBCE732KPbYHjSBeggiiPYkUKuo5SbcQSHfDNqn69v6gL+FtBr5v
YOq2bVoNZzI2ICSGlIWACTw5wQEpmQAmJ55NxuU8QLkA4gSGAEVYqkJdOOQBR7U3yaj6elJXtAef
1ImzOHy3HQuqI3c5vLAb2u5FWjPiR3mHuYuxXK5WFWio7w5j8kyNrCf23Qa+C1r/cK0jSs8yNBFp
S90FxfeP0jKHqqj/7tETUEsDBAoAAAAAAF1abkkAAAAAAAAAAAAAAAAHABwAdGFibGVzL1VUCQAD
IQ4qWEIaKlh1eAsAAQT1AQAABBQAAABQSwMEFAACAAgA1GBuSULPbuNDAwAAWBMAADMAHAB0YWJs
ZXMvdGFibGUtc2VjdGlvbi1vdmVyZmxvdy1jbGlwLWNyYXNoLXN0ZGVyci50eHRVVAkAA1AZKlgh
DipYdXgLAAEE9QEAAAQUAAAA7VZdT9swFH3vr7jiYbIHIU6TJk40IdHysQoGUkEwNO3BTW4hI42r
JAX6st8+Jw2Mtkn5EOu0iT5UtZ2ec889N9bZ7fWOex6MZJppkZjIceZBECbZBBKMA0wwISlt6Gcy
Gg8x1XdEJvTd8xP9HPsHYaafyHHiY77qyAT1kbhEfS8RQzwL8XbTH41I07ApeCDGmYTyMc/rFdin
CeIRYpAeFsSdK/SvMfG8n8uOCfU8ImIZT4ZynIIfiTRVW3KEicikOia+jNNsnuu4/wP9DD5QKI4b
DdKmkfSvddKlcRTGqHfJEc1/aP18fwPINu2nSnamFIXkK8VAJz2KkcjCG9RPstAnB3SinttTQGoz
vlS/j+kNJoNI3qrCwtEGbKtCyQXNS1Wn+xTjvEwMNuBKpOSQigkm6qBD5VBZEBYnZJ3uFA6k2STC
R+upP422pmkX+4caaBrAVF3ebQDCNhnbgPybAnF4q1jabLpx76e2Rdid0Wza3BRqv4DTtBIO4PPp
l8MStZ03og621axCtQOh+NR+LAMs9/xW0ELxwKTdMwG0j3cu7rlkMFFUvMDmJZXtFkvTrqNyA75A
ZRu8ggpgp3u2VNeTZGKwqMvGGbL1j/BCOoPX0Vn2Ip3TUnvTMdC2vsUyGYoI/KswCr6XYzEjOf+U
75LoRzhfg/FoMVuA6biG6w4WpwMq9BXYJ+rtCmX8fAql0W8ZvEJjv2xphZg5QT15+3xCy7DcvsPZ
UvAZ+A5G0QsEMZM7rsUqh6+6c5WTsbRlwm6aMy0zHTNwGZtRtb6o5xUzyEzfbjm8dt60OpU9KbNu
cae25d08J3/MWPBw1w9cs56/nghgSnOKd9lzqKymw3xWNe0mtwa2kpqMY5L/h8IaW2t0c9bFjgJ8
GqU4DuRW2dxpFfOggcNcbs2ahTY6yOt72q328LePHTmOM0xqBTzgphgNau6Eqokw+HNHImiyWkte
43x+g7+Q5nW+29W+C2OJ79qrXMcK1wf5K9qtu3ieNDevsrH7ntX+06zGGfsTWe0edhVZjVsrzGpP
kr1tVivp3rPae1b7a1lt6QyuKqv5rmU0xcqymgJ+z2r1We3JkXjDrJY7jw5bTVYrrpp/O6v9AlBL
AwQUAAIACABUYW5JT5WIppECAAA3EgAAGQAcAHdwdHdrX3Byb2Nlc3NfbG9nLm91dC50eHRVVAkA
A0AaKli5CypYdXgLAAEE9QEAAAQUAAAAzZdbb9owFMff+RR+mFTYRi40dBDtojIKrbR102i1h7Ei
kxyGR7Aj2ynNt58NZQyJpCSEdA9IUZTfufzP8TGne9G57bsLGNfDAMsJ4/O6BCGF22eE/kKSoUgA
ChmXqGk3LafSzQY0kwHK5PlEAn/XBQ/ZDrLbrtVynQZqWPYZ6n++qVSurntfdqG3QvuCByKkfpgy
IZEHXCYA9QBH1JsCd6dShq+X0bmtlmWpR+K7Dadpn2VE7Q36ZoXOmT8KY2VAMG8G0hASUx8HjILx
HcaD5csB8Htl6iMHLAGtPkSMuqh6qmJRNk9O1r/akwEthHiMZyn0JqDmHugj6bStf1Nx9lJhDbcd
53TDtoqQobFbhQxGO4T66ZLmMnZ4YIMZCdE4RhNMgoiDi4BzxqtOS5k7930OQiAcKEn8GBGqT5Fy
knh4vrFISRdiqQ6Qiu/OrBovay8yB/VJnSCghem1X2NnSmpohLFKLCODBRFZqRxeaDw0FozPgA+N
3yK7gVypaadTOQ9yq3KUc3pkqdcq50y85EIJLZymDqpuoaOvnFZJG5gZIvjw9a0IwXv/4878+apm
SsYCUUjflDK0Cx7CJfZ6PqGL6fb90eFI/9fL0RBHa6usCvOIUuBmFPpqsA5Hc0zJRH2fVcMSy7UV
d1aPz1uw/0DyZ1HvCHlvZZC0nA0k5qu1TO0KaNltXA03FDAPB3pVW+5Ph+HWAbheW1LW2IsbZF5R
Hx7A73bMGcQjQu9xQHx92JO5HovU1TdVQz5QDnskgMvVczLSsCyU7g5Vr9WFUUPW3vGKKNS7mRr8
TyDq6mIR90CY+uUUc6ruMg4HwKlYDnnKQXYUYaMhquouck1zu/mSC5Zaqr+u0rUv02led38AUEsB
Ah4DFAACAAgAVGFuSVdAxENKTQAAHCwBACIAGAAAAAAAAQAAAKSBAAAAAER1bXBSZW5kZXJUcmVl
LTIzMTk1LWNyYXNoLWxvZy50eHRVVAUAA0AaKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABU
YW5JBOKuIRdRAABmiQEAIgAYAAAAAAABAAAApIGmTQAARHVtcFJlbmRlclRyZWUtMjMyMTEtY3Jh
c2gtbG9nLnR4dFVUBQADQBoqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFBhbkkAAAAAAAAA
AAAAAAALABgAAAAAAAAAEADtQRmfAABfd3B0X2NlcnRzL1VUBQADOBoqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIABVZbkmeVCgRAgkAADoRAAAVABgAAAAAAAEAAACkgV6fAABfd3B0X2NlcnRz
LzAxRTVDMS5wZW1VVAUAA7oLKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAVWW5JvsccMtwJ
AAA7EgAAFQAYAAAAAAABAAAApIGvqAAAX3dwdF9jZXJ0cy8wMUU1QzIucGVtVVQFAAO6CypYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAFVluSZ5UKBECCQAAOhEAABUAGAAAAAAAAQAAAKSB2rIA
AF93cHRfY2VydHMvY2FjZXJ0LnBlbVVUBQADugsqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ABVZbkkTcwqgRAUAANcGAAAUABgAAAAAAAEAAACkgSu8AABfd3B0X2NlcnRzL2Nha2V5LnBlbVVU
BQADugsqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFBhbkkAAAAAAAAAAAAAAAAUABgAAAAA
AAAAAACkgb3BAABfd3B0X2NlcnRzL2luZGV4LnR4dFVUBQADOBoqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAgAAABVZbkmYXHl/FQAAABUAAAAZABgAAAAAAAEAAACkgQvCAABfd3B0X2NlcnRzL2lu
ZGV4LnR4dC5hdHRyVVQFAAO6CypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgACAAAAFVluSZhceX8V
AAAAFQAAAB0AGAAAAAAAAQAAAKSBc8IAAF93cHRfY2VydHMvaW5kZXgudHh0LmF0dHIub2xkVVQF
AAO6CypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgACAAAAFVluSQ95V+E3AAAANwAAABgAGAAAAAAA
AQAAAKSB38IAAF93cHRfY2VydHMvaW5kZXgudHh0Lm9sZFVUBQADugsqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIABVZbkkBqDTHCgUAAIsGAAAYABgAAAAAAAEAAACkgWjDAABfd3B0X2NlcnRz
L2xvY2FsaG9zdC5rZXlVVAUAA7oLKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAVWW5Jvscc
MtwJAAA7EgAAGAAYAAAAAAABAAAApIHEyAAAX3dwdF9jZXJ0cy9sb2NhbGhvc3QucGVtVVQFAAO6
CypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgACAAAAUGFuSQ96sFUGAAAABgAAABEAGAAAAAAAAQAA
AKSB8tIAAF93cHRfY2VydHMvc2VyaWFsVVQFAAM4GipYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAC
AAAAFVluSXj/ttIHAAAABwAAABUAGAAAAAAAAQAAAKSBQ9MAAF93cHRfY2VydHMvc2VyaWFsLm9s
ZFVUBQADugsqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAJVgbknGlOGMexMDAPf9HQAOABgA
AAAAAAEAAACkgZnTAABhY2Nlc3NfbG9nLnR4dFVUBQAD2RgqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AwoAAAAAACxZbkkAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQVznAwBjb21wb3NpdGluZy9VVAUA
A+QLKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAcWW5JAAAAAAAAAAAAAAAAFAAYAAAAAAAA
ABAA7UGi5wMAY29tcG9zaXRpbmcvcmVnaW9ucy9VVAUAA8cLKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAcX25JZTBmUKwAAAAUAwAARQAYAAAAAAABAAAApIHw5wMAY29tcG9zaXRpbmcvcmVn
aW9ucy93ZWJraXQtZmxvdy1yZW5kZXJlci1sYXllci1jb21wb3NpdGluZy1zdGRlcnIudHh0VVQF
AAMIFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgALV9uSbTdITDDAAAA8gYAADwAGAAAAAAA
AQAAAKSBG+kDAGNvbXBvc2l0aW5nL3Nob3ctY29tcG9zaXRlZC1pZnJhbWUtb24tYmFjay1idXR0
b24tc3RkZXJyLnR4dFVUBQADJhcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABlZbkkAAAAA
AAAAAAAAAAASABgAAAAAAAAAEADtQVTqAwBjb21wb3NpdGluZy92aWRlby9VVAUAA8ILKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAAbX25JudbJ5r4AAADyBgAAMgAYAAAAAAABAAAApIGg6gMA
Y29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tY2xpcC1jaGFuZ2Utc3JjLXN0ZGVyci50eHRVVAUAAwUX
Klh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAcWW5JAAAAAAAAAAAAAAAABwAYAAAAAAAAABAA
7UHK6wMAY3J5cHRvL1VUBQADyAsqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABxZbkkAAAAA
AAAAAAAAAAAOABgAAAAAAAAAEADtQQvsAwBjcnlwdG8vc3VidGxlL1VUBQADyAsqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAwoAAgAAACBfbkkl4NMILAAAACwAAAA+ABgAAAAAAAEAAACkgVPsAwBjcnlw
dG8vc3VidGxlL3JzYS1nZW5lcmF0ZS1rZXktbWFsZm9ybWVkLXBhcmFtZXRlcnMtc3RkZXJyLnR4
dFVUBQADCxcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACBfbkkwO7ixSwAAAGgAAAA8ABgA
AAAAAAEAAACkgffsAwBjcnlwdG8vc3VidGxlL3JzYS1pbXBvcnQta2V5LW1hbGZvcm1lZC1wYXJh
bWV0ZXJzLXN0ZGVyci50eHRVVAUAAwsXKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAcWW5J
AAAAAAAAAAAAAAAADwAYAAAAAAAAABAA7UG47QMAY3J5cHRvL3dvcmtlcnMvVVQFAAPHCypYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAHFluSQAAAAAAAAAAAAAAABYAGAAAAAAAAAAQAO1BAe4D
AGNyeXB0by93b3JrZXJzL3N1YnRsZS9VVAUAA8cLKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAIA
AAAdX25JJeDTCCwAAAAsAAAAMQAYAAAAAAABAAAApIFR7gMAY3J5cHRvL3dvcmtlcnMvc3VidGxl
L3JzYS1nZW5lcmF0ZS1rZXktc3RkZXJyLnR4dFVUBQADCRcqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AwoAAAAAABxZbkkAAAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQejuAwBjc3MzL1VUBQADyAsqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABxZbkkAAAAAAAAAAAAAAAANABgAAAAAAAAAEADtQSfv
AwBjc3MzL2ZsZXhib3gvVVQFAAPICypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAHV9uSQAA
AAAAAAAAAAAAABMAGAAAAAAAAAAQAO1Bbu8DAGNzczMvZmxleGJveC9jc3N3Zy9VVAUAAwoXKlh1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAcWW5JAAAAAAAAAAAAAAAAHgAYAAAAAAAAABAA7UG7
7wMAY3NzMy9mbGV4Ym94L2Nzc3dnL2ZsZXgtbGluZXMvVVQFAAPICypYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAHFluSdMWNnWsAAAAFAMAAEwAGAAAAAAAAQAAAKSBE/ADAGNzczMvZmxleGJv
eC9jc3N3Zy9mbGV4LWxpbmVzL211bHRpLWxpbmUtd3JhcC1yZXZlcnNlLXJvdy1yZXZlcnNlLXN0
ZGVyci50eHRVVAUAA8gLKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAAdX25JAAAAAAAAAAAA
AAAAGQAYAAAAAAAAABAA7UFF8QMAY3NzMy9mbGV4Ym94L2Nzc3dnL29yZGVyL1VUBQADChcqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAB1fbkl0I5u1rAAAABQDAAA6ABgAAAAAAAEAAACkgZjx
AwBjc3MzL2ZsZXhib3gvY3Nzd2cvb3JkZXIvb3JkZXItd2l0aC1yb3ctcmV2ZXJzZS1zdGRlcnIu
dHh0VVQFAAMKFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAJlluSQAAAAAAAAAAAAAAAA0A
GAAAAAAAAAAQAO1BuPIDAGRpc3BsYXlsaXN0cy9VVAUAA9gLKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAnX25Jo1f96FAAAACOAAAAMgAYAAAAAAABAAAApIH/8gMAZGlzcGxheWxpc3RzL2V4
dGVudC1pbmNsdWRlcy10cmFuc2Zvcm1zLXN0ZGVyci50eHRVVAUAAxkXKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAnX25J8paV1UcAAABJAAAAKQAYAAAAAAABAAAApIG78wMAZGlzcGxheWxp
c3RzL2xheWVyLWRpc3BheS1saXN0LXN0ZGVyci50eHRVVAUAAxkXKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAAA5WW5JAAAAAAAAAAAAAAAACAAYAAAAAAAAABAA7UFl9AMAZWRpdGluZy9VVAUA
A/4LKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAA4WW5JAAAAAAAAAAAAAAAAFAAYAAAAAAAA
ABAA7UGn9AMAZWRpdGluZy9leGVjQ29tbWFuZC9VVAUAA/wLKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAA4X25Jd/ZNYjIDAABUGAAAMwAYAAAAAAABAAAApIH19AMAZWRpdGluZy9leGVjQ29t
bWFuZC9pbmRlbnQtYmxvY2staW4tbGlzdC1zdGRlcnIudHh0VVQFAAM7FypYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DCgAAAAAAS1luSQAAAAAAAAAAAAAAABMAGAAAAAAAAAAQAO1BlPgDAGVkaXRpbmcv
cGFzdGVib2FyZC9VVAUAAx0MKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA4X25JfqnxIOkA
AACCAQAAMAAYAAAAAAABAAAApIHh+AMAZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktcmVzb2x2ZXMt
dXJscy1zdGRlcnIudHh0VVQFAAM7FypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgASF9uSVcY
E0naAAAAUAEAACwAGAAAAAAAAQAAAKSBNPoDAGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3Bs
dWdpbi1zdGRlcnIudHh0VVQFAANXFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgASF9uSVcY
E0naAAAAUAEAADIAGAAAAAAAAQAAAKSBdPsDAGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3Bs
dWdpbi14aHRtbC1zdGRlcnIudHh0VVQFAANXFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
SV9uSXdNix3jAAAAdwEAACwAGAAAAAAAAQAAAKSBuvwDAGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0
ZS1ub3NjcmlwdC1zdGRlcnIudHh0VVQFAANZFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
SF9uSUouPjDiAAAAewEAADIAGAAAAAAAAQAAAKSBA/4DAGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0
ZS1ub3NjcmlwdC14aHRtbC1zdGRlcnIudHh0VVQFAANYFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAOmFuSWFd8g8HDgAAoHMAAA0AGAAAAAAAAQAAAKSBUf8DAGVycm9yX2xvZy50eHRVVAUA
Aw8aKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACdWW5JAAAAAAAAAAAAAAAABQAYAAAAAAAA
ABAA7UGfDQQAZmFzdC9VVAUAA7oMKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABQX25JAAAA
AAAAAAAAAAAADAAYAAAAAAAAABAA7UHeDQQAZmFzdC9jYW52YXMvVVQFAANoFypYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAUF9uSffcXjyxAAAA3gMAAEwAGAAAAAAAAQAAAKSBJA4EAGZhc3Qv
Y2FudmFzL2NhbnZhcy1jc3Mtc2l6ZS1hZnRlci1oZWlnaHQtY2hhbmdlLXdpdGgtZGlzcGxheS1m
bGV4LXN0ZGVyci50eHRVVAUAA2gXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABWX25Jg+mb
A4YAAAAaAQAAJgAYAAAAAAABAAAApIFbDwQAZmFzdC9jYW52YXMvY2FudmFzLWxpbmVEYXNoLXN0
ZGVyci50eHRVVAUAA3MXKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAC1WW5JAAAAAAAAAAAA
AAAACQAYAAAAAAAAABAA7UFBEAQAZmFzdC9jc3MvVVQFAAPmDCpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DCgAAAAAARlluSQAAAAAAAAAAAAAAABEAGAAAAAAAAAAQAO1BhBAEAGZhc3QvY3NzL2NvbnRl
bnQvVVQFAAMTDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgARF9uSX/FM4fIAwAA+Q0AADUA
GAAAAAAAAQAAAKSBzxAEAGZhc3QvY3NzL2NvbnRlbnQvcXVvdGUtY3Jhc2gtd2hlbi1mbG9hdGlu
Zy1zdGRlcnIudHh0VVQFAANPFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAL2BuSXoAvoqx
AAAAzgEAADYAGAAAAAAAAQAAAKSBBhUEAGZhc3QvY3NzL3BlcnNwZWN0aXZlLW9yaWdpbi1pbml0
aWFsLWluaGVyaXQtc3RkZXJyLnR4dFVUBQADGhgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AEdZbkkAAAAAAAAAAAAAAAAbABgAAAAAAAAAEADtQScWBABmYXN0L2Nzcy1nZW5lcmF0ZWQtY29u
dGVudC9VVAUAAxUMKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABEX25JhHtMm/gCAADJCAAA
SQAYAAAAAAABAAAApIF8FgQAZmFzdC9jc3MtZ2VuZXJhdGVkLWNvbnRlbnQvbWlzc2luZy1xdW90
ZXMtd2l0aC1keW5hbWljLWNvbnRlbnQtc3RkZXJyLnR4dFVUBQADUBcqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAwoAAAAAAFJZbkkAAAAAAAAAAAAAAAAJABgAAAAAAAAAEADtQfcZBABmYXN0L2RvbS9V
VAUAAysMKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABSWW5JAAAAAAAAAAAAAAAAGgAYAAAA
AAAAABAA7UE6GgQAZmFzdC9kb20vTXV0YXRpb25PYnNlcnZlci9VVAUAAysMKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACABQX25JSxuBNacAAADSAAAAPwAYAAAAAAABAAAApIGOGgQAZmFzdC9k
b20vTXV0YXRpb25PYnNlcnZlci9kYXRhYmFzZS1jYWxsYmFjay1kZWxpdmVyeS1zdGRlcnIudHh0
VVQFAANnFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAWFluSQAAAAAAAAAAAAAAAAsAGAAA
AAAAAAAQAO1BrhsEAGZhc3QvZm9ybXMvVVQFAAM4DCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAVV9uSS5f2O97AQAA+DkAADMAGAAAAAAAAQAAAKSB8xsEAGZhc3QvZm9ybXMvVmFsaWRpdHlT
dGF0ZS1wYXR0ZXJuTWlzbWF0Y2gtc3RkZXJyLnR4dFVUBQADcRcqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAJ1ZbkkAAAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQdsdBABmYXN0L2ZyYW1lcy9V
VAUAA7oMKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAZYG5JSxuBNacAAADSAAAALwAYAAAA
AAABAAAApIEhHgQAZmFzdC9mcmFtZXMvc2FuZGJveGVkLWlmcmFtZS1zdG9yYWdlLXN0ZGVyci50
eHRVVAUAA/EXKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAABiWW5JAAAAAAAAAAAAAAAADQAY
AAAAAAAAABAA7UExHwQAZmFzdC9oaXN0b3J5L1VUBQADSAwqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAF1fbklLG4E1pwAAANIAAABAABgAAAAAAAEAAACkgXgfBABmYXN0L2hpc3RvcnkvcGFn
ZS1jYWNoZS13ZWJkYXRhYmFzZS1uby10cmFuc2FjdGlvbi1kYi1zdGRlcnIudHh0VVQFAAOBFypY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAalluSQAAAAAAAAAAAAAAAAwAGAAAAAAAAAAQAO1B
mSAEAGZhc3QvaW1hZ2VzL1VUBQADVwwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGZfbkkh
j704MgAAADMAAAAsABgAAAAAAAEAAACkgd8gBABmYXN0L2ltYWdlcy9wZGYtYXMtaW1hZ2UtY3Jv
cC1ib3gtc3RkZXJyLnR4dFVUBQADkBcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAHJZbkkA
AAAAAAAAAAAAAAAMABgAAAAAAAAAEADtQXchBABmYXN0L2lubGluZS9VVAUAA2cMKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACABuX25JsUn1sTwDAAAmCQAAOQAYAAAAAAABAAAApIG9IQQAZmFz
dC9pbmxpbmUvcXVvdGF0aW9uLXRleHQtY2hhbmdlcy1keW5hbWljYWxseS1zdGRlcnIudHh0VVQF
AAOfFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAgFluSQAAAAAAAAAAAAAAAAkAGAAAAAAA
AAAQAO1BbCUEAGZhc3QveHNsL1VUBQADfwwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHdf
bkly/WXyhQAAAOkAAAAlABgAAAAAAAEAAACkga8lBABmYXN0L3hzbC90cmFuc2Zvcm0teGhyLWRv
Yy1zdGRlcnIudHh0VVQFAAOyFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAeF9uSc4JKAKN
AAAA8AAAACcAGAAAAAAAAQAAAKSBkyYEAGZhc3QveHNsL3hzbHQtYmFkLWltcG9ydC11cmktc3Rk
ZXJyLnR4dFVUBQADsxcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHhfbknPj2YOUAAAAKAA
AAAkABgAAAAAAAEAAACkgYEnBABmYXN0L3hzbC94c2x0LWNvbnRlbnRUeXBlLXN0ZGVyci50eHRV
VAUAA7MXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAB6X25JgUp3rUsAAACsAAAANAAYAAAA
AAABAAAApIEvKAQAZmFzdC94c2wveHNsdC10cmFuc2Zvcm0tdG8tZnJhZ21lbnQtY3Jhc2gtc3Rk
ZXJyLnR4dFVUBQADtxcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFVhbkmlqGtWgAEAAHEC
AAARABgAAAAAAAEAAACkgegoBABmdWxsX3Jlc3VsdHMuanNvblVUBQADQRoqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAAIFZbkkAAAAAAAAAAAAAAAAFABgAAAAAAAAAEADtQbMqBABodHRwL1VU
BQADgQwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAAtgbkkAAAAAAAAAAAAAAAALABgAAAAA
AAAAEADtQfIqBABodHRwL3Rlc3RzL1VUBQAD1hcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAA
AIVZbkkAAAAAAAAAAAAAAAARABgAAAAAAAAAEADtQTcrBABodHRwL3Rlc3RzL2NhY2hlL1VUBQAD
iQwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAH1fbkkWQSdT7gAAAIkEAAAwABgAAAAAAAEA
AACkgYIrBABodHRwL3Rlc3RzL2NhY2hlL21lbW9yeS1jYWNoZS1wcnVuaW5nLXN0ZGVyci50eHRV
VAUAA74XKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAAYG5Jv23jM4YAAADAAAAAPQAYAAAA
AAABAAAApIHaLAQAaHR0cC90ZXN0cy9jYWNoZS9uZXR3b3JrLWVycm9yLWR1cmluZy1yZXZhbGlk
YXRpb24tc3RkZXJyLnR4dFVUBQADvxcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAIFZbkkA
AAAAAAAAAAAAAAASABgAAAAAAAAAEADtQdctBABodHRwL3Rlc3RzL2NhbnZhcy9VVAUAA4EMKlh1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACBWW5JAAAAAAAAAAAAAAAAGAAYAAAAAAAAABAA7UEj
LgQAaHR0cC90ZXN0cy9jYW52YXMvd2ViZ2wvVVQFAAOBDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAel9uSaESnOYQAQAAoAIAADsAGAAAAAAAAQAAAKSBdS4EAGh0dHAvdGVzdHMvY2FudmFz
L3dlYmdsL29yaWdpbi1jbGVhbi1jb25mb3JtYW5jZS1zdGRlcnIudHh0VVQFAAO3FypYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DCgAAAAAAglluSQAAAAAAAAAAAAAAAC8AGAAAAAAAAAAQAO1B+i8EAGh0
dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvVVQFAAOEDCpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAfF9uSWXRGYh/AAAAlQAAAFEAGAAAAAAAAQAAAKSBYzAE
AGh0dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1o
ZWFkZXItc3RyaXBwZWQtc3RkZXJyLnR4dFVUBQADuxcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAHtfbkll0RmIfwAAAJUAAABqABgAAAAAAAEAAACkgW0xBABodHRwL3Rlc3RzL2NvbnRlbnRk
aXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXItaGVhZGVyLXN0cmlwcGVkLXdpdGgt
bWV0YS1yZWZlcmVyLWFsd2F5cy1zdGRlcnIudHh0VVQFAAO5FypYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAe19uSWXRGYh/AAAAlQAAAGsAGAAAAAAAAQAAAKSBkDIEAGh0dHAvdGVzdHMvY29u
dGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQt
d2l0aC1tZXRhLXJlZmVyZXItZGVmYXVsdC1zdGRlcnIudHh0VVQFAAO5FypYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAe19uSWXRGYh/AAAAlQAAAGkAGAAAAAAAAQAAAKSBtDMEAGh0dHAvdGVz
dHMvY29udGVudGRpc3Bvc2l0aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3Ry
aXBwZWQtd2l0aC1tZXRhLXJlZmVyZXItbmV2ZXItc3RkZXJyLnR4dFVUBQADuRcqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAHtfbkll0RmIfwAAAJUAAABvABgAAAAAAAEAAACkgdY0BABodHRw
L3Rlc3RzL2NvbnRlbnRkaXNwb3NpdGlvbmF0dGFjaG1lbnRzYW5kYm94L3JlZmVyZXItaGVhZGVy
LXN0cmlwcGVkLXdpdGgtbWV0YS1yZWZlcmVyLW5vLXJlZmVycmVyLXN0ZGVyci50eHRVVAUAA7oX
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAB7X25JZdEZiH8AAACVAAAAfgAYAAAAAAABAAAA
pIH+NQQAaHR0cC90ZXN0cy9jb250ZW50ZGlzcG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZl
cmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1ldGEtcmVmZXJlci1uby1yZWZlcnJlci13aGVuLWRv
d25ncmFkZS1zdGRlcnIudHh0VVQFAAO5FypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAe19u
SWXRGYh/AAAAlQAAAGoAGAAAAAAAAQAAAKSBNTcEAGh0dHAvdGVzdHMvY29udGVudGRpc3Bvc2l0
aW9uYXR0YWNobWVudHNhbmRib3gvcmVmZXJlci1oZWFkZXItc3RyaXBwZWQtd2l0aC1tZXRhLXJl
ZmVyZXItb3JpZ2luLXN0ZGVyci50eHRVVAUAA7oXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAB7X25JZdEZiH8AAACVAAAAbgAYAAAAAAABAAAApIFYOAQAaHR0cC90ZXN0cy9jb250ZW50ZGlz
cG9zaXRpb25hdHRhY2htZW50c2FuZGJveC9yZWZlcmVyLWhlYWRlci1zdHJpcHBlZC13aXRoLW1l
dGEtcmVmZXJlci11bnNhZmUtdXJsLXN0ZGVyci50eHRVVAUAA7oXKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAACBWW5JAAAAAAAAAAAAAAAAHAAYAAAAAAAAABAA7UF/OQQAaHR0cC90ZXN0cy9j
b250ZW50ZmlsdGVyaW5nL1VUBQADgQwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHpfbkla
HtuVhAAAAMAAAAA7ABgAAAAAAAEAAACkgdU5BABodHRwL3Rlc3RzL2NvbnRlbnRmaWx0ZXJpbmcv
YWxsb3ctYWZ0ZXItcmVkaXJlY3Qtc3RkZXJyLnR4dFVUBQADuBcqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAwoAAAAAAIpZbkkAAAAAAAAAAAAAAAAVABgAAAAAAAAAEADtQc46BABodHRwL3Rlc3RzL2lu
c3BlY3Rvci9VVAUAA5QMKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACKWW5JAAAAAAAAAAAA
AAAAHQAYAAAAAAAAABAA7UEdOwQAaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9VVAUAA5QM
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADYG5JGBVFyhMIAADrKwAANwAYAAAAAAABAAAA
pIF0OwQAaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZS10aW1pbmctc3RkZXJy
LnR4dFVUBQADxhcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJRZbkkAAAAAAAAAAAAAAAAR
ABgAAAAAAAAAEADtQfhDBABodHRwL3Rlc3RzL21lZGlhL1VUBQADpwwqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAwoAAAAAAIhZbkkAAAAAAAAAAAAAAAAaABgAAAAAAAAAEADtQUNEBABodHRwL3Rlc3Rz
L21lZGlhL2NsZWFya2V5L1VUBQADkAwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAANgbkmp
eO/4UgEAAH8DAAA5ABgAAAAAAAEAAACkgZdEBABodHRwL3Rlc3RzL21lZGlhL2NsZWFya2V5L2Ns
ZWFyLWtleS1obHMtYWVzMTI4LXN0ZGVyci50eHRVVAUAA8UXKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAACOWW5JAAAAAAAAAAAAAAAAFQAYAAAAAAAAABAA7UFcRgQAaHR0cC90ZXN0cy9tZWRp
YS9obHMvVVQFAAOcDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAA2BuSbMUGIK7AQAA0AQA
AEAAGAAAAAAAAQAAAKSBq0YEAGh0dHAvdGVzdHMvbWVkaWEvaGxzL2hscy1hY2Nlc3NpYmxpdHkt
ZGVzY3JpYmVzLXZpZGVvLXN0ZGVyci50eHRVVAUAA8UXKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAADYG5JVtTSLcgBAABFBQAAOgAYAAAAAAABAAAApIHgSAQAaHR0cC90ZXN0cy9tZWRpYS9o
bHMvaGxzLWF1ZGlvLXRyYWNrcy1oYXMtYXVkaW8tc3RkZXJyLnR4dFVUBQADxRcqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAANgbklG2zAExwEAAPkFAABBABgAAAAAAAEAAACkgRxLBABodHRw
L3Rlc3RzL21lZGlhL2hscy9obHMtYXVkaW8tdHJhY2tzLWxvY2FsZS1zZWxlY3Rpb24tc3RkZXJy
LnR4dFVUBQADxhcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAANgbkmfnY8+xAEAAEUFAAAw
ABgAAAAAAAEAAACkgV5NBABodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtYXVkaW8tdHJhY2tzLXN0
ZGVyci50eHRVVAUAA8YXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAEYG5J0ttXayUBAADe
AwAALAAYAAAAAAABAAAApIGMTwQAaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLXByb2dyZXNzLXN0
ZGVyci50eHRVVAUAA8cXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAEYG5Jq3cHr28BAAAq
BgAAOgAYAAAAAAABAAAApIEXUQQAaHR0cC90ZXN0cy9tZWRpYS9obHMvdmlkZW8tY29udHJvbHMt
bGl2ZS1zdHJlYW0tc3RkZXJyLnR4dFVUBQADyBcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AAVgbknow5JDLQMAAKiZAAA8ABgAAAAAAAEAAACkgfpSBABodHRwL3Rlc3RzL21lZGlhL2hscy92
aWRlby1kdXJhdGlvbi1hY2Nlc3NpYmlsaXR5LXN0ZGVyci50eHRVVAUAA8oXKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAADYG5J2qDUMsoAAAA3AgAAMgAYAAAAAAABAAAApIGdVgQAaHR0cC90
ZXN0cy9tZWRpYS9tZWRpYS1kb2N1bWVudC1yZWZlcmVyLXN0ZGVyci50eHRVVAUAA8UXKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAADYG5JeK/U++QAAACsAgAAKgAYAAAAAAABAAAApIHTVwQA
aHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1kb2N1bWVudC1zdGRlcnIudHh0VVQFAAPGFypYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgABGBuSfCJXanoAAAAxgMAADkAGAAAAAAAAQAAAKSBG1kEAGh0
dHAvdGVzdHMvbWVkaWEvbWVkaWEtcGxheS1zdHJlYW0tY2h1bmtlZC1pY3ktc3RkZXJyLnR4dFVU
BQADyBcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAIlZbkkAAAAAAAAAAAAAAAAeABgAAAAA
AAAAEADtQXZaBABodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9VVAUAA5EMKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAADYG5JA6TuguwAAABbAQAAXAAYAAAAAAABAAAApIHOWgQAaHR0
cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS10aGVuLXNlZWstYmFj
ay13aXRoLXJlbW90ZS1jb250cm9sLXN0ZGVyci50eHRVVAUAA8YXKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAACLWW5JAAAAAAAAAAAAAAAAJwAYAAAAAAAAABAA7UFQXAQAaHR0cC90ZXN0cy9t
ZWRpYS9tb2Rlcm4tbWVkaWEtY29udHJvbHMvVVQFAAOVDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAAi1luSQAAAAAAAAAAAAAAADkAGAAAAAAAAAAQAO1BsVwEAGh0dHAvdGVzdHMvbWVkaWEv
bW9kZXJuLW1lZGlhLWNvbnRyb2xzL3NraXAtYmFjay1zdXBwb3J0L1VUBQADlQwqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAARgbkmtpX8cpgIAADMfAABiABgAAAAAAAEAAACkgSRdBABodHRw
L3Rlc3RzL21lZGlhL21vZGVybi1tZWRpYS1jb250cm9scy9za2lwLWJhY2stc3VwcG9ydC9za2lw
LWJhY2stc3VwcG9ydC1idXR0b24tY2xpY2stc3RkZXJyLnR4dFVUBQADxxcqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAAI1ZbkkAAAAAAAAAAAAAAAA2ABgAAAAAAAAAEADtQWZgBABodHRwL3Rl
c3RzL21lZGlhL21vZGVybi1tZWRpYS1jb250cm9scy9zdGF0dXMtc3VwcG9ydC9VVAUAA5kMKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADYG5JZ3Dl/WMBAABbBQAAXgAYAAAAAAABAAAApIHW
YAQAaHR0cC90ZXN0cy9tZWRpYS9tb2Rlcm4tbWVkaWEtY29udHJvbHMvc3RhdHVzLXN1cHBvcnQv
c3RhdHVzLXN1cHBvcnQtbGl2ZS1icm9hZGNhc3Qtc3RkZXJyLnR4dFVUBQADxhcqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAAVgbkmkoTDIgwAAAMAAAABXABgAAAAAAAEAAACkgdFiBABodHRw
L3Rlc3RzL21lZGlhL21vZGVybi1tZWRpYS1jb250cm9scy9zdGF0dXMtc3VwcG9ydC9zdGF0dXMt
c3VwcG9ydC1sb2FkaW5nLXN0ZGVyci50eHRVVAUAA8oXKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAAEYG5JqKOFJOwAAABfAQAALQAYAAAAAAABAAAApIHlYwQAaHR0cC90ZXN0cy9tZWRpYS9w
ZGYtc2VydmVkLWFzLXBkZi1zdGRlcnIudHh0VVQFAAPIFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgABWBuSYXpn0C/AAAAkgEAAC8AGAAAAAAAAQAAAKSBOGUEAGh0dHAvdGVzdHMvbWVkaWEv
cmVsb2FkLWFmdGVyLWRpYWxvZy1zdGRlcnIudHh0VVQFAAPKFypYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgABWBuSZnp4dtHAQAAdAIAAC8AGAAAAAAAAQAAAKSBYGYEAGh0dHAvdGVzdHMvbWVk
aWEvdGV4dC1zZXJ2ZWQtYXMtdGV4dC1zdGRlcnIudHh0VVQFAAPKFypYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgABmBuSRJvxy5jAQAArAYAACYAGAAAAAAAAQAAAKSBEGgEAGh0dHAvdGVzdHMv
bWVkaWEvdmlkZW8tYXV0aC1zdGRlcnIudHh0VVQFAAPLFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgABmBuSc5bgG/iAAAArAIAAC0AGAAAAAAAAQAAAKSB02kEAGh0dHAvdGVzdHMvbWVkaWEv
dmlkZW8tZXJyb3ItYWJvcnQtc3RkZXJyLnR4dFVUBQADzBcqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAAdgbklCDO41EwEAAOMBAAA2ABgAAAAAAAEAAACkgRxrBABodHRwL3Rlc3RzL21lZGlh
L3ZpZGVvLWVycm9yLWRvZXMtbm90LWV4aXN0LXN0ZGVyci50eHRVVAUAA80XKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAIYG5JxGK/p8sAAAAkAwAALAAYAAAAAAABAAAApIGfbAQAaHR0cC90
ZXN0cy9tZWRpYS92aWRlby1sb2FkLXR3aWNlLXN0ZGVyci50eHRVVAUAA88XKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAIYG5JeX8DeOYAAABsAwAALwAYAAAAAAABAAAApIHQbQQAaHR0cC90
ZXN0cy9tZWRpYS92aWRlby1wbGF5LXByb2dyZXNzLXN0ZGVyci50eHRVVAUAA9AXKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAKYG5J4EOIcIMAAADAAAAAPQAYAAAAAAABAAAApIEfbwQAaHR0
cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLWJlZm9yZS1tZXRhLWRhdGEtc3RkZXJyLnR4
dFVUBQAD0xcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAApgbknMcDgdugAAAJIBAAArABgA
AAAAAAEAAACkgRlwBABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXF1ZXJ5LXVybC1zdGRlcnIudHh0
VVQFAAPUFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAC2BuSRyqY4j2AAAAWAUAACoAGAAA
AAAAAQAAAKSBOHEEAGh0dHAvdGVzdHMvbWVkaWEvdmlkZW8tcmVkaXJlY3Qtc3RkZXJyLnR4dFVU
BQAD1RcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAtgbkmnt2fxLwEAAI8DAAArABgAAAAA
AAEAAACkgZJyBABodHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXVzZXJhZ2VudC1zdGRlcnIudHh0VVQF
AAPWFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAABGBuSQAAAAAAAAAAAAAAABUAGAAAAAAA
AAAQAO1BJnQEAGh0dHAvdGVzdHMvbWVzc2FnaW5nL1VUBQADxxcqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAARgbknqziMa2AAAAEoGAABDABgAAAAAAAEAAACkgXV0BABodHRwL3Rlc3RzL21l
c3NhZ2luZy9jcm9zcy1kb21haW4tbWVzc2FnZS1ldmVudC1kaXNwYXRjaC1zdGRlcnIudHh0VVQF
AAPHFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAt1luSQAAAAAAAAAAAAAAABAAGAAAAAAA
AAAQAO1BynUEAGh0dHAvdGVzdHMvbWlzYy9VVAUAA+kMKlh1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAACLWW5JAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UEUdgQAaHR0cC90ZXN0cy9taXNjL2F1
dGhlbnRpY2F0aW9uLXJlZGlyZWN0LTIvVVQFAAOVDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAi1luSU+Jy3SCAAAAFwEAAGAAGAAAAAAAAQAAAKSBeHYEAGh0dHAvdGVzdHMvbWlzYy9hdXRo
ZW50aWNhdGlvbi1yZWRpcmVjdC0yL2F1dGhlbnRpY2F0aW9uLXNlbnQtdG8tcmVkaXJlY3Qtc2Ft
ZS1vcmlnaW4tc3RkZXJyLnR4dFVUBQADlQwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAxg
bklehPRp5gAAAGIBAAAtABgAAAAAAAEAAACkgZR3BABodHRwL3Rlc3RzL21pc2MvY29weS1yZXNv
bHZlcy11cmxzLXN0ZGVyci50eHRVVAUAA9gXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAN
YG5JZBaaK8MAAAD+AAAAPwAYAAAAAAABAAAApIHheAQAaHR0cC90ZXN0cy9taXNjL2RlbGV0ZS1m
cmFtZS1kdXJpbmctcmVhZHlzdGF0ZWNoYW5nZS1zdGRlcnIudHh0VVQFAAPZFypYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgADWBuSVgBGuDEAAAA/gAAAFsAGAAAAAAAAQAAAKSBHXoEAGh0dHAv
dGVzdHMvbWlzYy9kZWxldGUtZnJhbWUtZHVyaW5nLXJlYWR5c3RhdGVjaGFuZ2Utd2l0aC1nYy1h
ZnRlci12aWRlby1yZW1vdmFsLXN0ZGVyci50eHRVVAUAA9kXKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAuYG5JFTU1knoAAAC8AAAAKgAYAAAAAAABAAAApIF2ewQAaHR0cC90ZXN0cy9taXNj
L3hzbHQtYmFkLWltcG9ydC1zdGRlcnIudHh0VVQFAAMXGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAABmBuSQAAAAAAAAAAAAAAABMAGAAAAAAAAAAQAO1BVHwEAGh0dHAvdGVzdHMvcGx1Z2lu
cy9VVAUAA8sXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAGYG5Jx/SxAekAAABQEQAANgAY
AAAAAAABAAAApIGhfAQAaHR0cC90ZXN0cy9wbHVnaW5zL2NyZWF0ZS12OC1zY3JpcHQtb2JqZWN0
cy1zdGRlcnIudHh0VVQFAAPLFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAuVluSQAAAAAA
AAAAAAAAABQAGAAAAAAAAAAQAO1B+n0EAGh0dHAvdGVzdHMvc2VjdXJpdHkvVVQFAAPuDCpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACWBuSZtvNiO7AAAAkgEAAFUAGAAAAAAAAQAAAKSBSH4E
AGh0dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90ZS12aWRlby1ibG9j
a2VkLW5vLWNyb3Nzb3JpZ2luLXN0ZGVyci50eHRVVAUAA9EXKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAJYG5Jy7uveNoAAACsAgAASAAYAAAAAAABAAAApIGSfwQAaHR0cC90ZXN0cy9zZWN1
cml0eS9jYW52YXMtcmVtb3RlLXJlYWQtcmVtb3RlLXZpZGVvLWxvY2FsaG9zdC1zdGRlcnIudHh0
VVQFAAPSFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACWBuSSeYCIsiAQAAFQMAAEcAGAAA
AAAAAQAAAKSB7oAEAGh0dHAvdGVzdHMvc2VjdXJpdHkvY2FudmFzLXJlbW90ZS1yZWFkLXJlbW90
ZS12aWRlby1yZWRpcmVjdC1zdGRlcnIudHh0VVQFAAPSFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAArlluSQAAAAAAAAAAAAAAACoAGAAAAAAAAAAQAO1BkYIEAGh0dHAvdGVzdHMvc2VjdXJp
dHkvY29udGVudFNlY3VyaXR5UG9saWN5L1VUBQAD2AwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAAZgbkkVL7jD1wAAAPgBAABLABgAAAAAAAEAAACkgfWCBABodHRwL3Rlc3RzL3NlY3VyaXR5
L2NvbnRlbnRTZWN1cml0eVBvbGljeS9hdWRpby1yZWRpcmVjdC1hbGxvd2VkLXN0ZGVyci50eHRV
VAUAA8wXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAGYG5JOg3x6OUAAABDAgAATAAYAAAA
AAABAAAApIFRhAQAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvYXVk
aW8tcmVkaXJlY3QtYWxsb3dlZDItc3RkZXJyLnR4dFVUBQADzBcqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAAdgbkmo88OhpgAAAIoBAABYABgAAAAAAAEAAACkgbyFBABodHRwL3Rlc3RzL3Nl
Y3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9ibG9iLXVybC1kb2VzLW5vdC1tYXRjaC1zb3Vy
Y2Utc2VsZi1zdGRlcnIudHh0VVQFAAPNFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAkVlu
SQAAAAAAAAAAAAAAAEQAGAAAAAAAAAAQAO1B9IYEAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVu
dFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvVVQFAAOhDCpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAj1luScIZ7bjaAAAA3wgAAHEAGAAAAAAAAQAAAKSBcocEAGh0
dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3JhZGUtaW5zZWN1cmUt
cmVxdWVzdHMvYmFzaWMtdXBncmFkZS1hZnRlci1yZWRpcmVjdC5odHRwcy1zdGRlcnIudHh0VVQF
AAOdDCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACmBuSVfmUnvoAAAAJgMAAHkAGAAAAAAA
AQAAAKSB94gEAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3VwZ3Jh
ZGUtaW5zZWN1cmUtcmVxdWVzdHMvdXBncmFkZS1pbnNlY3VyZS1hdWRpby12aWRlby1pbi1tYWlu
LWZyYW1lLXN0ZGVyci50eHRVVAUAA9QXKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACQWW5J
AAAAAAAAAAAAAAAAPQAYAAAAAAAAABAA7UGSigQAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50
U2VjdXJpdHlQb2xpY3kvdXNlckFnZW50U2hhZG93RE9NL1VUBQADnwwqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAAhgbkms/O1LJgEAAIYCAABTABgAAAAAAAEAAACkgQmLBABodHRwL3Rlc3Rz
L3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ct
YXVkaW8tc3RkZXJyLnR4dFVUBQAD0BcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAApgbkmI
zJL4uwAAAJIBAABTABgAAAAAAAEAAACkgbyMBABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRT
ZWN1cml0eVBvbGljeS91c2VyQWdlbnRTaGFkb3dET00vYWxsb3ctdmlkZW8tc3RkZXJyLnR4dFVU
BQAD0xcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAApgbkkdb4YUhAAAAMAAAABrABgAAAAA
AAEAAACkgQSOBABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS91c2Vy
QWdlbnRTaGFkb3dET00vZGVmYXVsdC1zcmMtb2JqZWN0LWRhdGEtdXJsLWFsbG93ZWQtc3RkZXJy
LnR4dFVUBQAD0xcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABpgbkmNw02o3QAAAFICAABL
ABgAAAAAAAEAAACkgS2PBABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGlj
eS92aWRlby1yZWRpcmVjdC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAA/MXKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAaYG5JX/X94LwAAACSAQAATAAYAAAAAAABAAAApIGPkAQAaHR0cC90ZXN0
cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdmlkZW8tcmVkaXJlY3QtYWxsb3dlZDIt
c3RkZXJyLnR4dFVUBQAD8xcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABpgbkknu5eV3wAA
AFICAABmABgAAAAAAAEAAACkgdGRBABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0
eVBvbGljeS92aWRlby13aXRoLWh0dHAtdXJsLWFsbG93ZWQtYnktY3NwLW1lZGlhLXNyYy1zdGFy
LXN0ZGVyci50eHRVVAUAA/QXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAaYG5JztQx4IQA
AADAAAAAWQAYAAAAAAABAAAApIFQkwQAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJp
dHlQb2xpY3kvd29ya2VyLWJsb2ItaW5oZXJpdHMtY3NwLWJsb2Nrcy1ldmFsLXN0ZGVyci50eHRV
VAUAA/QXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAcYG5JY6qsbIIAAACoAAAAQAAYAAAA
AAABAAAApIFnlAQAaHR0cC90ZXN0cy9zZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kveHNs
LWFsbG93ZWQtc3RkZXJyLnR4dFVUBQAD+BcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABxg
bkljqqxsggAAAKgAAABSABgAAAAAAAEAAACkgWOVBABodHRwL3Rlc3RzL3NlY3VyaXR5L2NvbnRl
bnRTZWN1cml0eVBvbGljeS94c2wtdW5hZmZlY3RlZC1ieS1zdHlsZS1zcmMtMi1zdGRlcnIudHh0
VVQFAAP4FypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACWBuSeUsfq2DAAAAGgEAADUAGAAA
AAAAAQAAAKSBcZYEAGh0dHAvdGVzdHMvc2VjdXJpdHkvY29ycy1wb3N0LXJlZGlyZWN0LTMwMS1z
dGRlcnIudHh0VVQFAAPSFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAFGBuSa+IHNetAAAA
pAEAADoAGAAAAAAAAQAAAKSBY5cEAGh0dHAvdGVzdHMvc2VjdXJpdHkvY3Jvc3Mtb3JpZ2luLXdl
YnNxbC1hbGxvd2VkLXN0ZGVyci50eHRVVAUAA+gXKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAAUYG5JSxuBNacAAADSAAAAMgAYAAAAAAABAAAApIGEmAQAaHR0cC90ZXN0cy9zZWN1cml0eS9j
cm9zcy1vcmlnaW4td2Vic3FsLXN0ZGVyci50eHRVVAUAA+gXKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAcYG5JsGEiAcAAAACSAQAAPQAYAAAAAAABAAAApIGXmQQAaHR0cC90ZXN0cy9zZWN1
cml0eS9sb2NhbC12aWRlby1zb3VyY2UtZnJvbS1yZW1vdGUtc3RkZXJyLnR4dFVUBQAD+BcqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABxgbkmDT+pVhAAAAMAAAAA6ABgAAAAAAAEAAACkgc6a
BABodHRwL3Rlc3RzL3NlY3VyaXR5L2xvY2FsLXZpZGVvLXNyYy1mcm9tLXJlbW90ZS1zdGRlcnIu
dHh0VVQFAAP4FypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAklluSQAAAAAAAAAAAAAAACEA
GAAAAAAAAAAQAO1BxpsEAGh0dHAvdGVzdHMvc2VjdXJpdHkvbWl4ZWRDb250ZW50L1VUBQADowwq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAtgbkmZYgOs4AAAAD4EAABOABgAAAAAAAEAAACk
gSGcBABodHRwL3Rlc3RzL3NlY3VyaXR5L21peGVkQ29udGVudC9pbnNlY3VyZS1hdWRpby12aWRl
by1pbi1tYWluLWZyYW1lLXN0ZGVyci50eHRVVAUAA9YXKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAALYG5JuyJHtYMAAADAAAAAQgAYAAAAAAABAAAApIGJnQQAaHR0cC90ZXN0cy9zZWN1cml0
eS9taXhlZENvbnRlbnQvaW5zZWN1cmUtY3NzLWluLWlmcmFtZS1zdGRlcnIudHh0VVQFAAPWFypY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAKGBuSUsbgTWnAAAA0gAAAD8AGAAAAAAAAQAAAKSB
iJ4EAGh0dHAvdGVzdHMvc2VjdXJpdHkvc3RvcmFnZS1ibG9ja2luZy1sb29zZW5lZC13ZWJzcWwt
c3RkZXJyLnR4dFVUBQADCxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAChgbklLG4E1pwAA
ANIAAABDABgAAAAAAAEAAACkgaifBABodHRwL3Rlc3RzL3NlY3VyaXR5L3N0b3JhZ2UtYmxvY2tp
bmctc3RyZW5ndGhlbmVkLXdlYnNxbC1zdGRlcnIudHh0VVQFAAMMGCpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAKWBuSbLcpAziAAAAmAQAADkAGAAAAAAAAQAAAKSBzKAEAGh0dHAvdGVzdHMv
c2VjdXJpdHkvdmlkZW8tY3Jvc3Mtb3JpZ2luLWNhY2hpbmctc3RkZXJyLnR4dFVUBQADDhgqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIACpgbkmUi+5VFgEAAOcBAAA/ABgAAAAAAAEAAACkgSGi
BABodHRwL3Rlc3RzL3NlY3VyaXR5L3ZpZGVvLXBvc3Rlci1jcm9zcy1vcmlnaW4tY3Jhc2gyLXN0
ZGVyci50eHRVVAUAAw8YKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAwYG5JYEtmEJEAAAD7
AQAARQAYAAAAAAABAAAApIGwowQAaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELXhzbC1k
b2N1bWVudC1zZWN1cml0eU9yaWdpbi1zdGRlcnIudHh0VVQFAAMbGCpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAAk1luSQAAAAAAAAAAAAAAABMAGAAAAAAAAAAQAO1BwKQEAGh0dHAvdGVzdHMv
c3RvcmFnZS9VVAUAA6UMKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYG5JSxuBNacAAADS
AAAARQAYAAAAAAABAAAApIENpQQAaHR0cC90ZXN0cy9zdG9yYWdlL2NhbGxiYWNrcy1hcmUtY2Fs
bGVkLWluLWNvcnJlY3QtY29udGV4dC1zdGRlcnIudHh0VVQFAAPXFypYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAAC2BuSQAAAAAAAAAAAAAAAA8AGAAAAAAAAAAQAO1BM6YEAGh0dHAvdGVzdHMv
dXJpL1VUBQAD1hcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAtgbknQmtTgggAAAMAAAAA4
ABgAAAAAAAEAAACkgXymBABodHRwL3Rlc3RzL3VyaS9hc3NpZ24tcGF0aC13aXRoLWxlYWRpbmct
c2xhc2gtc3RkZXJyLnR4dFVUBQAD1hcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAMVZbkkA
AAAAAAAAAAAAAAAaABgAAAAAAAAAEADtQXCnBABodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L1VU
BQADAg0qWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADxgbkl+f+0XsQAAAAEBAABBABgAAAAA
AAEAAACkgcSnBABodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Bvc3QtYmxvYi1jb250ZW50LXR5
cGUtYXN5bmMtc3RkZXJyLnR4dFVUBQADMxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADxg
bkl+f+0XsQAAAAEBAABAABgAAAAAAAEAAACkgfCoBABodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3Bvc3QtYmxvYi1jb250ZW50LXR5cGUtc3luYy1zdGRlcnIudHh0VVQFAAMzGCpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAlFluSQAAAAAAAAAAAAAAACIAGAAAAAAAAAAQAO1BG6oEAGh0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3Qvd29ya2Vycy9VVAUAA6cMKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACACUWW5Jvc/as4IAAAC+AAAAVQAYAAAAAAABAAAApIF3qgQAaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC93b3JrZXJzL2FjY2Vzcy1jb250cm9sLWJhc2ljLWdldC1mYWlsLW5vbi1zaW1w
bGUtc3RkZXJyLnR4dFVUBQADpwwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABVfbklbBFgO
ogUAAE0QAAAKABgAAAAAAAEAAACkgYirBABodHRwZC5jb25mVVQFAAP5FipYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DCgAAAAAAwVluSQAAAAAAAAAAAAAAAAkAGAAAAAAAAAAQAO1BbrEEAGltcG9ydGVk
L1VUBQAD+gwqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAJpZbkkAAAAAAAAAAAAAAAAPABgA
AAAAAAAAEADtQbGxBABpbXBvcnRlZC9ibGluay9VVAUAA7MMKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMKAAAAAACaWW5JAAAAAAAAAAAAAAAAFAAYAAAAAAAAABAA7UH6sQQAaW1wb3J0ZWQvYmxpbmsv
Y3NzMy9VVAUAA7MMKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACaWW5JAAAAAAAAAAAAAAAA
HAAYAAAAAAAAABAA7UFIsgQAaW1wb3J0ZWQvYmxpbmsvY3NzMy9mbGV4Ym94L1VUBQADswwqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIABNgbklsAaIV+wIAAJIIAABPABgAAAAAAAEAAACkgZ6y
BABpbXBvcnRlZC9ibGluay9jc3MzL2ZsZXhib3gvcmVscG9zLXdpdGgtc2Nyb2xsYWJsZS13aXRo
LWFic3Bvcy1jcmFzaC1zdGRlcnIudHh0VVQFAAPmFypYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAA
AAAAxVluSQAAAAAAAAAAAAAAAA0AGAAAAAAAAAAQAO1BIrYEAGltcG9ydGVkL3czYy9VVAUAAwEN
Klh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADBWW5JAAAAAAAAAAAAAAAAGgAYAAAAAAAAABAA
7UFptgQAaW1wb3J0ZWQvdzNjL1dlYkNyeXB0b0FQSS9VVAUAA/oMKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMKAAAAAADRWW5JAAAAAAAAAAAAAAAAJgAYAAAAAAAAABAA7UG9tgQAaW1wb3J0ZWQvdzNj
L1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS9VVAUAAxkNKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAA2YG5J4YKG6EkAAABgDAAAPgAYAAAAAAABAAAApIEdtwQAaW1wb3J0ZWQvdzNjL1dlYkNy
eXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X2ZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAygYKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACABFYG5JjzQacEQAAACgCQAARwAYAAAAAAABAAAApIHetwQA
aW1wb3J0ZWQvdzNjL1dlYkNyeXB0b0FQSS9nZW5lcmF0ZUtleS90ZXN0X2ZhaWx1cmVzX1JTQS1P
QUVQLXN0ZGVyci50eHRVVAUAA0EYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABIYG5JVALJ
sjYAAADAAgAAUAAYAAAAAAABAAAApIGjuAQAaW1wb3J0ZWQvdzNjL1dlYkNyeXB0b0FQSS9nZW5l
cmF0ZUtleS90ZXN0X2ZhaWx1cmVzX1JTQVNTQS1QS0NTMS12MV81LXN0ZGVyci50eHRVVAUAA0cY
Klh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADvWW5JAAAAAAAAAAAAAAAAIAAYAAAAAAAAABAA
7UFjuQQAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9VVAUAA1INKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMKAAAAAABqYG5JAAAAAAAAAAAAAAAAKgAYAAAAAAAAABAA7UG9uQQAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIvVVQFAAOHGCpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAO2BuSbVV0hGjAAAATwIAAEYAGAAAAAAAAQAAAKSBIboEAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYmZhY3Rvcnlfb3BlbjExLXN0ZGVy
ci50eHRVVAUAAzEYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAA8YG5JJe6EdJkAAADFAAAA
QwAYAAAAAAABAAAApIFEuwQAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVk
REIvaWRiaW5kZXhfY291bnQtc3RkZXJyLnR4dFVUBQADNBgqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIADxgbkkl7oR0mQAAAMUAAABEABgAAAAAAAEAAACkgVq8BABpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRleF9jb3VudDItc3RkZXJyLnR4dFVUBQAD
MxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIADxgbkkl7oR0mQAAAMUAAABEABgAAAAAAAEA
AACkgXG9BABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJpbmRl
eF9jb3VudDMtc3RkZXJyLnR4dFVUBQADNBgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAERg
bkkl7oR0mQAAAMUAAABJABgAAAAAAAEAAACkgYi+BABpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL0luZGV4ZWREQi9pZGJvYmplY3RzdG9yZV9jb3VudC1zdGRlcnIudHh0VVQFAANAGCpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgARGBuSSXuhHSZAAAAxQAAAEoAGAAAAAAAAQAAAKSB
pL8EAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0
b3JlX2NvdW50Mi1zdGRlcnIudHh0VVQFAAM/GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
RGBuSSZnWmSfAAAAigEAAEoAGAAAAAAAAQAAAKSBwcAEAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVjdHN0b3JlX2NvdW50My1zdGRlcnIudHh0VVQFAAM/
GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgARmBuSSXuhHSZAAAAxQAAAEsAGAAAAAAAAQAA
AKSB5MEEAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2lkYm9iamVj
dHN0b3JlX2RlbGV0ZTUtc3RkZXJyLnR4dFVUBQADQxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAElgbkkl7oR0mQAAAMUAAABOABgAAAAAAAEAAACkgQLDBABpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL0luZGV4ZWREQi9pZGJ0cmFuc2FjdGlvbi1vbmNvbXBsZXRlLXN0ZGVyci50
eHRVVAUAA0oYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABLYG5JQHmykZ8AAADYAAAARgAY
AAAAAAABAAAApIEjxAQAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9JbmRleGVkREIv
aW50ZXJmYWNlcy53b3JrZXItc3RkZXJyLnR4dFVUBQADThgqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAFRhbkkE4q4hF1EAAGaJAQBDABgAAAAAAAEAAACkgULFBABpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi9rZXlfaW52YWxpZC1jcmFzaC1sb2cudHh0VVQFAANA
GipYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAamBuSaOdBRP/AgAAMwoAAEAAGAAAAAAAAQAA
AKSB1hYFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvSW5kZXhlZERCL2tleV9pbnZh
bGlkLXN0ZGVyci50eHRVVAUAA4cYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABvYG5JJmda
ZJ8AAACKAQAAWAAYAAAAAAABAAAApIFPGgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy9JbmRleGVkREIvdHJhbnNhY3Rpb24tY3JlYXRlX2luX3ZlcnNpb25jaGFuZ2Utc3RkZXJyLnR4
dFVUBQADkRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHBgbkkl7oR0mQAAAMUAAABGABgA
AAAAAAEAAACkgYAbBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL0luZGV4ZWREQi93
cml0ZXItc3RhcnZhdGlvbi1zdGRlcnIudHh0VVQFAAOTGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
CgAAAAAA2VluSQAAAAAAAAAAAAAAACUAGAAAAAAAAAAQAO1BmRwFAGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvaHRtbC9VVAUAAykNKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADZ
WW5JAAAAAAAAAAAAAAAALwAYAAAAAAAAABAA7UH4HAUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9VVAUAAykNKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAA
AADbWW5JAAAAAAAAAAAAAAAAQAAYAAAAAAAAABAA7UFhHQUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L1VUBQADLg0qWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAwoAAAAAAO5ZbkkAAAAAAAAAAAAAAABPABgAAAAAAAAAEADtQdsdBQBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvVVQFAANPDSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
UGBuSSEpxRXzAAAAlwUAAGcAGAAAAAAAAQAAAKSBZB4FAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9l
dmVudF9jYW5wbGF5LXN0ZGVyci50eHRVVAUAA1gYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CABRYG5JRpdmS+wAAACkBAAAcgAYAAAAAAABAAAApIH4HwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRz
L2V2ZW50X2NhbnBsYXlfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQFAANZGCpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAUWBuSSZwKMHtAAAADAYAAG4AGAAAAAAAAQAAAKSBkCEFAGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9t
ZWRpYS1lbGVtZW50cy9ldmVudF9jYW5wbGF5dGhyb3VnaC1zdGRlcnIudHh0VVQFAANaGCpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAUmBuSaNqPdbpAAAApAQAAHkAGAAAAAAAAQAAAKSBJSMF
AGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQt
Y29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9jYW5wbGF5dGhyb3VnaF9ub2F1dG9wbGF5LXN0
ZGVyci50eHRVVAUAA1sYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABSYG5J9cIERPMAAAAM
BgAAagAYAAAAAAABAAAApIHBJAUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1s
L3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZGRh
dGEtc3RkZXJyLnR4dFVUBQADXBgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFNgbklHA1Iu
7QAAAKQEAAB1ABgAAAAAAAEAAACkgVgmBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9h
ZGVkZGF0YV9ub2F1dG9wbGF5LXN0ZGVyci50eHRVVAUAA10YKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACABTYG5JuDwYU+kAAABYBQAAbgAYAAAAAAABAAAApIH0JwUAaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVs
ZW1lbnRzL2V2ZW50X2xvYWRlZG1ldGFkYXRhLXN0ZGVyci50eHRVVAUAA14YKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACABTYG5JR5Tpy+kAAACkBAAAeQAYAAAAAAABAAAApIGFKQUAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRlZG1ldGFkYXRhX25vYXV0b3BsYXktc3RkZXJyLnR4
dFVUBQADXhgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFRgbknvfOp/6QAAAKQEAABpABgA
AAAAAAEAAACkgSErBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfbG9hZHN0YXJ0LXN0ZGVy
ci50eHRVVAUAA2AYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABUYG5JnRAdDekAAACkBAAA
dAAYAAAAAAABAAAApIGtLAUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X2xvYWRzdGFydF9u
b2F1dG9wbGF5LXN0ZGVyci50eHRVVAUAA2AYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABV
YG5JT6QHE+oAAAAMBgAAfAAYAAAAAAABAAAApIFELgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2
ZW50X29yZGVyX2NhbnBsYXlfY2FucGxheXRocm91Z2gtc3RkZXJyLnR4dFVUBQADYRgqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAFVgbkkiPAOn6gAAAAwGAAB1ABgAAAAAAAEAAACkgeQvBQBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNv
bnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfb3JkZXJfY2FucGxheV9wbGF5aW5nLXN0ZGVyci50
eHRVVAUAA2IYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABWYG5Jw/4t7+kAAABmBgAAfwAY
AAAAAAABAAAApIF9MQUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X29yZGVyX2xvYWRlZG1l
dGFkYXRhX2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUBQADZBgqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAFdgbkkuiMqH7wAAAAwGAAB4ABgAAAAAAAEAAACkgR8zBQBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxl
bWVudHMvZXZlbnRfb3JkZXJfbG9hZHN0YXJ0X3Byb2dyZXNzLXN0ZGVyci50eHRVVAUAA2UYKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABXYG5JYL79HDoBAAB1BgAAZQAYAAAAAAABAAAApIHA
NAUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BhdXNlLXN0ZGVyci50eHRVVAUAA2YYKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABYYG5JCJR1regAAACkBAAAcAAYAAAAAAABAAAApIGZ
NgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3BhdXNlX25vYXV0b3BsYXktc3RkZXJyLnR4
dFVUBQADZxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFhgbknUkn+g6gAAAAwGAABkABgA
AAAAAAEAAACkgSs4BQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfcGxheS1zdGRlcnIudHh0
VVQFAANoGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAWWBuSY3E5D7sAAAApAQAAG8AGAAA
AAAAAQAAAKSBszkFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRp
Y3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5X25vYXV0b3BsYXkt
c3RkZXJyLnR4dFVUBQADaRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFlgbkn+J5x68gAA
AAwGAABnABgAAAAAAAEAAACkgUg7BQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvZXZlbnRfcGxheWlu
Zy1zdGRlcnIudHh0VVQFAANqGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAWmBuSY8thKvv
AAAADAYAAHIAGAAAAAAAAQAAAKSB2zwFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF9wbGF5
aW5nX25vYXV0b3BsYXktc3RkZXJyLnR4dFVUBQADaxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAFpgbkmbxWlU9AAAAAwGAABoABgAAAAAAAEAAACkgXY+BQBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVu
dHMvZXZlbnRfcHJvZ3Jlc3Mtc3RkZXJyLnR4dFVUBQADbBgqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAFtgbkkh3V0U7AAAAKQEAABzABgAAAAAAAEAAACkgQxABQBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxl
bWVudHMvZXZlbnRfcHJvZ3Jlc3Nfbm9hdXRvcGxheS1zdGRlcnIudHh0VVQFAANtGCpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAW2BuSbRx0MzxAAAADAYAAGoAGAAAAAAAAQAAAKSBpUEFAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF90aW1ldXBkYXRlLXN0ZGVyci50eHRVVAUAA24YKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABcYG5JaC5GXPEAAABmBgAAdQAYAAAAAAABAAAApIE6
QwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRl
ZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2V2ZW50X3RpbWV1cGRhdGVfbm9hdXRvcGxheS1zdGRl
cnIudHh0VVQFAANvGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAXGBuScNiTo6EAAAAwAAA
AGwAGAAAAAAAAQAAAKSB2kQFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9z
ZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9ldmVudF92b2x1bWVjaGFu
Z2Utc3RkZXJyLnR4dFVUBQADcBgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAANlZbkkAAAAA
AAAAAAAAAABaABgAAAAAAAAAEADtQQRGBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNl
cy9VVAUAAykNKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADZWW5JAAAAAAAAAAAAAAAAZAAY
AAAAAAAAABAA7UGYRgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFu
dGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL2ludGVyZmFjZXMvVGV4dFRyYWNr
L1VUBQADKg0qWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFBgbkmOAda0uwAAAJIBAAB5ABgA
AAAAAAEAAACkgTZHBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvaW50ZXJmYWNlcy9UZXh0VHJhY2sv
YWN0aXZlQ3Vlcy1zdGRlcnIudHh0VVQFAANYGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
UWBuSbvPTMaDAAAAwAAAAHUAGAAAAAAAAQAAAKSBpEgFAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9p
bnRlcmZhY2VzL1RleHRUcmFjay9hZGRDdWUtc3RkZXJyLnR4dFVUBQADWRgqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAF1gbkm+djeQ3wAAAOQDAAB3ABgAAAAAAAEAAACkgdZJBQBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2R1cmluZ19sb2Fkc3RhcnQtc3RkZXJyLnR4dFVU
BQADcRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAF1gbklU4P8dhAAAAMAAAABuABgAAAAA
AAEAAACkgWZLBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNz
L2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvbmV0d29ya1N0YXRlX2luaXRpYWwtc3Rk
ZXJyLnR4dFVUBQADchgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGBgbkmm/bnW5wAAAEwF
AAByABgAAAAAAAEAAACkgZJMBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
c2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGF1c2VkX2ZhbHNlX2R1
cmluZ19wbGF5LXN0ZGVyci50eHRVVAUAA3MYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABg
YG5JgIbvwekAAACkBAAAcgAYAAAAAAABAAAApIElTgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3Bh
dXNlZF90cnVlX2R1cmluZ19wYXVzZS1zdGRlcnIudHh0VVQFAANzGCpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DCgAAAAAA21luSQAAAAAAAAAAAAAAAGoAGAAAAAAAAAAQAO1Buk8FAGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRp
YS1lbGVtZW50cy9wbGF5aW5nLXRoZS1tZWRpYS1yZXNvdXJjZS9VVAUAAy4NKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACABTYG5JbZck+/8AAAD7AQAAkQAYAAAAAAABAAAApIFeUAUAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50
L21lZGlhLWVsZW1lbnRzL3BsYXlpbmctdGhlLW1lZGlhLXJlc291cmNlL3BhdXNlLW1vdmUtdG8t
b3RoZXItZG9jdW1lbnQtc3RkZXJyLnR4dFVUBQADXRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAFNgbklq5v0ZJwEAALsCAACPABgAAAAAAAEAAACkgShSBQBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVu
dHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2UvcGF1c2UtbW92ZS13aXRoaW4tZG9jdW1lbnQt
c3RkZXJyLnR4dFVUBQADXRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFNgbkkBQWQTJQEA
AG8DAACPABgAAAAAAAEAAACkgRhUBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0
bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUt
bWVkaWEtcmVzb3VyY2UvcGF1c2UtcmVtb3ZlLWZyb20tZG9jdW1lbnQtc3RkZXJyLnR4dFVUBQAD
XRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAFNgbknR12B6hAAAABoBAACBABgAAAAAAAEA
AACkgQZWBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2Vt
YmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcGxheWluZy10aGUtbWVkaWEtcmVzb3VyY2Uv
cGxheWJhY2tSYXRlLXN0ZGVyci50eHRVVAUAA14YKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CABgYG5JttrtEoQAAADAAAAAeAAYAAAAAAABAAAApIFFVwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRz
L3ByZWxvYWRfcmVmbGVjdHNfbm9uZV9hdXRvcGxheS1zdGRlcnIudHh0VVQFAAN0GCpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAYWBuSYfEeezlAAAATAUAAHMAGAAAAAAAAQAAAKSBe1gFAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0YXRlX2R1cmluZ19jYW5wbGF5LXN0ZGVyci50eHRV
VAUAA3UYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABhYG5Jpq/lJe8AAAAMBgAAegAYAAAA
AAABAAAApIENWgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGlj
cy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3JlYWR5U3RhdGVfZHVyaW5nX2NhbnBs
YXl0aHJvdWdoLXN0ZGVyci50eHRVVAUAA3YYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABi
YG5JNQq0qu8AAAAMBgAAdgAYAAAAAAABAAAApIGwWwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3Jl
YWR5U3RhdGVfZHVyaW5nX2xvYWRlZGRhdGEtc3RkZXJyLnR4dFVUBQADdxgqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAGJgbkn2Khko6QAAAKQEAAB6ABgAAAAAAAEAAACkgU9dBQBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfbG9hZGVkbWV0YWRhdGEtc3RkZXJyLnR4
dFVUBQADeBgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGNgbkmuPMwZ8AAAAAwGAABzABgA
AAAAAAEAAACkgexeBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50
aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvcmVhZHlTdGF0ZV9kdXJpbmdfcGxh
eWluZy1zdGRlcnIudHh0VVQFAAN5GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAY2BuSUbZ
qs2EAAAAwAAAAGwAGAAAAAAAAQAAAKSBiWAFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC9tZWRpYS1lbGVtZW50cy9yZWFkeVN0
YXRlX2luaXRpYWwtc3RkZXJyLnR4dFVUBQADehgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AGNgbknvcL4f2gAAAMICAACEABgAAAAAAAEAAACkgbNhBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMv
c3JjX3JlZmxlY3RzX2F0dHJpYnV0ZV9ub3Rfc291cmNlX2VsZW1lbnRzLXN0ZGVyci50eHRVVAUA
A3oYKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAADbWW5JAAAAAAAAAAAAAAAAVQAYAAAAAAAA
ABAA7UFLYwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9l
bWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3RyYWNrL1VUBQADLQ0qWHV4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAANtZbkkAAAAAAAAAAAAAAABjABgAAAAAAAAAEADtQdpjBQBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQv
bWVkaWEtZWxlbWVudHMvdHJhY2svdHJhY2stZWxlbWVudC9VVAUAAy0NKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACABTYG5JHXWaZA8BAABGAgAAggAYAAAAAAABAAAApIF3ZAUAaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250ZW50L21l
ZGlhLWVsZW1lbnRzL3RyYWNrL3RyYWNrLWVsZW1lbnQvdHJhY2stYXBpLXRleHR0cmFja3Mtc3Rk
ZXJyLnR4dFVUBQADXRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGNgbkk9twP7vQAAAOwB
AABjABgAAAAAAAEAAACkgUJmBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwv
c2VtYW50aWNzL2VtYmVkZGVkLWNvbnRlbnQvbWVkaWEtZWxlbWVudHMvdmlkZW9fMDA4LXN0ZGVy
ci50eHRVVAUAA3oYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABkYG5JRtmqzYQAAADAAAAA
bAAYAAAAAAABAAAApIGcZwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3Nl
bWFudGljcy9lbWJlZGRlZC1jb250ZW50L21lZGlhLWVsZW1lbnRzL3ZpZGVvX3ZvbHVtZV9jaGVj
ay1zdGRlcnIudHh0VVQFAAN7GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAU2BuSQAAAAAA
AAAAAAAAAFIAGAAAAAAAAAAQAO1BxmgFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
aHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtYXVkaW8tZWxlbWVudC9VVAUAA10Y
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABTYG5JaQs1RxwBAACCBgAAZgAYAAAAAAABAAAA
pIFSaQUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJl
ZGRlZC1jb250ZW50L3RoZS1hdWRpby1lbGVtZW50L2F1ZGlvXzAwMS1zdGRlcnIudHh0VVQFAANd
GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAU2BuScb8ExLeAAAA0AIAAG4AGAAAAAAAAQAA
AKSBDmsFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1i
ZWRkZWQtY29udGVudC90aGUtYXVkaW8tZWxlbWVudC9hdWRpb19jb25zdHJ1Y3Rvci1zdGRlcnIu
dHh0VVQFAANeGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA21luSQAAAAAAAAAAAAAAAFMA
GAAAAAAAAAAQAO1BlGwFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1h
bnRpY3MvZW1iZWRkZWQtY29udGVudC90aGUtY2FudmFzLWVsZW1lbnQvVVQFAAMuDSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA21luSYS91qmFAAAAFwEAAHAAGAAAAAAAAQAAAKSBIW0FAGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvaHRtbC9zZW1hbnRpY3MvZW1iZWRkZWQtY29u
dGVudC90aGUtY2FudmFzLWVsZW1lbnQvMmQuY2FudmFzLnJlYWRvbmx5LXN0ZGVyci50eHRVVAUA
Ay4NKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAANWm5JAAAAAAAAAAAAAAAALQAYAAAAAAAA
ABAA7UFQbgUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvVVQF
AAOJDSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYWBuSTbZP1q0AAAAPQQAAFcAGAAAAAAA
AQAAAKSBt24FAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWFjdGl2ZXNvdXJjZWJ1ZmZlcnMtc3RkZXJyLnR4dFVUBQADdhgqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAGJgbklR8hfViwAAAJsAAABQABgAAAAAAAEAAACkgfxvBQBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hcHBl
bmR3aW5kb3ctc3RkZXJyLnR4dFVUBQADdxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGJg
bkmk13TaHgEAACkDAABMABgAAAAAAAEAAACkgRFxBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hdnRyYWNrcy1zdGRlcnIudHh0VVQFAAN3
GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAYmBuSQFf2qiuAAAABwMAAEwAGAAAAAAAAQAA
AKSBtXIFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLWJ1ZmZlcmVkLXN0ZGVyci50eHRVVAUAA3gYKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACABkYG5JpkDa9S0BAADIAwAAXwAYAAAAAAABAAAApIHpcwUAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQt
YS1iaXRyYXRlLXN0ZGVyci50eHRVVAUAA3sYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABl
YG5JxhSgUJYBAABjBAAAZgAYAAAAAAABAAAApIGvdQUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtYXVk
aW8tYml0cmF0ZS1zdGRlcnIudHh0VVQFAAN9GCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
ZmBuSQ9D3JCUAQAAYwQAAGYAGAAAAAAAAQAAAKSB5XcFAGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LWF2LXZp
ZGVvLWJpdHJhdGUtc3RkZXJyLnR4dFVUBQADgBgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AGdgbkmLaGMHPgEAAHoDAABfABgAAAAAAAEAAACkgRl6BQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWJp
dHJhdGUtc3RkZXJyLnR4dFVUBQADghgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGlgbkm9
s8/gPgEAAHoDAABhABgAAAAAAAEAAACkgfB7BQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC12LWZyYW1lcmF0
ZS1zdGRlcnIudHh0VVQFAAOFGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAamBuSUXbbcc9
AQAAegMAAGEAGAAAAAAAAQAAAKSByX0FAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVzaXplLXN0
ZGVyci50eHRVVAUAA4cYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABqYG5Jg9mBvQcBAAAV
AgAASgAYAAAAAAABAAAApIGhfwUAaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtZGV0YWNoLXN0ZGVyci50eHRVVAUAA4cYKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACABrYG5JaUeJBQ8BAACEAQAASAAYAAAAAAABAAAApIEsgQUAaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcGxheS1z
dGRlcnIudHh0VVQFAAOKGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAa2BuSZdjDY2KAAAA
mwAAAFcAGAAAAAAAAQAAAKSBvYIFAGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLXBsYXktdGhlbi1zZWVrLWJhY2stc3RkZXJyLnR4dFVUBQAD
iRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGtgbknpuZ26mgAAAPQCAABLABgAAAAAAAEA
AACkgdiDBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRp
YXNvdXJjZS1wcmVsb2FkLXN0ZGVyci50eHRVVAUAA4oYKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACABsYG5J0muB+ooAAACbAAAAUgAYAAAAAAABAAAApIH3hAUAaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVkdW5kYW50LXNlZWstc3Rk
ZXJyLnR4dFVUBQADixgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAGxgbkmRAlExNwEAAHQF
AABKABgAAAAAAAEAAACkgQ2GBQBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUtc3RkZXJyLnR4dFVUBQADjBgqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAG1gbkm/0TNWmQAAADYBAABUABgAAAAAAAEAAACkgciHBQBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS10aW1lc3Rh
bXAtb2Zmc2V0LXN0ZGVyci50eHRVVAUAA40YKlh1eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAAD9
WW5JAAAAAAAAAAAAAAAACgAYAAAAAAAAABAA7UHviAUAaW5zcGVjdG9yL1VUBQADbQ0qWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAwoAAAAAAP1ZbkkAAAAAAAAAAAAAAAARABgAAAAAAAAAEADtQTOJBQBp
bnNwZWN0b3Ivd29ya2VyL1VUBQADbQ0qWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHdgbkli
yyuySQ8AANKzAAAvABgAAAAAAAEAAACkgX6JBQBpbnNwZWN0b3Ivd29ya2VyL3Jlc291cmNlcy1p
bi13b3JrZXItc3RkZXJyLnR4dFVUBQADoRgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAABa
bkkAAAAAAAAAAAAAAAADABgAAAAAAAAAEADtQTCZBQBqcy9VVAUAA3ANKlh1eAsAAQT1AQAABBQA
AABQSwECHgMKAAAAAAB3YG5JAAAAAAAAAAAAAAAABwAYAAAAAAAAABAA7UFtmQUAanMvZG9tL1VU
BQADohgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHZgbklLG4E1pwAAANIAAAA1ABgAAAAA
AAEAAACkga6ZBQBqcy9kb20vY2FsbGJhY2stZnVuY3Rpb24td2l0aC1oYW5kbGUtZXZlbnQtc3Rk
ZXJyLnR4dFVUBQADnxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAHdgbkleVfUuoAAAAGYB
AAAlABgAAAAAAAEAAACkgcSaBQBqcy9kb20vY3VzdG9tLWNvbnN0cnVjdG9ycy1zdGRlcnIudHh0
VVQFAAOiGCpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAz2BuSUsbgTWnAAAA0gAAADAAGAAA
AAAAAQAAAKSBw5sFAGpzL2RvbS9leGNlcHRpb25zLXRocm93bi1pbi1jYWxsYmFja3Mtc3RkZXJy
LnR4dFVUBQADRhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAIRabkkAAAAAAAAAAAAAAAAG
ABgAAAAAAAAAEADtQdScBQBtZWRpYS9VVAUAA2cOKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAB6YG5J9r0NlNoAAABSAgAAHwAYAAAAAAABAAAApIEUnQUAbWVkaWEvYXVkaW8tZGF0YS11cmwt
c3RkZXJyLnR4dFVUBQADpxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAApabkkAAAAAAAAA
AAAAAAAKABgAAAAAAAAAEADtQUeeBQBtZWRpYS9tYWMvVVQFAAODDSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAgGBuSdteKDKrAAAAFAMAADMAGAAAAAAAAQAAAKSBi54FAG1lZGlhL21hYy9j
b250cm9scy1wYW5lbC1ub3QtY2xpcHBlZC1vdXQtc3RkZXJyLnR4dFVUBQADrxgqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAwoAAAAAABJabkkAAAAAAAAAAAAAAAATABgAAAAAAAAAEADtQaOfBQBtZWRp
YS9tZWRpYS1zb3VyY2UvVVQFAAOTDSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAgGBuSQiM
01gtAQAAkAEAAD4AGAAAAAAAAQAAAKSB8J8FAG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtYWJvcnQtcmVzZXRzLXBhcnNlci1zdGRlcnIudHh0VVQFAAOwGCpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAhGBuSRiglW2MAAAAmwAAADcAGAAAAAAAAQAAAKSBlaEFAG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtcmVtb3ZlLWNyYXNoLXN0ZGVyci50eHRVVAUAA7cYKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACACEYG5JtLdWIIsAAACbAAAAMQAYAAAAAAABAAAApIGSogUA
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1yZXNpemUtc3RkZXJyLnR4dFVUBQADuBgq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAIVgbkl187G8LQEAAJABAAA8ABgAAAAAAAEAAACk
gYijBQBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXNlZWstZGV0YWNoLWNyYXNoLXN0
ZGVyci50eHRVVAUAA7kYKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACHYG5JT/xZCYsAAACb
AAAASAAYAAAAAAABAAAApIErpQUAbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1zdGFs
bGVkLWhvbGRzLXNsZWVwLWFzc2VydGlvbi1zdGRlcnIudHh0VVQFAAO+GCpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgArmBuSaKIakrDAAAAJAMAACgAGAAAAAAAAQAAAKSBOKYFAG1lZGlhL3Nv
dXJjZXMtZmFsbGJhY2stY29kZWNzLXN0ZGVyci50eHRVVAUAAwgZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACACuYG5JXlIWI4sAAACAAQAAMAAYAAAAAAABAAAApIFdpwUAbWVkaWEvc3ZnLWFz
LWltYWdlLXdpdGgtbWVkaWEtYmxvY2tlZC1zdGRlcnIudHh0VVQFAAMIGSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAsGBuSc9OKdKQAAAAvQAAACEAGAAAAAAAAQAAAKSBUqgFAG1lZGlhL3Vu
c3VwcG9ydGVkLXJ0c3Atc3RkZXJyLnR4dFVUBQADCxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIANpgbklzL6y1hQAAAOgCAAA7ABgAAAAAAAEAAACkgT2pBQBtZWRpYS92aWRlby1tdXRlZC1h
ZnRlci1zZXR0aW5nLXBhZ2UtbXV0ZWQtc3RhdGUtc3RkZXJyLnR4dFVUBQADXBkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAPtgbkmCR9HovAAAAJIBAAAfABgAAAAAAAEAAACkgTeqBQBtZWRp
YS92aWRlby1zcmMtYmxvYi1zdGRlcnIudHh0VVQFAAOZGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA+2BuSTG494WEAAAAwAAAACEAGAAAAAAAAQAAAKSBTKsFAG1lZGlhL3ZpZGVvLXNyYy1j
aGFuZ2Utc3RkZXJyLnR4dFVUBQADmhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABdabkkA
AAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQSusBQBwbHVnaW5zL1VUBQADng0qWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIAI5gbkmVDhw/rQAAAPEAAAAvABgAAAAAAAEAAACkgW2sBQBwbHVnaW5z
L21vdXNlLWNsaWNrLWlmcmFtZS10by1wbHVnaW4tc3RkZXJyLnR4dFVUBQADyxgqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIACZgbkkEQVUCZwIAAKIVAAAaABgAAAAAAAEAAACkgYOtBQBweXdl
YnNvY2tldC53cy5sb2ctZXJyLnR4dFVUBQADBxgqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ABVgbkm/n2AACAEAAI8CAAAaABgAAAAAAAEAAACkgT6wBQBweXdlYnNvY2tldC53cy5sb2ctb3V0
LnR4dFVUBQAD6RcqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAABZfbkkAAAAAAAAAAAAAAAAb
ABgAAAAAAAAAAACkgZqxBQBweXdlYnNvY2tldC53c3MubG9nLWVyci50eHRVVAUAA/sWKlh1eAsA
AQT1AQAABBQAAABQSwECHgMKAAAAAAAWX25JAAAAAAAAAAAAAAAAGwAYAAAAAAAAAAAApIHvsQUA
cHl3ZWJzb2NrZXQud3NzLmxvZy1vdXQudHh0VVQFAAP7FipYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgAVWFuSUUmHTnRJwAAy6oAAAwAGAAAAAAAAQAAAKSBRLIFAHJlc3VsdHMuaHRtbFVUBQAD
QRoqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAFFhbkkAAAAAAAAAAAAAAAAIABgAAAAAAAAA
EADtQVvaBQByZXRyaWVzL1VUBQADORoqWHV4CwABBPUBAAAEFAAAAFBLAQIeAwoAAAAAAPJgbkkA
AAAAAAAAAAAAAAAIABgAAAAAAAAAEADtQZ3aBQBzcHV0bmlrL1VUBQADiBkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAwoAAAAAAPJgbkkAAAAAAAAAAAAAAAAQABgAAAAAAAAAEADtQd/aBQBzcHV0bmlr
L1VuaWNvZGUvVVQFAAOIGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAA8mBuSQAAAAAAAAAA
AAAAABwAGAAAAAAAAAAQAO1BKdsFAHNwdXRuaWsvVW5pY29kZS9Vbmljb2RlXzMyMC9VVAUAA4gZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACABUYW5JV0DEQ0pNAAAcLAEANgAYAAAAAAABAAAA
pIF/2wUAc3B1dG5pay9Vbmljb2RlL1VuaWNvZGVfMzIwL1M3LjZfQTUuM19UMi1jcmFzaC1sb2cu
dHh0VVQFAANAGipYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAVWFuSXyW3uNy/ggA2+IvAAoA
GAAAAAAAAQAAAKSBOSkGAHN0YXRzLmpzb25VVAUAA0EaKlh1eAsAAQT1AQAABBQAAABQSwECHgMK
AAAAAABCWm5JAAAAAAAAAAAAAAAACAAYAAAAAAAAABAA7UHvJw8Ac3RvcmFnZS9VVAUAA+sNKlh1
eAsAAQT1AQAABBQAAABQSwECHgMKAAAAAACgWm5JAAAAAAAAAAAAAAAAEgAYAAAAAAAAABAA7UEx
KA8Ac3RvcmFnZS9pbmRleGVkZGIvVVQFAAObDipYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
0mBuSbVV0hGjAAAATwIAACkAGAAAAAAAAQAAAKSBfSgPAHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4
LWJhc2ljcy1zdGRlcnIudHh0VVQFAANMGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA0mBu
SbVV0hGjAAAATwIAADEAGAAAAAAAAQAAAKSBgykPAHN0b3JhZ2UvaW5kZXhlZGRiL2luZGV4LWJh
c2ljcy13b3JrZXJzLXN0ZGVyci50eHRVVAUAA0sZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CADTYG5JbamKwq8AAAABCgAAKAAYAAAAAAABAAAApIGRKg8Ac3RvcmFnZS9pbmRleGVkZGIvaW5k
ZXgtY291bnQtc3RkZXJyLnR4dFVUBQADThkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANdg
bkmb3hI0pAAAABQDAAAtABgAAAAAAAEAAACkgaIrDwBzdG9yYWdlL2luZGV4ZWRkYi9pbmRleC1t
dWx0aWVudHJ5LXN0ZGVyci50eHRVVAUAA1UZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADX
YG5JJe6EdJkAAADFAAAALQAYAAAAAAABAAAApIGtLA8Ac3RvcmFnZS9pbmRleGVkZGIvaW5kZXgt
cG9wdWxhdGlvbi1zdGRlcnIudHh0VVQFAANWGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
2mBuSbIzOJ/EBQAABTEAAEUAGAAAAAAAAAAAAKSBrS0PAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZl
cnNpb24tb3Blbi1pbi11cGdyYWRlbmVlZGVkLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADXBkqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANtgbkmCMWnv1QUAAKs0AAA9ABgAAAAAAAAAAACkgfAz
DwBzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLW9wZW4taW4tdXBncmFkZW5lZWRlZC1zdGRl
cnIudHh0VVQFAANdGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA22BuSeChs49TBAAA6hcA
AEEAGAAAAAAAAAAAAKSBPDoPAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tb3Blbi13aXRo
LXZlcnNpb24tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANdGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA22BuSf0BKThNBAAAihcAADkAGAAAAAAAAAAAAKSBCj8PAHN0b3JhZ2UvaW5kZXhlZGRi
L2ludHZlcnNpb24tb3Blbi13aXRoLXZlcnNpb24tc3RkZXJyLnR4dFVUBQADXRkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIANtgbkmj5gl5EgUAANE6AABRABgAAAAAAAAAAACkgcpDDwBzdG9y
YWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXBlbmRpbmctdmVyc2lvbi1jaGFuZ2VzLWFzY2VuZGlu
Zy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA14ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADb
YG5J5jU5ZUAFAAATPAAASQAYAAAAAAAAAAAApIFnSQ8Ac3RvcmFnZS9pbmRleGVkZGIvaW50dmVy
c2lvbi1wZW5kaW5nLXZlcnNpb24tY2hhbmdlcy1hc2NlbmRpbmctc3RkZXJyLnR4dFVUBQADXhkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANtgbklcKnIO+wQAACYuAABSABgAAAAAAAAAAACk
gSpPDwBzdG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXBlbmRpbmctdmVyc2lvbi1jaGFuZ2Vz
LWRlc2NlbmRpbmctcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANeGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgA3GBuSQd+vEIPBQAAhCsAAEoAGAAAAAAAAAAAAKSBsVQPAHN0b3JhZ2UvaW5kZXhl
ZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJzaW9uLWNoYW5nZXMtZGVzY2VuZGluZy1zdGRlcnIu
dHh0VVQFAANfGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA3GBuSbUrZOrRBAAAWCoAAEwA
GAAAAAAAAAAAAKSBRFoPAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tcGVuZGluZy12ZXJz
aW9uLWNoYW5nZXMtc2FtZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA18ZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACADcYG5JGFbx7B0FAACALwAARAAYAAAAAAAAAAAApIGbXw8Ac3RvcmFnZS9p
bmRleGVkZGIvaW50dmVyc2lvbi1wZW5kaW5nLXZlcnNpb24tY2hhbmdlcy1zYW1lLXN0ZGVyci50
eHRVVAUAA18ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADcYG5JdqYMkCUEAABTHAAAOwAY
AAAAAAAAAAAApIE2ZQ8Ac3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lvbi1wZXJzaXN0ZW5jZS1w
cml2YXRlLXN0ZGVyci50eHRVVAUAA2AZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADcYG5J
6vTqf/gDAACJGQAAMwAYAAAAAAAAAAAApIHQaQ8Ac3RvcmFnZS9pbmRleGVkZGIvaW50dmVyc2lv
bi1wZXJzaXN0ZW5jZS1zdGRlcnIudHh0VVQFAANgGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA3GBuSVhHck9OBQAAxisAAD8AGAAAAAAAAAAAAKSBNW4PAHN0b3JhZ2UvaW5kZXhlZGRiL2lu
dHZlcnNpb24tcmV2ZXJ0LW9uLWFib3J0LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADYBkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIANxgbkksspV5WwUAAFktAAA3ABgAAAAAAAAAAACkgfxzDwBz
dG9yYWdlL2luZGV4ZWRkYi9pbnR2ZXJzaW9uLXJldmVydC1vbi1hYm9ydC1zdGRlcnIudHh0VVQF
AANgGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA3WBuSfmvL+AABAAAkhkAAEUAGAAAAAAA
AAAAAKSByHkPAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tdHdvLW9wZW5zLW5vLXZlcnNp
b25zLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADYRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AN1gbknUQmTJMAQAAIkbAAA9ABgAAAAAAAAAAACkgUd+DwBzdG9yYWdlL2luZGV4ZWRkYi9pbnR2
ZXJzaW9uLXR3by1vcGVucy1uby12ZXJzaW9ucy1zdGRlcnIudHh0VVQFAANhGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgA3WBuSbhAY0tABQAAPUYAADgAGAAAAAAAAAAAAKSB7oIPAHN0b3Jh
Z2UvaW5kZXhlZGRiL2ludHZlcnNpb24tdXBncmFkZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANh
GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA3WBuSfCE48N4BQAAO0gAADAAGAAAAAAAAAAA
AKSBoIgPAHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNpb24tdXBncmFkZXMtc3RkZXJyLnR4dFVU
BQADYhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOBgbkl4PYYMOAMAAJYRAAAxABgAAAAA
AAAAAACkgYKODwBzdG9yYWdlL2luZGV4ZWRkYi9pbnZhbGlkLWtleXMtcHJpdmF0ZS1zdGRlcnIu
dHh0VVQFAANjGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA4GBuSe8bB3azAwAAfRIAACkA
GAAAAAAAAAAAAKSBJZIPAHN0b3JhZ2UvaW5kZXhlZGRiL2ludmFsaWQta2V5cy1zdGRlcnIudHh0
VVQFAANjGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA4GBuSUjwRM8IDAAAEp8BADIAGAAA
AAAAAAAAAKSBO5YPAHN0b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3ItcHJpdmF0ZS1zdGRl
cnIudHh0VVQFAANkGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA4WBuSaU8XUIcDAAAg6QB
ACoAGAAAAAAAAAAAAKSBr6IPAHN0b3JhZ2UvaW5kZXhlZGRiL2tleS1nZW5lcmF0b3Itc3RkZXJy
LnR4dFVUBQADZhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOFgbkmEgw5nCwUAAM01AABA
ABgAAAAAAAAAAACkgS+vDwBzdG9yYWdlL2luZGV4ZWRkYi9rZXktc29ydC1vcmRlci1hY3Jvc3Mt
dHlwZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANmGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA4WBuSboYxHqzBQAA8zQAADgAGAAAAAAAAAAAAKSBtLQPAHN0b3JhZ2UvaW5kZXhlZGRiL2tl
eS1zb3J0LW9yZGVyLWFjcm9zcy10eXBlcy1zdGRlcnIudHh0VVQFAANmGSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgA4mBuSThyg30yBQAADi0AADgAGAAAAAAAAAAAAKSB2boPAHN0b3JhZ2Uv
aW5kZXhlZGRiL2tleS1zb3J0LW9yZGVyLWRhdGUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANnGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA4mBuSSXEJGOfBQAAzy4AADAAGAAAAAAAAAAAAKSB
fcAPAHN0b3JhZ2UvaW5kZXhlZGRiL2tleS1zb3J0LW9yZGVyLWRhdGUtc3RkZXJyLnR4dFVUBQAD
ZxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOJgbknpghu32wcAAAy1AAAzABgAAAAAAAAA
AACkgYbGDwBzdG9yYWdlL2luZGV4ZWRkYi9rZXktdHlwZS1hcnJheS1wcml2YXRlLXN0ZGVyci50
eHRVVAUAA2gZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADjYG5J2LbGPI0FAAA5PAAANAAY
AAAAAAAAAAAApIHOzg8Ac3RvcmFnZS9pbmRleGVkZGIva2V5LXR5cGUtYmluYXJ5LXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADaRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAONgbkkPvFjtowUA
AAg9AAAsABgAAAAAAAAAAACkgcnUDwBzdG9yYWdlL2luZGV4ZWRkYi9rZXktdHlwZS1iaW5hcnkt
c3RkZXJyLnR4dFVUBQADaRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAONgbklcaV3HPAQA
ADYYAAA2ABgAAAAAAAAAAACkgdLaDwBzdG9yYWdlL2luZGV4ZWRkYi9rZXktdHlwZS1pbmZpbml0
eS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA2kZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADj
YG5J61IuorwEAAB7GgAALgAYAAAAAAAAAAAApIF+3w8Ac3RvcmFnZS9pbmRleGVkZGIva2V5LXR5
cGUtaW5maW5pdHktc3RkZXJyLnR4dFVUBQADahkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AONgbklVT4MGxQYAAJ43AAAzABgAAAAAAAAAAACkgaLkDwBzdG9yYWdlL2luZGV4ZWRkYi9rZXlw
YXRoLWFycmF5cy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA2oZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACADjYG5Jdlzc4bsGAAA7NgAAKwAYAAAAAAAAAAAApIHU6w8Ac3RvcmFnZS9pbmRleGVk
ZGIva2V5cGF0aC1hcnJheXMtc3RkZXJyLnR4dFVUBQADahkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAORgbknkCz37vAMAAFFQAAAzABgAAAAAAAAAAACkgfTyDwBzdG9yYWdlL2luZGV4ZWRk
Yi9rZXlwYXRoLWJhc2ljcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA2wZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACADlYG5JRr+/eY4EAADNcwAAKwAYAAAAAAAAAAAApIEd9w8Ac3RvcmFnZS9p
bmRleGVkZGIva2V5cGF0aC1iYXNpY3Mtc3RkZXJyLnR4dFVUBQADbhkqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAOVgbkkAk0jsTQYAAEhbAAAyABgAAAAAAAAAAACkgRD8DwBzdG9yYWdlL2lu
ZGV4ZWRkYi9rZXlwYXRoLWVkZ2VzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADbhkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAOZgbkkcTpChwgUAAOk2AAAqABgAAAAAAAAAAACkgckCEABzdG9y
YWdlL2luZGV4ZWRkYi9rZXlwYXRoLWVkZ2VzLXN0ZGVyci50eHRVVAUAA28ZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACADmYG5JtSnM8gsFAABtOgAANgAYAAAAAAAAAAAApIHvCBAAc3RvcmFn
ZS9pbmRleGVkZGIva2V5cGF0aC1mZXRjaC1rZXktcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANvGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA5mBuSSrwM1fWBQAAdT4AAC4AGAAAAAAAAAAAAKSB
ag4QAHN0b3JhZ2UvaW5kZXhlZGRiL2tleXBhdGgtZmV0Y2gta2V5LXN0ZGVyci50eHRVVAUAA28Z
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADmYG5JxNcoN+0GAAAKWgAAQQAYAAAAAAAAAAAA
pIGoFBAAc3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1pbnRyaW5zaWMtcHJvcGVydGllcy1wcml2
YXRlLXN0ZGVyci50eHRVVAUAA3AZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADnYG5Jhxm4
dgEHAABaWgAAOQAYAAAAAAAAAAAApIEQHBAAc3RvcmFnZS9pbmRleGVkZGIva2V5cGF0aC1pbnRy
aW5zaWMtcHJvcGVydGllcy1zdGRlcnIudHh0VVQFAANxGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA52BuSfq7HFziAAAA0AIAAC0AGAAAAAAAAAAAAKSBhCMQAHN0b3JhZ2UvaW5kZXhlZGRi
L2tleXJhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADcRkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAOhgbkmeE5jrCAgAAPWAAAA6ABgAAAAAAAAAAACkgc0kEABzdG9yYWdlL2luZGV4ZWRk
Yi9sYXp5LWluZGV4LXBvcHVsYXRpb24tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANzGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA6GBuSa/zKYxOCAAAuoAAADIAGAAAAAAAAAAAAKSBSS0QAHN0
b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtcG9wdWxhdGlvbi1zdGRlcnIudHh0VVQFAAN0GSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6GBuSd3ikHJ+BgAALFoAADUAGAAAAAAAAAAAAKSB
AzYQAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtdHlwZXMtcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAAN0GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6GBuSaKd8qZ7BwAAJ2UAAC0AGAAA
AAAAAAAAAKSB8DwQAHN0b3JhZ2UvaW5kZXhlZGRiL2xhenktaW5kZXgtdHlwZXMtc3RkZXJyLnR4
dFVUBQADdBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOlgbkllrsC+5gAAANACAAA1ABgA
AAAAAAAAAACkgdJEEABzdG9yYWdlL2luZGV4ZWRkYi9sZWdhY3ktY29uc3RhbnRzLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADdRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOlgbklw3a5uKwUA
AIWEAAAyABgAAAAAAAAAAACkgSdGEABzdG9yYWdlL2luZGV4ZWRkYi9saXN0LW9yZGVyaW5nLXBy
aXZhdGUtc3RkZXJyLnR4dFVUBQADdRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOlgbkk/
oUxengUAAFB7AAAqABgAAAAAAAAAAACkgb5LEABzdG9yYWdlL2luZGV4ZWRkYi9saXN0LW9yZGVy
aW5nLXN0ZGVyci50eHRVVAUAA3YZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADpYG5JjKWe
gyQGAADCUwAALQAYAAAAAAAAAAAApIHAURAAc3RvcmFnZS9pbmRleGVkZGIvbWV0YWRhdGEtcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAAN2GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA6mBuSWpG
u0kMBQAA0B8AADIAGAAAAAAAAAAAAKSBS1gQAHN0b3JhZ2UvaW5kZXhlZGRiL21ldGFkYXRhLXJh
Y2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAN3GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
6mBuSUC0PhDGBQAA2yMAACoAGAAAAAAAAAAAAKSBw10QAHN0b3JhZ2UvaW5kZXhlZGRiL21ldGFk
YXRhLXJhY2Utc3RkZXJyLnR4dFVUBQADdxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOpg
bklCAXoxpgYAAPZUAAAlABgAAAAAAAAAAACkge1jEABzdG9yYWdlL2luZGV4ZWRkYi9tZXRhZGF0
YS1zdGRlcnIudHh0VVQFAAN3GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DCgAAAAAAa1puSQAAAAAA
AAAAAAAAABkAGAAAAAAAAAAQAO1B8moQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9VVAUAAzkO
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACzYG5JsvAY30kGAABraQAANwAYAAAAAAAAAAAA
pIFFaxAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2F1dG9pbmNyZW1lbnQtYWJvcnQtc3RkZXJy
LnR4dFVUBQADEhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbkkoBRAC/gQAAMAdAAA1
ABgAAAAAAAAAAACkgf9xEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMtYWRkLXByaXZh
dGUtc3RkZXJyLnR4dFVUBQADExkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbkmHHW3K
EgUAAIUdAAAtABgAAAAAAAAAAACkgWx3EABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vYmFzaWMt
YWRkLXN0ZGVyci50eHRVVAUAAxMZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC0YG5JCz3y
QuUEAABGGwAANQAYAAAAAAAAAAAApIHlfBAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jhc2lj
LXB1dC1wcml2YXRlLXN0ZGVyci50eHRVVAUAAxMZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAC0YG5JHlv1EvIEAABrGwAALQAYAAAAAAAAAAAApIE5ghAAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2Jhc2ljLXB1dC1zdGRlcnIudHh0VVQFAAMTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAtGBuSRLaduP3BQAAdS0AADkAGAAAAAAAAAAAAKSBkocQAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9iaW5hcnkta2V5cy0xLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADFBkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIALRgbknODDxKdgYAAGoxAAAxABgAAAAAAAAAAACkgfyNEABzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vYmluYXJ5LWtleXMtMS1zdGRlcnIudHh0VVQFAAMUGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAtWBuSXai1MLCBgAAVUEAAC8AGAAAAAAAAAAAAKSB3ZQQAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9ibG9iLWN1cnNvci1zdGRlcnIudHh0VVQFAAMVGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtWBuSZ6yUJEQCQAAoqgAAC8AGAAAAAAAAAAAAKSBCJwQ
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9ibG9iLXNpbXBsZS1zdGRlcnIudHh0VVQFAAMWGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtWBuSVQmSzHnCQAAWKYAADcAGAAAAAAAAAAAAKSB
gaUQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9ibG9iLXNpbXBsZS13b3JrZXJzLXN0ZGVyci50
eHRVVAUAAxYZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5J3KvmoiEGAAAYNQAAMgAY
AAAAAAAAAAAApIHZrxAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jsb2Itc3ZnLWltYWdlLXN0
ZGVyci50eHRVVAUAAxcZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5J7gM0SmsGAABV
NAAARAAYAAAAAAAAAAAApIFmthAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Jsb2NrZWQtb3Bl
bi1kYi1yZXF1ZXN0cy1wcml2YXRlLXN0ZGVyci50eHRVVAUAAxcZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAC2YG5JA/Vzw8IGAACgNAAAPAAYAAAAAAAAAAAApIFPvRAAc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2Jsb2NrZWQtb3Blbi1kYi1yZXF1ZXN0cy1zdGRlcnIudHh0VVQFAAMYGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtmBuSXgNn349BgAAKzAAAEEAGAAAAAAAAAAAAKSB
h8QQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGUtaW5kZXgtZmFpbHVyZXMtcHJpdmF0
ZS1zdGRlcnIudHh0VVQFAAMYGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtmBuSb8eLCEn
BgAAwywAADkAGAAAAAAAAAAAAKSBP8sQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGUt
aW5kZXgtZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADGBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIALdgbkkZmCFcKwYAAC9FAABDABgAAAAAAAAAAACkgdnREABzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vY3JlYXRlb2JqZWN0c3RvcmUtYmFzaWMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMZGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAt2BuSY2Xw6RwBgAA2kYAADsAGAAAAAAAAAAAAKSB
gdgQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3RzdG9yZS1iYXNpYy1zdGRl
cnIudHh0VVQFAAMZGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAt2BuSaqcw3+iBAAAUBsA
AEYAGAAAAAAAAAAAAKSBZt8QAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jcmVhdGVvYmplY3Rz
dG9yZS1mYWlsdXJlcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAAxkZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAC3YG5JlwQndlcEAAACGQAAPgAYAAAAAAAAAAAApIGI5BAAc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2NyZWF0ZW9iamVjdHN0b3JlLWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAxkZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC3YG5Jjw7AcwMGAABqYgAANAAYAAAAAAAAAAAA
pIFX6RAAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1cnNvci0xLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADGhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALdgbkkUmeWyOAYAAPJjAAAsABgA
AAAAAAAAAACkgcjvEABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTEtc3RkZXJyLnR4
dFVUBQADGhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALhgbkkTjuEBEQYAAJt6AAA0ABgA
AAAAAAAAAACkgWb2EABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTItcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAMbGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAuGBuSQBdJHEdBgAA
lHUAACwAGAAAAAAAAAAAAKSB5fwQAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3ItMi1z
dGRlcnIudHh0VVQFAAMbGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAuGBuSQE2eWjcBQAA
21YAADQAGAAAAAAAAAAAAKSBaAMRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3ItMy1w
cml2YXRlLXN0ZGVyci50eHRVVAUAAxwZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC4YG5J
Bse+DfwFAADiVQAALAAYAAAAAAAAAAAApIGyCREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1
cnNvci0zLXN0ZGVyci50eHRVVAUAAxwZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC5YG5J
yayPHcgFAACFUAAANAAYAAAAAAAAAAAApIEUEBEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1
cnNvci00LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADHRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIALlgbklwyAVK6QUAAKhPAAAsABgAAAAAAAAAAACkgUoWEQBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vY3Vyc29yLTQtc3RkZXJyLnR4dFVUBQADHRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIALlgbklNZyEbrQUAAHsuAAA0ABgAAAAAAAAAAACkgZkcEQBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vY3Vyc29yLTUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMdGSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAuWBuSYdj+HzrBQAAry8AACwAGAAAAAAAAAAAAKSBtCIRAHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9jdXJzb3ItNS1zdGRlcnIudHh0VVQFAAMdGSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgAuWBuSVZZM8qsBQAAey4AADQAGAAAAAAAAAAAAKSBBSkRAHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi9jdXJzb3ItNi1wcml2YXRlLXN0ZGVyci50eHRVVAUAAx4ZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAC5YG5JiYCaa/IFAAD7LwAALAAYAAAAAAAAAAAApIEfLxEAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1cnNvci02LXN0ZGVyci50eHRVVAUAAx4ZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAC5YG5Jcg9KRp4FAACoKQAANAAYAAAAAAAAAAAApIF3NREAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2N1cnNvci03LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADHhkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALlgbknY49sxyQUAAG4qAAAsABgAAAAAAAAAAACk
gYM7EQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTctc3RkZXJyLnR4dFVUBQADHhkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALpgbklNPmtYmgUAAAYpAAA0ABgAAAAAAAAAAACk
gbJBEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vY3Vyc29yLTgtcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAAMfGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAumBuSTF5TtDIBQAAGCoAACwAGAAA
AAAAAAAAAKSBukcRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9jdXJzb3ItOC1zdGRlcnIudHh0
VVQFAAMfGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAumBuSf7qiS/2BQAAkkAAADYAGAAA
AAAAAAAAAKSB6E0RAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kYXRlLWJhc2ljLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADHxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALpgbkmAKOWLDgYA
AFtCAAAuABgAAAAAAAAAAACkgU5UEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGF0ZS1iYXNp
Yy1zdGRlcnIudHh0VVQFAAMfGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAumBuSWuhjfuB
BQAAVi4AADwAGAAAAAAAAAAAAKSBxFoRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVk
YXRhYmFzZS0xLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADIBkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIALpgbknEPeXTlgUAAI8vAAA0ABgAAAAAAAAAAACkgbtgEQBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtMS1zdGRlcnIudHh0VVQFAAMgGSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAumBuSZww7vk/BgAAxTEAADwAGAAAAAAAAAAAAKSBv2YRAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9kZWxldGVkYXRhYmFzZS0yLXByaXZhdGUtc3RkZXJyLnR4dFVUBQAD
IBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALtgbkmaAnNKLQYAAAgzAAA0ABgAAAAAAAAA
AACkgXRtEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtMi1zdGRlcnIu
dHh0VVQFAAMhGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAu2BuSdDHR+DnAAAAcAMAAE4A
GAAAAAAAAAAAAKSBD3QRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kZWxldGVkYXRhYmFzZS1u
dWxsLW5hbWUtZXhjZXB0aW9uLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADIRkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIALtgbkmn593lTwEAAJ0DAABIABgAAAAAAAAAAACkgX51EQBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtcmVxdWVzdC1ldmVudC1wcml2YXRlLXN0
ZGVyci50eHRVVAUAAyEZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC7YG5J0weccosBAABC
BAAAQAAYAAAAAAAAAAAApIFPdxEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFi
YXNlLXJlcXVlc3QtZXZlbnQtc3RkZXJyLnR4dFVUBQADIRkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIALtgbklgNvQyVgAAAJkAAABCABgAAAAAAAAAAACkgVR5EQBzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vZGVsZXRlZGF0YWJhc2UtcmVxdWVzdC1wcml2YXRlLXN0ZGVyci50eHRVVAUAAyEZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC7YG5JylBCPRABAAAhAwAAOgAYAAAAAAAAAAAA
pIEmehEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWRhdGFiYXNlLXJlcXVlc3Qtc3Rk
ZXJyLnR4dFVUBQADIhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALtgbknJTrHvLAcAABI4
AAA5ABgAAAAAAAAAAACkgap7EQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgt
MS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAyIZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC7
YG5JRdHrTrUHAADSOAAAMQAYAAAAAAAAAAAApIFJgxEAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2RlbGV0ZWluZGV4LTEtc3RkZXJyLnR4dFVUBQADIhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIALtgbkmvj19xmAcAAHFRAAA5ABgAAAAAAAAAAACkgWmLEQBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vZGVsZXRlaW5kZXgtMi1wcml2YXRlLXN0ZGVyci50eHRVVAUAAyIZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAC8YG5JV1h3xxwIAAAsUgAAMQAYAAAAAAAAAAAApIF0kxEAc3RvcmFn
ZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTItc3RkZXJyLnR4dFVUBQADIxkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIALxgbkm1AV0OPAUAACUkAAA5ABgAAAAAAAAAAACkgfubEQBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtMy1wcml2YXRlLXN0ZGVyci50eHRV
VAUAAyMZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC8YG5JZ3ejMZkFAAAcJQAAMQAYAAAA
AAAAAAAApIGqoREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RlbGV0ZWluZGV4LTMtc3RkZXJy
LnR4dFVUBQADIxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALxgbknVOLrYnAUAANQsAAA5
ABgAAAAAAAAAAACkga6nEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vZGVsZXRlaW5kZXgtNC1w
cml2YXRlLXN0ZGVyci50eHRVVAUAAyQZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC8YG5J
u/dupikHAAA+aQAAPwAYAAAAAAAAAAAApIG9rREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Rl
bGV0ZW9iamVjdHN0b3JlLTEtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMkGSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAvGBuSbfSys4xBwAAXmwAADcAGAAAAAAAAAAAAKSBX7URAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9kZWxldGVvYmplY3RzdG9yZS0xLXN0ZGVyci50eHRVVAUAAyQZKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC9YG5JZpznuskDAAC1EwAAOAAYAAAAAAAAAAAApIEB
vREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RvdWJsZS1hYm9ydC1wcml2YXRlLXN0ZGVyci50
eHRVVAUAAyUZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC9YG5J16Ki8wAEAAAnFQAAMAAY
AAAAAAAAAAAApIE8wREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2RvdWJsZS1hYm9ydC1zdGRl
cnIudHh0VVQFAAMlGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAvWBuSXt1+rZjAwAANxMA
ADcAGAAAAAAAAAAAAKSBpsURAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9kb3VibGUtb3Blbi1w
cml2YXRlLXN0ZGVyci50eHRVVAUAAyUZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC9YG5J
rZlZn6oDAAAZFwAALwAYAAAAAAAAAAAApIF6yREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2Rv
dWJsZS1vcGVuLXN0ZGVyci50eHRVVAUAAyUZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC9
YG5JitByMqwEAACqJQAAPgAYAAAAAAAAAAAApIGNzREAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2djLWNsb3Nlcy1kYXRhYmFzZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAyYZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAC9YG5JA/0LFNEEAADtJQAANgAYAAAAAAAAAAAApIGx0hEAc3RvcmFn
ZS9pbmRleGVkZGIvbW9kZXJuL2djLWNsb3Nlcy1kYXRhYmFzZS1zdGRlcnIudHh0VVQFAAMmGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAvWBuSQqkCQtWBgAAqzgAAD4AGAAAAAAAAAAAAKSB
8tcRAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9nZXQtaW5kZXgtZmFpbHVyZXMtcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAMmGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAwGBuSSVfSSx5BgAA
UjcAADYAGAAAAAAAAAAAAKSBwN4RAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9nZXQtaW5kZXgt
ZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADJxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMBg
bkl5IMfUpAkAAOrvAQA4ABgAAAAAAAAAAACkganlEQBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
Z2V0LWtleXJhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADKBkqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAMFgbkksfrt42QkAAL0FAgAwABgAAAAAAAAAAACkgb/vEQBzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vZ2V0LWtleXJhbmdlLXN0ZGVyci50eHRVVAUAAykZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACADBYG5JBIuVj18FAAAEHgAANgAYAAAAAAAAAAAApIEC+hEAc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2hhbmRsZS11c2VyLWRlbGV0ZS1zdGRlcnIudHh0VVQFAAMpGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAwmBuST/LnTg9DQAAcawCAEwAGAAAAAAAAAAAAKSB0f8R
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJjdXJzb3ItY29udGludWUtcHJpbWFyeS1rZXkt
MS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAysZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADD
YG5JcbbFIvMOAAAa8gIARAAYAAAAAAAAAAAApIGUDRIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2lkYmN1cnNvci1jb250aW51ZS1wcmltYXJ5LWtleS0xLXN0ZGVyci50eHRVVAUAAy0ZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADDYG5Jx885IW8GAABJQAAAUgAYAAAAAAAAAAAApIEFHRIA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmRhdGFiYXNlLWRlbGV0ZW9iamVjdHN0b3JlLWZh
aWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADLRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAMNgbklr8/nfSgYAAKE2AABKABgAAAAAAAAAAACkgQAkEgBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vaWRiZGF0YWJhc2UtZGVsZXRlb2JqZWN0c3RvcmUtZmFpbHVyZXMtc3RkZXJyLnR4dFVU
BQADLhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMNgbkmK4/XEqgQAAN8ZAABMABgAAAAA
AAAAAACkgc4qEgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRiZGF0YWJhc2UtdHJhbnNhY3Rp
b24tZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAMuGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAw2BuSVTQ98u1BAAArBkAAEQAGAAAAAAAAAAAAKSB/i8SAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9pZGJkYXRhYmFzZS10cmFuc2FjdGlvbi1mYWlsdXJlcy1zdGRlcnIudHh0VVQF
AAMuGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAxGBuSUagDL6iBgAAPVIAAD0AGAAAAAAA
AAAAAKSBMTUSAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1nZXRhbGwtMS1wcml2
YXRlLXN0ZGVyci50eHRVVAUAAy8ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADEYG5JxKv8
RRcHAAD+WAAANQAYAAAAAAAAAAAApIFKPBIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmlu
ZGV4LWdldGFsbC0xLXN0ZGVyci50eHRVVAUAAy8ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CADEYG5JnINrvscGAAB6UwAAQQAYAAAAAAAAAAAApIHQQxIAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2lkYmluZGV4LWdldGFsbGtleXMtMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAzAZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADEYG5JRZFxIhQHAAAaWQAAOQAYAAAAAAAAAAAApIESSxIA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYmluZGV4LWdldGFsbGtleXMtMS1zdGRlcnIudHh0
VVQFAAMwGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAxGBuSZi+ULCYBQAAQzgAAEUAGAAA
AAAAAAAAAKSBmVISAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJpbmRleC1wcm9wZXJ0aWVz
LWJhc2ljLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADMBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAMVgbknV3Bf7jAUAAG81AAA9ABgAAAAAAAAAAACkgbBYEgBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vaWRiaW5kZXgtcHJvcGVydGllcy1iYXNpYy1zdGRlcnIudHh0VVQFAAMxGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAxmBuSQWnqCC2CwAAdsoFAEEAGAAAAAAAAAAAAKSBs14SAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJrZXktYXJyYXktZXF1YWxpdHktcHJpdmF0ZS1zdGRl
cnIudHh0VVQFAAMzGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAx2BuSVg185jDDQAA3dsG
ADkAGAAAAAAAAAAAAKSB5GoSAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJrZXktYXJyYXkt
ZXF1YWxpdHktc3RkZXJyLnR4dFVUBQADNhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMhg
bkndPQ2tLgcAACFzAABCABgAAAAAAAAAAACkgRp5EgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4v
aWRib2JqZWN0c3RvcmUtY2xlYXItMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAzcZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADIYG5JvHoOBfMGAADAcwAAOgAYAAAAAAAAAAAApIHEgBIAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWNsZWFyLTEtc3RkZXJyLnR4dFVU
BQADNxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMhgbknesVVe2AcAAGmaAABCABgAAAAA
AAAAAACkgSuIEgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtY2xlYXIt
Mi1wcml2YXRlLXN0ZGVyci50eHRVVAUAAzcZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADI
YG5JZFB1tuAHAAD5nQAAOgAYAAAAAAAAAAAApIF/kBIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2lkYm9iamVjdHN0b3JlLWNsZWFyLTItc3RkZXJyLnR4dFVUBQADOBkqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAMhgbkmIlzIhaQYAAF6tAABCABgAAAAAAAAAAACkgdOYEgBzdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtY291bnQtMS1wcml2YXRlLXN0ZGVyci50eHRV
VAUAAzgZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADJYG5Js95DhXwHAAAr4gAAOgAYAAAA
AAAAAAAApIG4nxIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWNvdW50
LTEtc3RkZXJyLnR4dFVUBQADORkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMlgbkm/d0qs
/gUAAKIvAABJABgAAAAAAAAAAACkgainEgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2Jq
ZWN0c3RvcmUtY291bnQtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAM5GSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAyWBuSbH0cYYeBgAAei8AAEEAGAAAAAAAAAAAAKSBKa4SAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1jb3VudC1mYWlsdXJlcy1zdGRl
cnIudHh0VVQFAAM5GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAyWBuSbhcn8o/CQAARZ4B
AEMAGAAAAAAAAAAAAKSBwrQSAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9y
ZS1kZWxldGUtMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAzoZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACADKYG5J63RPf6IKAADE5AEAOwAYAAAAAAAAAAAApIF+vhIAc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWRlbGV0ZS0xLXN0ZGVyci50eHRVVAUAAzsZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADKYG5JBfbO84sGAABmNgAAQwAYAAAAAAAAAAAApIGVyRIA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWRlbGV0ZS0yLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADOxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMpgbkmmpEsDnwYA
APs1AAA7ABgAAAAAAAAAAACkgZ3QEgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0
c3RvcmUtZGVsZXRlLTItc3RkZXJyLnR4dFVUBQADPBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAMpgbklc/0HNLgYAAAc5AABKABgAAAAAAAAAAACkgbHXEgBzdG9yYWdlL2luZGV4ZWRkYi9t
b2Rlcm4vaWRib2JqZWN0c3RvcmUtZGVsZXRlLWZhaWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADPBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMpgbklmjeTskAYAAL05AABCABgAAAAA
AAAAAACkgWPeEgBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRib2JqZWN0c3RvcmUtZGVsZXRl
LWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAzwZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADL
YG5J83xxGf0FAACgLwAARwAYAAAAAAAAAAAApIFv5RIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJu
L2lkYm9iamVjdHN0b3JlLWdldC1mYWlsdXJlcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAAz0ZKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADLYG5JmBVTixsGAAB4LwAAPwAYAAAAAAAAAAAApIHt
6xIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWdldC1mYWlsdXJlcy1z
dGRlcnIudHh0VVQFAAM9GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAy2BuSa4lMEzRBQAA
sz8AAEMAGAAAAAAAAAAAAKSBgfISAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3Rz
dG9yZS1nZXRhbGwtMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAAz0ZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACADLYG5JhGE4AzYGAACMRQAAOwAYAAAAAAAAAAAApIHP+BIAc3RvcmFnZS9pbmRl
eGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWdldGFsbC0xLXN0ZGVyci50eHRVVAUAAz4ZKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADLYG5JloIabhAGAADPQwAARwAYAAAAAAAAAAAApIF6
/xIAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYm9iamVjdHN0b3JlLWdldGFsbGtleXMtMS1w
cml2YXRlLXN0ZGVyci50eHRVVAUAAz4ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADLYG5J
TwX5PjcGAACsRQAAPwAYAAAAAAAAAAAApIELBhMAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lk
Ym9iamVjdHN0b3JlLWdldGFsbGtleXMtMS1zdGRlcnIudHh0VVQFAAM+GSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAy2BuSWxvRJdtBgAACj0AAFEAGAAAAAAAAAAAAKSBuwwTAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9pZGJvYmplY3RzdG9yZS1wdXQtYW5kLWNsZWFyLWZhaWx1cmVzLXBy
aXZhdGUtc3RkZXJyLnR4dFVUBQADPhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAMxgbkks
BOtKfwYAADY5AABJABgAAAAAAAAAAACkgbMTEwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRi
b2JqZWN0c3RvcmUtcHV0LWFuZC1jbGVhci1mYWlsdXJlcy1zdGRlcnIudHh0VVQFAAM/GSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAzGBuSaD22C2ZAwAAwREAAE8AGAAAAAAAAAAAAKSBtRoT
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pZGJ0cmFuc2FjdGlvbi1vYmplY3RzdG9yZS1mYWls
dXJlcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAAz8ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CADMYG5JJxKBwhwEAAD5EwAARwAYAAAAAAAAAAAApIHXHhMAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2lkYnRyYW5zYWN0aW9uLW9iamVjdHN0b3JlLWZhaWx1cmVzLXN0ZGVyci50eHRVVAUAAz8Z
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADMYG5JoxPhmBcFAAAgJwAASQAYAAAAAAAAAAAA
pIF0IxMAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lkYnRyYW5zYWN0aW9uLW9iamVjdHN0b3Jl
cy0xLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADPxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AMxgbkkNqCVF8QQAACYlAABBABgAAAAAAAAAAACkgQ4pEwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vaWRidHJhbnNhY3Rpb24tb2JqZWN0c3RvcmVzLTEtc3RkZXJyLnR4dFVUBQADPxkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAMxgbkliJoT8IAEAAIsEAABFABgAAAAAAAAAAACkgXouEwBz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaWRidmVyc2lvbmNoYW5nZWV2ZW50LWNvbnN0cnVjdG9y
LXN0ZGVyci50eHRVVAUAA0AZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADMYG5JiFIikyQI
AACzVgEAMwAYAAAAAAAAAAAApIEZMBMAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LTEt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANAGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAzWBu
SZFbqNcqCQAANmoBACsAGAAAAAAAAAAAAKSBqjgTAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9p
bmRleC0xLXN0ZGVyci50eHRVVAUAA0EZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADNYG5J
GvQHktALAADubgEAMwAYAAAAAAAAAAAApIE5QhMAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2lu
ZGV4LTItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANCGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAzmBuSdPfPj1MDAAA2XkBACsAGAAAAAAAAAAAAKSBdk4TAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pbmRleC0yLXN0ZGVyci50eHRVVAUAA0MZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CADOYG5JleXptDcGAAAOTAAAMwAYAAAAAAAAAAAApIEnWxMAc3RvcmFnZS9pbmRleGVkZGIvbW9k
ZXJuL2luZGV4LTMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANEGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAzmBuSXrD+OfrBgAALVEAACsAGAAAAAAAAAAAAKSBy2ETAHN0b3JhZ2UvaW5kZXhl
ZGRiL21vZGVybi9pbmRleC0zLXN0ZGVyci50eHRVVAUAA0QZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACADOYG5JXEsU5nQGAAAvgwAAMwAYAAAAAAAAAAAApIEbaRMAc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL2luZGV4LTQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANEGSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAz2BuSRdPwg29BwAAe5AAACsAGAAAAAAAAAAAAKSB/G8TAHN0b3JhZ2Uv
aW5kZXhlZGRiL21vZGVybi9pbmRleC00LXN0ZGVyci50eHRVVAUAA0UZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACADPYG5JCmwEF8IFAAC2IwAAMwAYAAAAAAAAAAAApIEeeBMAc3RvcmFnZS9p
bmRleGVkZGIvbW9kZXJuL2luZGV4LTUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANFGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAz2BuSYRg5tW9BQAAHSEAACsAGAAAAAAAAAAAAKSBTX4TAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC01LXN0ZGVyci50eHRVVAUAA0UZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADPYG5JdWkRii8HAABkDQEAOgAYAAAAAAAAAAAApIFvhBMAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWN1cnNvci0xLXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADRhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANBgbkmtzp76rQgAAPUUAQAyABgAAAAA
AAAAAACkgRKMEwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtY3Vyc29yLTEtc3RkZXJy
LnR4dFVUBQADRxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANBgbknF3z9d1wcAAHMoAQA6
ABgAAAAAAAAAAACkgSuVEwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtY3Vyc29yLTIt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANIGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA0WBu
SWe3/Q/dCAAAmycBADIAGAAAAAAAAAAAAKSBdp0TAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9p
bmRleC1jdXJzb3ItMi1zdGRlcnIudHh0VVQFAANKGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA0mBuSZh4WyGvCwAAIBICADoAGAAAAAAAAAAAAKSBv6YTAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9pbmRleC1jdXJzb3ItMy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA0sZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACADSYG5J5YOzy+AOAADYPgIAMgAYAAAAAAAAAAAApIHishMAc3RvcmFn
ZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWN1cnNvci0zLXN0ZGVyci50eHRVVAUAA0wZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADSYG5JKUmRkOAFAABxJQAAQQAYAAAAAAAAAAAApIEuwhMA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1jb3VudC1iYXNpYy1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA0wZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADTYG5JBG0NdmcGAAA8
JQAAOQAYAAAAAAAAAAAApIGJyBMAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL2luZGV4LWdldC1j
b3VudC1iYXNpYy1zdGRlcnIudHh0VVQFAANNGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
02BuSX2cSeGEBgAAljQAAEQAGAAAAAAAAAAAAKSBY88TAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANNGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA02BuST3F/l06BwAArjUAADwAGAAAAAAAAAAAAKSBZdYT
AHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9pbmRleC1nZXQtY291bnQtZmFpbHVyZXMtc3RkZXJy
LnR4dFVUBQADTRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANNgbkkqqWLv9wYAAMVFAAA6
ABgAAAAAAAAAAACkgRXeEwBzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vaW5kZXgtcmVuYW1lLTEt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANNGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA02Bu
SYfnwRc+BwAAwUcAADIAGAAAAAAAAAAAAKSBgOUTAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9p
bmRleC1yZW5hbWUtMS1zdGRlcnIudHh0VVQFAANOGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA02BuSXjuzurRBAAA1iUAADkAGAAAAAAAAAAAAKSBKu0TAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9rZXlwYXRoLWJhc2ljLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADThkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIANNgbkkkTNjQyAQAAF4kAAAxABgAAAAAAAAAAACkgW7yEwBzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4va2V5cGF0aC1iYXNpYy1zdGRlcnIudHh0VVQFAANOGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA1GBuSe4L69AQBQAAiSIAACoAGAAAAAAAAAAAAKSBofcTAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9sZWFrLTEtc3RkZXJyLnR4dFVUBQADTxkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIANRgbklwfTgeJAgAALbKAQBVABgAAAAAAAAAAACkgRX9EwBzdG9y
YWdlL2luZGV4ZWRkYi9tb2Rlcm4vbWVtb3J5LWluZGV4LW5vdC1kZWxldGVkLXdpdGgtb2JqZWN0
c3RvcmUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANPGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA1GBuSadvnZFjCAAAqboBAE0AGAAAAAAAAAAAAKSByAUUAHN0b3JhZ2UvaW5kZXhlZGRiL21v
ZGVybi9tZW1vcnktaW5kZXgtbm90LWRlbGV0ZWQtd2l0aC1vYmplY3RzdG9yZS1zdGRlcnIudHh0
VVQFAANQGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA1GBuSUm1tZVBBwAAtmAAAFcAGAAA
AAAAAAAAAKSBsg4UAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9tdWx0aXBsZS1vYmplY3RzdG9y
ZS1pbmRleC1jdXJzb3ItY29sbGlzaW9uLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADUBkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIANVgbknPa8JwiwcAAAJjAABPABgAAAAAAAAAAACkgYQWFABz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vbXVsdGlwbGUtb2JqZWN0c3RvcmUtaW5kZXgtY3Vyc29y
LWNvbGxpc2lvbi1zdGRlcnIudHh0VVQFAANRGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
1WBuSQ44yZsHBgAAKS4AAEIAGAAAAAAAAAAAAKSBmB4UAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi9uZXctZGF0YWJhc2UtYWZ0ZXItdXNlci1kZWxldGUtc3RkZXJyLnR4dFVUBQADURkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIANVgbklja6UEiwUAALkuAABCABgAAAAAAAAAAACkgRslFABz
dG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb2JqZWN0c3RvcmUtYXR0cmlidXRlcy1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA1EZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADVYG5JaChDG3wFAABu
LAAAOgAYAAAAAAAAAAAApIEiKxQAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29iamVjdHN0b3Jl
LWF0dHJpYnV0ZXMtc3RkZXJyLnR4dFVUBQADURkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
ANVgbkl9r59RhQcAAI+LAABPABgAAAAAAAAAAACkgRIxFABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rl
cm4vb2JqZWN0c3RvcmUtY3Vyc29yLWFkdmFuY2UtZmFpbHVyZXMtcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAANSGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA1WBuSWQJxzi7BwAA8I4AAEcAGAAA
AAAAAAAAAKSBIDkUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vYmplY3RzdG9yZS1jdXJzb3It
YWR2YW5jZS1mYWlsdXJlcy1zdGRlcnIudHh0VVQFAANSGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgA1WBuSWTmvEN/BwAAX44AAFAAGAAAAAAAAAAAAKSBXEEUAHN0b3JhZ2UvaW5kZXhlZGRi
L21vZGVybi9vYmplY3RzdG9yZS1jdXJzb3ItY29udGludWUtZmFpbHVyZXMtcHJpdmF0ZS1zdGRl
cnIudHh0VVQFAANSGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA1mBuSRVKj9S5BwAAMJIA
AEgAGAAAAAAAAAAAAKSBZUkUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vYmplY3RzdG9yZS1j
dXJzb3ItY29udGludWUtZmFpbHVyZXMtc3RkZXJyLnR4dFVUBQADUxkqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIANZgbkmdxq5HXAYAANE8AABAABgAAAAAAAAAAACkgaBRFABzdG9yYWdlL2lu
ZGV4ZWRkYi9tb2Rlcm4vb2JqZWN0c3RvcmUtcmVuYW1lLTEtcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AANTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA1mBuSVzZBxxZBgAAKj0AADgAGAAAAAAA
AAAAAKSBdlgUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vYmplY3RzdG9yZS1yZW5hbWUtMS1z
dGRlcnIudHh0VVQFAANTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA1mBuSYEK532IBgAA
rTcAAD8AGAAAAAAAAAAAAKSBQV8UAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi9vcGVuY3Vyc29y
LWZhaWx1cmVzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADVBkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIANZgbkl8KHa75gYAAOY2AAA3ABgAAAAAAAAAAACkgUJmFABzdG9yYWdlL2luZGV4ZWRk
Yi9tb2Rlcm4vb3BlbmN1cnNvci1mYWlsdXJlcy1zdGRlcnIudHh0VVQFAANUGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgA1mBuSbZo7nWnAgAAiAoAAEYAGAAAAAAAAAAAAKSBmW0UAHN0b3Jh
Z2UvaW5kZXhlZGRiL21vZGVybi9vcGVuZGF0YWJhc2UtcmVxdWVzdC1ldmVudC1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA1QZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADWYG5JJ9KioP4CAAAu
DAAAPgAYAAAAAAAAAAAApIHAcBQAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFz
ZS1yZXF1ZXN0LWV2ZW50LXN0ZGVyci50eHRVVAUAA1QZKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACADWYG5JHN84jWYBAAD/BAAAQAAYAAAAAAAAAAAApIE2dBQAc3RvcmFnZS9pbmRleGVkZGIv
bW9kZXJuL29wZW5kYXRhYmFzZS1yZXF1ZXN0LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADVBkqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANZgbknp9R13NAEAAGMGAAA4ABgAAAAAAAAAAACkgRZ2
FABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb3BlbmRhdGFiYXNlLXJlcXVlc3Qtc3RkZXJyLnR4
dFVUBQADVBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANdgbkkXK09CGQQAADIkAABUABgA
AAAAAAAAAACkgbx3FABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb3BlbmRhdGFiYXNlLXN1Y2Nl
c3MtYWZ0ZXItdmVyc2lvbmNoYW5nZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA1UZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADXYG5JIbZdvWEEAACwJQAATAAYAAAAAAAAAAAApIFjfBQAc3Rv
cmFnZS9pbmRleGVkZGIvbW9kZXJuL29wZW5kYXRhYmFzZS1zdWNjZXNzLWFmdGVyLXZlcnNpb25j
aGFuZ2Utc3RkZXJyLnR4dFVUBQADVRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANdgbkkT
udRCdwQAAAIwAABBABgAAAAAAAAAAACkgUqBFABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vb3Bl
bmRhdGFiYXNlLXZlcnNpb25zLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADVRkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIANdgbknQwXNDjgQAABAsAAA5ABgAAAAAAAAAAACkgTyGFABzdG9yYWdl
L2luZGV4ZWRkYi9tb2Rlcm4vb3BlbmRhdGFiYXNlLXZlcnNpb25zLXN0ZGVyci50eHRVVAUAA1UZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADXYG5Jr3mlJcAEAADsGwAAPgAYAAAAAAAAAAAA
pIE9ixQAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3JlcXVlc3QtcmVhZHlzdGF0ZS1wcml2YXRl
LXN0ZGVyci50eHRVVAUAA1UZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADXYG5JBQi67d8E
AAASHAAANgAYAAAAAAAAAAAApIF1kBQAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3JlcXVlc3Qt
cmVhZHlzdGF0ZS1zdGRlcnIudHh0VVQFAANWGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
12BuSZDNwpw4BgAAJzUAAEMAGAAAAAAAAAAAAKSBxJUUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVy
bi90cmFuc2FjdGlvbi1zY2hlZHVsZXItMS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA1YZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACADXYG5J18MgOd0GAABmRgAAQwAYAAAAAAAAAAAApIF5nBQA
c3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5zYWN0aW9uLXNjaGVkdWxlci0yLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADVhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANdgbkkabn1CrQYA
AElEAABDABgAAAAAAAAAAACkgdOjFABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rp
b24tc2NoZWR1bGVyLTMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAANWGSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgA2GBuSe1DarSFBgAA8zwAADsAGAAAAAAAAAAAAKSB/aoUAHN0b3JhZ2UvaW5k
ZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbi1zY2hlZHVsZXItMy1zdGRlcnIudHh0VVQFAANXGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA2GBuSS0HZDVUBgAAlGYAAEMAGAAAAAAAAAAAAKSB
97EUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi90cmFuc2FjdGlvbi1zY2hlZHVsZXItNC1wcml2
YXRlLXN0ZGVyci50eHRVVAUAA1cZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADYYG5J/mZ9
NagGAABgbgAAOwAYAAAAAAAAAAAApIHIuBQAc3RvcmFnZS9pbmRleGVkZGIvbW9kZXJuL3RyYW5z
YWN0aW9uLXNjaGVkdWxlci00LXN0ZGVyci50eHRVVAUAA1cZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACADYYG5JYabtR74GAAD2TgAAQwAYAAAAAAAAAAAApIHlvxQAc3RvcmFnZS9pbmRleGVk
ZGIvbW9kZXJuL3RyYW5zYWN0aW9uLXNjaGVkdWxlci01LXByaXZhdGUtc3RkZXJyLnR4dFVUBQAD
VxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANhgbklWOA/MegYAAKxEAABDABgAAAAAAAAA
AACkgSDHFABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb24tc2NoZWR1bGVyLTYt
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAANYGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA2WBu
STsniEApBQAA8zAAAEsAGAAAAAAAAAAAAKSBF84UAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi90
cmFuc2FjdGlvbnMtc3RvcC1vbi1uYXZpZ2F0aW9uLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADWRkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANlgbkkP1s9xkQYAAGxjAABDABgAAAAAAAAAAACk
gcXTFABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdHJhbnNhY3Rpb25zLXN0b3Atb24tbmF2aWdh
dGlvbi1zdGRlcnIudHh0VVQFAANZGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA2WBuSdS2
zuHYBAAAajQAAEsAGAAAAAAAAAAAAKSB09oUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi92ZXJz
aW9uY2hhbmdlLWFib3J0LXRoZW4tcmVvcGVuLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADWRkqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIANlgbklCPaiHYAUAAIE9AABDABgAAAAAAAAAAACkgTDg
FABzdG9yYWdlL2luZGV4ZWRkYi9tb2Rlcm4vdmVyc2lvbmNoYW5nZS1hYm9ydC10aGVuLXJlb3Bl
bi1zdGRlcnIudHh0VVQFAANZGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA2WBuSTjnVZsN
BQAAmSoAAD8AGAAAAAAAAAAAAKSBDeYUAHN0b3JhZ2UvaW5kZXhlZGRiL21vZGVybi92ZXJzaW9u
Y2hhbmdlLWV2ZW50LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADWhkqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIANlgbkmYlvuiQwUAACQrAAA3ABgAAAAAAAAAAACkgZPrFABzdG9yYWdlL2luZGV4
ZWRkYi9tb2Rlcm4vdmVyc2lvbmNoYW5nZS1ldmVudC1zdGRlcnIudHh0VVQFAANaGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA2WBuSbsitpgzAQAAUAQAADQAGAAAAAAAAAAAAKSBR/EUAHN0
b3JhZ2UvaW5kZXhlZGRiL21vZGVybi93b3JrZXJzLWRpc2FibGVkLXN0ZGVyci50eHRVVAUAA1oZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADqYG5J9Sqygc0GAAAkZQAANAAYAAAAAAAAAAAA
pIHo8hQAc3RvcmFnZS9pbmRleGVkZGIvbXV0YXRpbmctY3Vyc29yLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADeBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOpgbknGOq6HzQYAANxhAAAsABgA
AAAAAAAAAACkgSP6FABzdG9yYWdlL2luZGV4ZWRkYi9tdXRhdGluZy1jdXJzb3Itc3RkZXJyLnR4
dFVUBQADeBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOpgbknW8V/iNgQAAPsVAABEABgA
AAAAAAAAAACkgVYBFQBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3QtbG9va3Vwcy1pbi12ZXJzaW9u
Y2hhbmdlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADeBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAOtgbknB4VFNWQQAALwXAAA8ABgAAAAAAAAAAACkgQoGFQBzdG9yYWdlL2luZGV4ZWRkYi9v
YmplY3QtbG9va3Vwcy1pbi12ZXJzaW9uY2hhbmdlLXN0ZGVyci50eHRVVAUAA3kZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACADrYG5J5eMWfFIDAACODwAAQwAYAAAAAAAAAAAApIHZChUAc3Rv
cmFnZS9pbmRleGVkZGIvb2JqZWN0U3RvcmUtcmVxdWlyZWQtYXJndW1lbnRzLXByaXZhdGUtc3Rk
ZXJyLnR4dFVUBQADeRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOtgbkk7h4hFngMAANQQ
AAA7ABgAAAAAAAAAAACkgagOFQBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RTdG9yZS1yZXF1aXJl
ZC1hcmd1bWVudHMtc3RkZXJyLnR4dFVUBQADeRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AOtgbkkTLgXQmAcAAGJsAAA+ABgAAAAAAAAAAACkgbsSFQBzdG9yYWdlL2luZGV4ZWRkYi9vYmpl
Y3RzdG9yZS1hdXRvaW5jcmVtZW50LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADehkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAOtgbkm0e7J4ZwcAAIJnAAA2ABgAAAAAAAAAAACkgcsaFQBzdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1hdXRvaW5jcmVtZW50LXN0ZGVyci50eHRVVAUAA3oZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADsYG5JwrD2spYJAAAwjQAANwAYAAAAAAAAAAAA
pIGiIhUAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtYmFzaWNzLXByaXZhdGUtc3RkZXJy
LnR4dFVUBQADexkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAO1gbkksojl+IwoAAI2RAAAv
ABgAAAAAAAAAAACkgaksFQBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3Mtc3Rk
ZXJyLnR4dFVUBQADfRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAOxgbkm1/P+dpQoAANGP
AAA3ABgAAAAAAAAAAACkgTU3FQBzdG9yYWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1iYXNpY3Mt
d29ya2Vycy1zdGRlcnIudHh0VVQFAAN8GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA7WBu
SdFg584PBwAA7zcAADYAGAAAAAAAAAAAAKSBS0IVAHN0b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0
b3JlLWNsZWFyLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADfRkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAO1gbkkRrUrmOwcAAFU4AAAuABgAAAAAAAAAAACkgcpJFQBzdG9yYWdlL2luZGV4ZWRk
Yi9vYmplY3RzdG9yZS1jbGVhci1zdGRlcnIudHh0VVQFAAN+GSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgA7mBuSSESPcv3CAAA130BADYAGAAAAAAAAAAAAKSBbVEVAHN0b3JhZ2UvaW5kZXhl
ZGRiL29iamVjdHN0b3JlLWNvdW50LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADfxkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAO9gbkkqHPlVkQkAAH2lAQAuABgAAAAAAAAAAACkgdRaFQBzdG9y
YWdlL2luZGV4ZWRkYi9vYmplY3RzdG9yZS1jb3VudC1zdGRlcnIudHh0VVQFAAOBGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA8mBuSduq9KIMDgAAx6wFADcAGAAAAAAAAAAAAKSBzWQVAHN0
b3JhZ2UvaW5kZXhlZGRiL29iamVjdHN0b3JlLWN1cnNvci1wcml2YXRlLXN0ZGVyci50eHRVVAUA
A4cZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD1YG5JfVk5O/cNAAAsRgUALwAYAAAAAAAA
AAAApIFKcxUAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtY3Vyc29yLXN0ZGVyci50eHRV
VAUAA40ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAD1YG5JcJxxAigHAACfRwAAQgAYAAAA
AAAAAAAApIGqgRUAc3RvcmFnZS9pbmRleGVkZGIvb2JqZWN0c3RvcmUtcmVtb3Zlb2JqZWN0c3Rv
cmUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOOGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
9WBuSStxtghtBwAA0koAADoAGAAAAAAAAAAAAKSBTokVAHN0b3JhZ2UvaW5kZXhlZGRiL29iamVj
dHN0b3JlLXJlbW92ZW9iamVjdHN0b3JlLXN0ZGVyci50eHRVVAUAA44ZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAD2YG5JaT960OQIAAC5+AAAMAAYAAAAAAAAAAAApIEvkRUAc3RvcmFnZS9p
bmRleGVkZGIvb2RkLXN0cmluZ3MtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOPGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgA9mBuSRKqwbVJBAAASzIAADYAGAAAAAAAAAAAAKSBfZoVAHN0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tYmFkLXZlcnNpb25zLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADkBkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPdgbkn1hvpX3QMAANkhAAAuABgAAAAAAAAAAACk
gTafFQBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWJhZC12ZXJzaW9ucy1zdGRlcnIudHh0VVQFAAOR
GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA92BuSbrJlHyiBAAAnB8AADAAGAAAAAAAAAAA
AKSBe6MVAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY3Vyc29yLXByaXZhdGUtc3RkZXJyLnR4dFVU
BQADkhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPdgbkmgBXwOSAUAACgiAAAoABgAAAAA
AAAAAACkgYeoFQBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWN1cnNvci1zdGRlcnIudHh0VVQFAAOS
GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA92BuSajr77UPBgAAfToAADwAGAAAAAAAAAAA
AKSBMa4VAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tZHVyaW5nLXRyYW5zYWN0aW9uLXByaXZhdGUt
c3RkZXJyLnR4dFVUBQADkhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPhgbkm6eUvdBgYA
AMc9AAA0ABgAAAAAAAAAAACkgba0FQBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWR1cmluZy10cmFu
c2FjdGlvbi1zdGRlcnIudHh0VVQFAAOTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+GBu
SW2TtfX6BAAAPjgAADIAGAAAAAAAAAAAAKSBKrsVAHN0b3JhZ2UvaW5kZXhlZGRiL29wZW4tb3Jk
ZXJpbmctcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgA+GBuSQCqOQ8jBQAAcTkAACoAGAAAAAAAAAAAAKSBkMAVAHN0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tb3JkZXJpbmctc3RkZXJyLnR4dFVUBQADkxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
APhgbknDNs1TxQMAABYhAAAvABgAAAAAAAAAAACkgRfGFQBzdG9yYWdlL2luZGV4ZWRkYi9vcGVu
LXR3aWNlLXdvcmtlcnMtc3RkZXJyLnR4dFVUBQADlBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAPhgbkmC3tCWwQcAAPOLAAAzABgAAAAAAAAAAACkgUXKFQBzdG9yYWdlL2luZGV4ZWRkYi9v
cGVuY3Vyc29yLWtleS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA5QZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAD5YG5JvjTxedYHAABclAAAKwAYAAAAAAAAAAAApIFz0hUAc3RvcmFnZS9pbmRl
eGVkZGIvb3BlbmN1cnNvci1rZXktc3RkZXJyLnR4dFVUBQADlRkqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAPlgbkkjg5uWZgkAAC/oAAA3ABgAAAAAAAAAAACkga7aFQBzdG9yYWdlL2luZGV4
ZWRkYi9vcHRpb25hbC1hcmd1bWVudHMtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOWGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgA+mBuSdCABxC2CQAAQ+MAAC8AGAAAAAAAAAAAAKSBheQVAHN0
b3JhZ2UvaW5kZXhlZGRiL29wdGlvbmFsLWFyZ3VtZW50cy1zdGRlcnIudHh0VVQFAAOXGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA+2BuSf4Ut22PBgAA9zoAADUAGAAAAAAAAAAAAKSBpO4V
AHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctYWN0aXZpdHktcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AAOZGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA/WBuSYTgMerQBgAAUDwAAC0AGAAAAAAA
AAAAAKSBovUVAHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctYWN0aXZpdHktc3RkZXJyLnR4dFVU
BQADnRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAPxgbklR3i58TAcAAG8+AAA1ABgAAAAA
AAAAAACkgdn8FQBzdG9yYWdlL2luZGV4ZWRkYi9wZW5kaW5nLWFjdGl2aXR5LXdvcmtlcnMtc3Rk
ZXJyLnR4dFVUBQADmxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAP1gbknisWTh9wQAABYk
AABDABgAAAAAAAAAAACkgZQEFgBzdG9yYWdlL2luZGV4ZWRkYi9wZW5kaW5nLXZlcnNpb24tY2hh
bmdlLW9uLWV4aXQtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOdGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgA/WBuSRmFRyvIBAAATx4AADsAGAAAAAAAAAAAAKSBCAoWAHN0b3JhZ2UvaW5kZXhl
ZGRiL3BlbmRpbmctdmVyc2lvbi1jaGFuZ2Utb24tZXhpdC1zdGRlcnIudHh0VVQFAAOeGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA/WBuSc1aPqKdBAAAcCAAAEEAGAAAAAAAAAAAAKSBRQ8W
AHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctdmVyc2lvbi1jaGFuZ2Utc3R1Y2stcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAOeGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAGFuSUw6aNCoBAAA
riMAADkAGAAAAAAAAAAAAKSBXRQWAHN0b3JhZ2UvaW5kZXhlZGRiL3BlbmRpbmctdmVyc2lvbi1j
aGFuZ2Utc3R1Y2stc3RkZXJyLnR4dFVUBQADoBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AABhbknhEZjvrgQAAPAhAABWABgAAAAAAAAAAACkgXgZFgBzdG9yYWdlL2luZGV4ZWRkYi9wZW5k
aW5nLXZlcnNpb24tY2hhbmdlLXN0dWNrLXdvcmtzLXdpdGgtdGVybWluYXRlLXByaXZhdGUtc3Rk
ZXJyLnR4dFVUBQADnxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAABhbkn/ru7Z4QQAAF4k
AABOABgAAAAAAAAAAACkgbYeFgBzdG9yYWdlL2luZGV4ZWRkYi9wZW5kaW5nLXZlcnNpb24tY2hh
bmdlLXN0dWNrLXdvcmtzLXdpdGgtdGVybWluYXRlLXN0ZGVyci50eHRVVAUAA58ZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAAYW5J29LZBxoGAAACZAAAMAAYAAAAAAAAAAAApIEfJBYAc3Rv
cmFnZS9pbmRleGVkZGIvcGVyc2lzdGVuY2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOgGSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAGFuSSzRJIAwBgAAp2MAACgAGAAAAAAAAAAAAKSBoyoW
AHN0b3JhZ2UvaW5kZXhlZGRiL3BlcnNpc3RlbmNlLXN0ZGVyci50eHRVVAUAA6AZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAAYW5JVuLoCKUHAAB8ZwAAOwAYAAAAAAAAAAAApIE1MRYAc3Rv
cmFnZS9pbmRleGVkZGIvcHJlZmV0Y2gtYnVnZml4LTEwODA3MS1wcml2YXRlLXN0ZGVyci50eHRV
VAUAA6AZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAABYW5Jsr29DL4HAACGZQAAMwAYAAAA
AAAAAAAApIFPORYAc3RvcmFnZS9pbmRleGVkZGIvcHJlZmV0Y2gtYnVnZml4LTEwODA3MS1zdGRl
cnIudHh0VVQFAAOhGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAAWFuSVhLVHBmEgAAJOYG
ADoAGAAAAAAAAAAAAKSBekEWAHN0b3JhZ2UvaW5kZXhlZGRiL3ByZWZldGNoLWludmFsaWRhdGlv
bi1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6IZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAD
YW5J382jT2MUAAA9PQcAMgAYAAAAAAAAAAAApIFUVBYAc3RvcmFnZS9pbmRleGVkZGIvcHJlZmV0
Y2gtaW52YWxpZGF0aW9uLXN0ZGVyci50eHRVVAUAA6UZKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAADYW5JOKSuma0GAADQWAAAMgAYAAAAAAAAAAAApIEjaRYAc3RvcmFnZS9pbmRleGVkZGIv
cHJlZmV0Y2gtcmFjZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6UZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAADYW5J1Pmrs54GAAB8VAAAKgAYAAAAAAAAAAAApIE8cBYAc3RvcmFnZS9pbmRl
eGVkZGIvcHJlZmV0Y2gtcmFjZS1zdGRlcnIudHh0VVQFAAOlGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgAA2FuSVFE/PQLBgAAZUAAAEYAGAAAAAAAAAAAAKSBPncWAHN0b3JhZ2UvaW5kZXhl
ZGRiL3ByaW1hcnkta2V5LXVuaXF1ZS10by1vYmplY3RzdG9yZS1wcml2YXRlLXN0ZGVyci50eHRV
VAUAA6UZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADYW5JZ9APfEYGAABISQAAPgAYAAAA
AAAAAAAApIHJfRYAc3RvcmFnZS9pbmRleGVkZGIvcHJpbWFyeS1rZXktdW5pcXVlLXRvLW9iamVj
dHN0b3JlLXN0ZGVyci50eHRVVAUAA6YZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAADYW5J
Z79GovIEAACJIAAANAAYAAAAAAAAAAAApIGHhBYAc3RvcmFnZS9pbmRleGVkZGIvcXVldWVkLWNv
bW1hbmRzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADphkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAANhbkkDVpLlgwUAAEYiAAAsABgAAAAAAAAAAACkgeeJFgBzdG9yYWdlL2luZGV4ZWRkYi9x
dWV1ZWQtY29tbWFuZHMtc3RkZXJyLnR4dFVUBQADphkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAANhbkl3nqhLgAUAACMgAAAtABgAAAAAAAAAAACkgdCPFgBzdG9yYWdlL2luZGV4ZWRkYi9y
ZWFkb25seS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6YZKlh1eAsAAQT1AQAABBQAAABQSwECHgMU
AAIACAADYW5J0vlbnEcDAACcDwAAOAAYAAAAAAAAAAAApIG3lRYAc3RvcmFnZS9pbmRleGVkZGIv
cmVhZG9ubHktcHJvcGVydGllcy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6YZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAADYW5JyMSRsqYDAAA4EQAAMAAYAAAAAAAAAAAApIFwmRYAc3RvcmFn
ZS9pbmRleGVkZGIvcmVhZG9ubHktcHJvcGVydGllcy1zdGRlcnIudHh0VVQFAAOmGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgABGFuSXpgfPG9BQAAtSAAACUAGAAAAAAAAAAAAKSBgJ0WAHN0
b3JhZ2UvaW5kZXhlZGRiL3JlYWRvbmx5LXN0ZGVyci50eHRVVAUAA6cZKlh1eAsAAQT1AQAABBQA
AABQSwECHgMUAAIACAAEYW5J4zkx4WkGAAAbLQAAOwAYAAAAAAAAAAAApIGcoxYAc3RvcmFnZS9p
bmRleGVkZGIvcmVxdWVzdC1jb250aW51ZS1hYm9ydC1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6cZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAEYW5JIPUJtWsGAAAuKwAAMwAYAAAAAAAAAAAA
pIF6qhYAc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1jb250aW51ZS1hYm9ydC1zdGRlcnIudHh0
VVQFAAOnGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgABGFuSStO7b4jBgAAC0EAAD4AGAAA
AAAAAAAAAKSBUrEWAHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3QtZXZlbnQtcHJvcGFnYXRpb24t
cHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOnGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgABGFu
SVIovJA5BgAAVz8AADYAGAAAAAAAAAAAAKSB7bcWAHN0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
ZXZlbnQtcHJvcGFnYXRpb24tc3RkZXJyLnR4dFVUBQADqBkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAARhbkldIFV9AgYAAM8pAAA5ABgAAAAAAAAAAACkgZa+FgBzdG9yYWdlL2luZGV4ZWRk
Yi9yZXF1ZXN0LXJlc3VsdC1jYWNoZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6gZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAAEYW5JtgQKfScGAACdKQAAMQAYAAAAAAAAAAAApIELxRYAc3Rv
cmFnZS9pbmRleGVkZGIvcmVxdWVzdC1yZXN1bHQtY2FjaGUtc3RkZXJyLnR4dFVUBQADqBkqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAARhbknT8tSpwQQAAIkhAAA4ABgAAAAAAAAAAACkgZ3L
FgBzdG9yYWdlL2luZGV4ZWRkYi9zZXRfdmVyc2lvbl9ibG9ja2VkLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADqBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAARhbkmgjnIoKwUAAHsjAAAwABgA
AAAAAAAAAACkgdDQFgBzdG9yYWdlL2luZGV4ZWRkYi9zZXRfdmVyc2lvbl9ibG9ja2VkLXN0ZGVy
ci50eHRVVAUAA6gZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAFYW5JARS0kJ0EAABwKAAA
TgAYAAAAAAAAAAAApIFl1hYAc3RvcmFnZS9pbmRleGVkZGIvc2V0dmVyc2lvbi1ibG9ja2VkLWJ5
LXZlcnNpb25jaGFuZ2UtY2xvc2UtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOpGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgABWFuSQrXo26FBAAAICoAAEYAGAAAAAAAAAAAAKSBitsWAHN0b3Jh
Z2UvaW5kZXhlZGRiL3NldHZlcnNpb24tYmxvY2tlZC1ieS12ZXJzaW9uY2hhbmdlLWNsb3NlLXN0
ZGVyci50eHRVVAUAA6kZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAFYW5JitjP6ZwEAAAj
JwAAOwAYAAAAAAAAAAAApIGP4BYAc3RvcmFnZS9pbmRleGVkZGIvc2V0dmVyc2lvbi1ub3QtYmxv
Y2tlZC1wcml2YXRlLXN0ZGVyci50eHRVVAUAA6kZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAAFYW5JqndpxcMEAAAWJwAAMwAYAAAAAAAAAAAApIGg5RYAc3RvcmFnZS9pbmRleGVkZGIvc2V0
dmVyc2lvbi1ub3QtYmxvY2tlZC1zdGRlcnIudHh0VVQFAAOpGSpYdXgLAAEE9QEAAAQUAAAAUEsB
Ah4DFAACAAgABmFuSd0siOzyDgAAsmIEADUAGAAAAAAAAAAAAKSB0OoWAHN0b3JhZ2UvaW5kZXhl
ZGRiL3N0cnVjdHVyZWQtY2xvbmUtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOrGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAB2FuSfp2VfySDgAAO2oEAC0AGAAAAAAAAAAAAKSBMfoWAHN0b3Jh
Z2UvaW5kZXhlZGRiL3N0cnVjdHVyZWQtY2xvbmUtc3RkZXJyLnR4dFVUBQADrRkqWHV4CwABBPUB
AAAEFAAAAFBLAQIeAxQAAgAIAAdhbkmXpAS24wUAAB4mAAAuABgAAAAAAAAAAACkgSoJFwBzdG9y
YWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hYm9ydC1zdGRlcnIudHh0VVQFAAOtGSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgAB2FuSXJc56rpCQAAQNUAADwAGAAAAAAAAAAAAKSBdQ8XAHN0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFjdGl2ZS1mbGFnLXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADrhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAdhbkmZXPSkkgoAABPkAAA0ABgA
AAAAAAAAAACkgdQZFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hY3RpdmUtZmxhZy1z
dGRlcnIudHh0VVQFAAOuGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACGFuSbwrAB3XBQAA
MDsAADwAGAAAAAAAAAAAAKSB1CQXAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFmdGVy
LWNsb3NlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADrxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAAhhbkmHIk6F0wUAAM86AAA0ABgAAAAAAAAAAACkgSErFwBzdG9yYWdlL2luZGV4ZWRkYi90
cmFuc2FjdGlvbi1hZnRlci1jbG9zZS1zdGRlcnIudHh0VVQFAAOvGSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgACGFuSVe+1S30BgAAN3EAAEYAGAAAAAAAAAAAAKSBYjEXAHN0b3JhZ2UvaW5k
ZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9yZS1jYWxscy1wcml2YXRlLXN0ZGVyci50
eHRVVAUAA68ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAIYW5JCJAVtAEHAAAlfgAAPgAY
AAAAAAAAAAAApIHWOBcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVjdHN0
b3JlLWNhbGxzLXN0ZGVyci50eHRVVAUAA68ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAI
YW5JS51nPmYIAADrowAANwAYAAAAAAAAAAAApIFPQBcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tYmFzaWNzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADsBkqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAAhhbkmRxsxN2AgAANOrAAAvABgAAAAAAAAAAACkgSZJFwBzdG9yYWdlL2luZGV4
ZWRkYi90cmFuc2FjdGlvbi1iYXNpY3Mtc3RkZXJyLnR4dFVUBQADsBkqWHV4CwABBPUBAAAEFAAA
AFBLAQIeAxQAAgAIAAhhbknx11WJFAUAADYpAABXABgAAAAAAAAAAACkgWdSFwBzdG9yYWdlL2lu
ZGV4ZWRkYi90cmFuc2FjdGlvbi1jb21wbGV0ZS13aXRoLWpzLXJlY3Vyc2lvbi1jcm9zcy1mcmFt
ZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA7AZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAJ
YW5JyNCU+6EFAAAiKQAATwAYAAAAAAAAAAAApIEMWBcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tY29tcGxldGUtd2l0aC1qcy1yZWN1cnNpb24tY3Jvc3MtZnJhbWUtc3RkZXJyLnR4dFVU
BQADsRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlhbknwDd4lbwUAAOwoAABLABgAAAAA
AAAAAACkgTZeFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1jb21wbGV0ZS13aXRoLWpz
LXJlY3Vyc2lvbi1wcml2YXRlLXN0ZGVyci50eHRVVAUAA7EZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAJYW5JTdCUVKQFAAAiKQAAQwAYAAAAAAAAAAAApIEqZBcAc3RvcmFnZS9pbmRleGVk
ZGIvdHJhbnNhY3Rpb24tY29tcGxldGUtd2l0aC1qcy1yZWN1cnNpb24tc3RkZXJyLnR4dFVUBQAD
sRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlhbknWQuj3LwYAAEBQAABBABgAAAAAAAAA
AACkgUtqFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1jb21wbGV0ZS13b3JrZXJzLXBy
aXZhdGUtc3RkZXJyLnR4dFVUBQADsRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAlhbkk8
tV0n8QUAANxOAAA5ABgAAAAAAAAAAACkgfVwFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlv
bi1jb21wbGV0ZS13b3JrZXJzLXN0ZGVyci50eHRVVAUAA7IZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAJYW5JZqSSbmYGAAAUTQAATgAYAAAAAAAAAAAApIFZdxcAc3RvcmFnZS9pbmRleGVk
ZGIvdHJhbnNhY3Rpb24tY29vcmRpbmF0aW9uLWFjcm9zcy1kYXRhYmFzZXMtcHJpdmF0ZS1zdGRl
cnIudHh0VVQFAAOyGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACWFuSaX2bzNoBgAA9E4A
AEYAGAAAAAAAAAAAAKSBR34XAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNvb3JkaW5h
dGlvbi1hY3Jvc3MtZGF0YWJhc2VzLXN0ZGVyci50eHRVVAUAA7IZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAAJYW5Jt8qFdy8GAACkNgAATQAYAAAAAAAAAAAApIEvhRcAc3RvcmFnZS9pbmRl
eGVkZGIvdHJhbnNhY3Rpb24tY29vcmRpbmF0aW9uLXdpdGhpbi1kYXRhYmFzZS1wcml2YXRlLXN0
ZGVyci50eHRVVAUAA7IZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAKYW5JRzT2jBMBAAC1
AwAAPwAYAAAAAAAAAAAApIHlixcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tY3Jhc2gt
aW4tdGFza3MtcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAOzGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4D
FAACAAgACmFuSXXOoSUpAQAAMwQAADcAGAAAAAAAAAAAAKSBcY0XAHN0b3JhZ2UvaW5kZXhlZGRi
L3RyYW5zYWN0aW9uLWNyYXNoLWluLXRhc2tzLXN0ZGVyci50eHRVVAUAA7MZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAAKYW5Jc1o0N2kEAAAhGAAAPwAYAAAAAAAAAAAApIELjxcAc3RvcmFn
ZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tY3Jhc2gtb24tYWJvcnQtcHJpdmF0ZS1zdGRlcnIudHh0
VVQFAAOzGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACmFuSf85t3aOBAAA7hgAADcAGAAA
AAAAAAAAAKSB7ZMXAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWNyYXNoLW9uLWFib3J0
LXN0ZGVyci50eHRVVAUAA7QZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAKYW5JY/r73VIH
AAD3XwAANgAYAAAAAAAAAAAApIHsmBcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tZXJy
b3ItcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAO0GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgA
CmFuSdwkfeGbBwAArV0AAC4AGAAAAAAAAAAAAKSBrqAXAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5z
YWN0aW9uLWVycm9yLXN0ZGVyci50eHRVVAUAA7QZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAAKYW5J73c5kgMGAACbNAAAQgAYAAAAAAAAAAAApIGxqBcAc3RvcmFnZS9pbmRleGVkZGIvdHJh
bnNhY3Rpb24tZXZlbnQtcHJvcGFnYXRpb24tcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAO0GSpYdXgL
AAEE9QEAAAQUAAAAUEsBAh4DFAACAAgACmFuSSgU75wRBgAA1jMAADoAGAAAAAAAAAAAAKSBMK8X
AHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWV2ZW50LXByb3BhZ2F0aW9uLXN0ZGVyci50
eHRVVAUAA7QZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAALYW5Jjuc6nXQFAAD8LwAAOQAY
AAAAAAAAAAAApIG1tRcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tb3JkZXJpbmctcHJp
dmF0ZS1zdGRlcnIudHh0VVQFAAO1GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAC2FuSeTH
JQatBQAAuC8AADEAGAAAAAAAAAAAAKSBnLsXAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9u
LW9yZGVyaW5nLXN0ZGVyci50eHRVVAUAA7UZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAL
YW5JiRRlHicGAADUMwAAPAAYAAAAAAAAAAAApIG0wRcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tb3ZlcmxhcHBpbmctcHJpdmF0ZS1zdGRlcnIudHh0VVQFAAO1GSpYdXgLAAEE9QEAAAQU
AAAAUEsBAh4DFAACAAgAC2FuSXIyQgRnBgAAg0sAADQAGAAAAAAAAAAAAKSBUcgXAHN0b3JhZ2Uv
aW5kZXhlZGRiL3RyYW5zYWN0aW9uLW92ZXJsYXBwaW5nLXN0ZGVyci50eHRVVAUAA7UZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAALYW5JAN/NqhgGAACdMwAAOgAYAAAAAAAAAAAApIEmzxcA
c3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcmVhZC1vbmx5LXByaXZhdGUtc3RkZXJyLnR4
dFVUBQADtRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAthbkmIQ/FwhgYAAJk7AAAyABgA
AAAAAAAAAACkgbLVFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yZWFkLW9ubHktc3Rk
ZXJyLnR4dFVUBQADthkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAAthbkm1eUJKFwYAALlE
AABEABgAAAAAAAAAAACkgaTcFwBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1yZWFkd3Jp
dGUtZXhjbHVzaXZlLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADthkqWHV4CwABBPUBAAAEFAAAAFBL
AQIeAxQAAgAIAAthbklFVz03OQYAAB9EAAA8ABgAAAAAAAAAAACkgTnjFwBzdG9yYWdlL2luZGV4
ZWRkYi90cmFuc2FjdGlvbi1yZWFkd3JpdGUtZXhjbHVzaXZlLXN0ZGVyci50eHRVVAUAA7YZKlh1
eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAALYW5J8MAoPoIGAAD/MQAAOQAYAAAAAAAAAAAApIHo
6RcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcm9sbGJhY2stcHJpdmF0ZS1zdGRlcnIu
dHh0VVQFAAO2GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAC2FuSUIn4JbNBgAA0DIAADEA
GAAAAAAAAAAAAKSB3fAXAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXJvbGxiYWNrLXN0
ZGVyci50eHRVVAUAA7YZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYW5J3CxeXREGAAC3
RwAAQQAYAAAAAAAAAAAApIEV+BcAc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tc2NvcGUt
c2VxdWVuY2luZy1wcml2YXRlLXN0ZGVyci50eHRVVAUAA7cZKlh1eAsAAQT1AQAABBQAAABQSwEC
HgMUAAIACAAMYW5Jk4IyyeYFAADDQAAAOQAYAAAAAAAAAAAApIGh/hcAc3RvcmFnZS9pbmRleGVk
ZGIvdHJhbnNhY3Rpb24tc2NvcGUtc2VxdWVuY2luZy1zdGRlcnIudHh0VVQFAAO3GSpYdXgLAAEE
9QEAAAQUAAAAUEsBAh4DFAACAAgADGFuSSRu9HQMAwAAFA4AAEQAGAAAAAAAAAAAAKSB+gQYAHN0
b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXN0b3JlTmFtZXMtcmVxdWlyZWQtcHJpdmF0ZS1z
dGRlcnIudHh0VVQFAAO3GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADGFuSVwQ16l8AwAA
IRAAADwAGAAAAAAAAAAAAKSBhAgYAHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLXN0b3Jl
TmFtZXMtcmVxdWlyZWQtc3RkZXJyLnR4dFVUBQADtxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIAAxhbkl/T/hKsgQAAJIhAAA+ABgAAAAAAAAAAACkgXYMGABzdG9yYWdlL2luZGV4ZWRkYi91
bmJsb2NrZWQtdmVyc2lvbi1jaGFuZ2VzLXByaXZhdGUtc3RkZXJyLnR4dFVUBQADtxkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAxQAAgAIAAxhbkmkX3wGyAQAACIiAAA2ABgAAAAAAAAAAACkgaARGABz
dG9yYWdlL2luZGV4ZWRkYi91bmJsb2NrZWQtdmVyc2lvbi1jaGFuZ2VzLXN0ZGVyci50eHRVVAUA
A7cZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYW5J7Va7cSABAABRBAAALQAYAAAAAAAA
AAAApIHYFhgAc3RvcmFnZS9pbmRleGVkZGIvdW5wcmVmaXgtcHJpdmF0ZS1zdGRlcnIudHh0VVQF
AAO3GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADGFuSUvlVtd3BAAAHRcAADQAGAAAAAAA
AAAAAKSBXxgYAHN0b3JhZ2UvaW5kZXhlZGRiL3ZhbHVlLXVuZGVmaW5lZC1wcml2YXRlLXN0ZGVy
ci50eHRVVAUAA7gZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYW5J8cMUh2gFAABNHAAA
LAAYAAAAAAAAAAAApIFEHRgAc3RvcmFnZS9pbmRleGVkZGIvdmFsdWUtdW5kZWZpbmVkLXN0ZGVy
ci50eHRVVAUAA7gZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYW5JtPcrNUEFAACyLQAA
NQAYAAAAAAAAAAAApIESIxgAc3RvcmFnZS9pbmRleGVkZGIvdmFsdWVzLW9kZC10eXBlcy1wcml2
YXRlLXN0ZGVyci50eHRVVAUAA7gZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAMYW5JWMG1
aLkFAABzLwAALQAYAAAAAAAAAAAApIHCKBgAc3RvcmFnZS9pbmRleGVkZGIvdmFsdWVzLW9kZC10
eXBlcy1zdGRlcnIudHh0VVQFAAO4GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADWFuSZtA
+o29BQAA/C0AADkAGAAAAAAAAAAAAKSB4i4YAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hh
bmdlLWFib3J0LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADuRkqWHV4CwABBPUBAAAEFAAAAFBLAQIe
AxQAAgAIAA1hbkltK4pjigUAAFwuAAAxABgAAAAAAAAAAACkgRI1GABzdG9yYWdlL2luZGV4ZWRk
Yi92ZXJzaW9uLWNoYW5nZS1hYm9ydC1zdGRlcnIudHh0VVQFAAO5GSpYdXgLAAEE9QEAAAQUAAAA
UEsBAh4DFAACAAgADWFuSXJeZEzyAgAAwRoAAD8AGAAAAAAAAAAAAKSBBzsYAHN0b3JhZ2UvaW5k
ZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV2ZW50LWJhc2ljLXByaXZhdGUtc3RkZXJyLnR4dFVUBQAD
uRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA1hbklQoknW9QMAAJcnAAA3ABgAAAAAAAAA
AACkgXI+GABzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9uLWNoYW5nZS1ldmVudC1iYXNpYy1zdGRl
cnIudHh0VVQFAAO5GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgADWFuSY3mfxeuBQAAeDAA
ADkAGAAAAAAAAAAAAKSB2EIYAHN0b3JhZ2UvaW5kZXhlZGRiL3ZlcnNpb24tY2hhbmdlLWV2ZW50
LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADuRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIAA1h
bkn3vn6XKQUAANcpAAAxABgAAAAAAAAAAACkgflIGABzdG9yYWdlL2luZGV4ZWRkYi92ZXJzaW9u
LWNoYW5nZS1ldmVudC1zdGRlcnIudHh0VVQFAAO5GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgADWFuSQpfsLxFBQAAjTkAAD0AGAAAAAAAAAAAAKSBjU4YAHN0b3JhZ2UvaW5kZXhlZGRiL3Zl
cnNpb24tY2hhbmdlLWV4Y2x1c2l2ZS1wcml2YXRlLXN0ZGVyci50eHRVVAUAA7oZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAANYW5JDWqq8VUFAAClOwAANQAYAAAAAAAAAAAApIFJVBgAc3Rv
cmFnZS9pbmRleGVkZGIvdmVyc2lvbi1jaGFuZ2UtZXhjbHVzaXZlLXN0ZGVyci50eHRVVAUAA7oZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAAOYW5JnmFmIboDAADPFAAASQAYAAAAAAAAAAAA
pIENWhgAc3RvcmFnZS9pbmRleGVkZGIvdmVyc2lvbmNoYW5nZXJlcXVlc3QtYWN0aXZlZG9tb2Jq
ZWN0LXByaXZhdGUtc3RkZXJyLnR4dFVUBQADuxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAI
AA5hbkkT3fz79QMAAMkUAABBABgAAAAAAAAAAACkgUpeGABzdG9yYWdlL2luZGV4ZWRkYi92ZXJz
aW9uY2hhbmdlcmVxdWVzdC1hY3RpdmVkb21vYmplY3Qtc3RkZXJyLnR4dFVUBQADuxkqWHV4CwAB
BPUBAAAEFAAAAFBLAQIeAwoAAAAAAEhabkkAAAAAAAAAAAAAAAAPABgAAAAAAAAAEADtQbpiGABz
dG9yYWdlL3dlYnNxbC9VVAUAA/gNKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACzYG5JSxuB
NacAAADSAAAALQAYAAAAAAABAAAApIEDYxgAc3RvcmFnZS93ZWJzcWwvYWx0ZXItdG8taW5mby10
YWJsZS1zdGRlcnIudHh0VVQFAAMSGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAs2BuSUsb
gTWnAAAA0gAAADUAGAAAAAAAAQAAAKSBEWQYAHN0b3JhZ2Uvd2Vic3FsL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS1zdGRlcnIudHh0VVQFAAMSGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAs2BuSUsbgTWnAAAA0gAAAEYAGAAAAAAAAQAAAKSBJ2UYAHN0b3JhZ2Uvd2Vic3FsL2NoYW5n
ZS12ZXJzaW9uLW5vLWNyYXNoLW9uLXByZWZsaWdodC1mYWlsdXJlLXN0ZGVyci50eHRVVAUAAxIZ
Klh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACACzYG5JizZ/HbIAAABIAwAAKAAYAAAAAAABAAAA
pIFOZhgAc3RvcmFnZS93ZWJzcWwvY2hhbmdlLXZlcnNpb24tc3RkZXJyLnR4dFVUBQADEhkqWHV4
CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbklLG4E1pwAAANIAAAAyABgAAAAAAAEAAACkgWJn
GABzdG9yYWdlL3dlYnNxbC9jbG9zZS1kdXJpbmctc3RyZXNzLXRlc3Qtc3RkZXJyLnR4dFVUBQAD
ExkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbkmviBzXrQAAAKQBAAA0ABgAAAAAAAEA
AACkgXVoGABzdG9yYWdlL3dlYnNxbC9kYXRhYmFzZS1sb2NrLWFmdGVyLXJlbG9hZC1zdGRlcnIu
dHh0VVQFAAMTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtGBuSUsbgTWnAAAA0gAAACkA
GAAAAAAAAQAAAKSBkGkYAHN0b3JhZ2Uvd2Vic3FsL2VtcHR5LXN0YXRlbWVudC1zdGRlcnIudHh0
VVQFAAMTGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtGBuSUsbgTWnAAAA0gAAACoAGAAA
AAAAAQAAAKSBmmoYAHN0b3JhZ2Uvd2Vic3FsL2V4ZWN1dGUtc3FsLWFyZ3Mtc3RkZXJyLnR4dFVU
BQADFBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbklLG4E1pwAAANIAAAAyABgAAAAA
AAEAAACkgaVrGABzdG9yYWdlL3dlYnNxbC9leGVjdXRlLXNxbC1yb3dzQWZmZWN0ZWQtc3RkZXJy
LnR4dFVUBQADFBkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALRgbklLG4E1pwAAANIAAAA/
ABgAAAAAAAEAAACkgbhsGABzdG9yYWdlL3dlYnNxbC9leGVjdXRlc3FsLWFjY2VwdHMtb25seS1v
bmUtc3RhdGVtZW50LXN0ZGVyci50eHRVVAUAAxQZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIA
CAC1YG5JSxuBNacAAADSAAAALgAYAAAAAAABAAAApIHYbRgAc3RvcmFnZS93ZWJzcWwvaGFzaC1j
aGFuZ2Utd2l0aC14aHItc3RkZXJyLnR4dFVUBQADFhkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQA
AgAIALZgbkmviBzXrQAAAKQBAAA/ABgAAAAAAAEAAACkgeduGABzdG9yYWdlL3dlYnNxbC9tdWx0
aXBsZS1kYXRhYmFzZXMtZ2FyYmFnZS1jb2xsZWN0aW9uLXN0ZGVyci50eHRVVAUAAxcZKlh1eAsA
AQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5JaKQ3ObAAAAB2AgAARAAYAAAAAAABAAAApIENcBgA
c3RvcmFnZS93ZWJzcWwvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVz
LXN0ZGVyci50eHRVVAUAAxcZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5JSxuBNacA
AADSAAAALwAYAAAAAAABAAAApIE7cRgAc3RvcmFnZS93ZWJzcWwvbXVsdGlwbGUtdHJhbnNhY3Rp
b25zLXN0ZGVyci50eHRVVAUAAxcZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5JSxuB
NacAAADSAAAAKAAYAAAAAAABAAAApIFLchgAc3RvcmFnZS93ZWJzcWwvbnVsbC1jYWxsYmFja3Mt
c3RkZXJyLnR4dFVUBQADFxkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALZgbkmviBzXrQAA
AKQBAABIABgAAAAAAAEAAACkgVRzGABzdG9yYWdlL3dlYnNxbC9vcGVuLWRhdGFiYXNlLWNyZWF0
aW9uLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAUAAxgZKlh1eAsAAQT1AQAA
BBQAAABQSwECHgMUAAIACAC2YG5JizZ/HbIAAABIAwAAOQAYAAAAAAABAAAApIGDdBgAc3RvcmFn
ZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1jcmVhdGlvbi1jYWxsYmFjay1zdGRlcnIudHh0VVQFAAMY
GSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtmBuSUsbgTWnAAAA0gAAADUAGAAAAAAAAQAA
AKSBqHUYAHN0b3JhZ2Uvd2Vic3FsL29wZW4tZGF0YWJhc2UtZW1wdHktdmVyc2lvbi1zdGRlcnIu
dHh0VVQFAAMYGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAtmBuSUsbgTWnAAAA0gAAADQA
GAAAAAAAAQAAAKSBvnYYAHN0b3JhZ2Uvd2Vic3FsL29wZW4tZGF0YWJhc2UtZXhwYW5kLXF1b3Rh
LXN0ZGVyci50eHRVVAUAAxgZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC2YG5J/JzNswYB
AACuAgAAOQAYAAAAAAABAAAApIHTdxgAc3RvcmFnZS93ZWJzcWwvb3Blbi1kYXRhYmFzZS1zZXQt
ZW1wdHktdmVyc2lvbi1zdGRlcnIudHh0VVQFAAMYGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAAC
AAgAt2BuSa+IHNetAAAApAEAAEUAGAAAAAAAAQAAAKSBTHkYAHN0b3JhZ2Uvd2Vic3FsL29wZW4t
ZGF0YWJhc2Utd2hpbGUtdHJhbnNhY3Rpb24taW4tcHJvZ3Jlc3Mtc3RkZXJyLnR4dFVUBQADGRkq
WHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALdgbklLG4E1pwAAANIAAAA5ABgAAAAAAAEAAACk
gXh6GABzdG9yYWdlL3dlYnNxbC9wcml2YXRlLWJyb3dzaW5nLW5vcmVhZC1ub3dyaXRlLXN0ZGVy
ci50eHRVVAUAAxkZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC3YG5JaKQ3ObAAAAB2AgAA
RwAYAAAAAAABAAAApIGSexgAc3RvcmFnZS93ZWJzcWwvcmVhZC1hbmQtd3JpdGUtdHJhbnNhY3Rp
b25zLWRvbnQtcnVuLXRvZ2V0aGVyLXN0ZGVyci50eHRVVAUAAxkZKlh1eAsAAQT1AQAABBQAAABQ
SwECHgMUAAIACAC3YG5Jr4gc160AAACkAQAAQAAYAAAAAAABAAAApIHDfBgAc3RvcmFnZS93ZWJz
cWwvcmVhZC10cmFuc2FjdGlvbnMtcnVubmluZy1jb25jdXJyZW50bHktc3RkZXJyLnR4dFVUBQAD
GRkqWHV4CwABBPUBAAAEFAAAAFBLAQIeAxQAAgAIALdgbklLG4E1pwAAANIAAAAoABgAAAAAAAEA
AACkgep9GABzdG9yYWdlL3dlYnNxbC9zcWwtZGF0YS10eXBlcy1zdGRlcnIudHh0VVQFAAMaGSpY
dXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAt2BuSa+IHNetAAAApAEAAEEAGAAAAAAAAQAAAKSB
834YAHN0b3JhZ2Uvd2Vic3FsL3N0YXRlbWVudC1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3Js
ZC1zdGRlcnIudHh0VVQFAAMaGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAt2BuSUsbgTWn
AAAA0gAAADIAGAAAAAAAAQAAAKSBG4AYAHN0b3JhZ2Uvd2Vic3FsL3N0YXRlbWVudC1lcnJvci1j
YWxsYmFjay1zdGRlcnIudHh0VVQFAAMaGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAuGBu
Sa+IHNetAAAApAEAAEMAGAAAAAAAAQAAAKSBLoEYAHN0b3JhZ2Uvd2Vic3FsL3N0YXRlbWVudC1z
dWNjZXNzLWNhbGxiYWNrLWlzb2xhdGVkLXdvcmxkLXN0ZGVyci50eHRVVAUAAxsZKlh1eAsAAQT1
AQAABBQAAABQSwECHgMUAAIACAC4YG5JSxuBNacAAADSAAAAKgAYAAAAAAABAAAApIFYghgAc3Rv
cmFnZS93ZWJzcWwvc3VjY2Vzcy1jYWxsYmFjay1zdGRlcnIudHh0VVQFAAMbGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DFAACAAgAuGBuSUsbgTWnAAAA0gAAAEMAGAAAAAAAAQAAAKSBY4MYAHN0b3Jh
Z2Uvd2Vic3FsL3N1Y2Nlc3MtY2FsbGJhY2std2hlbi1wYWdlLWRlZmVycy1sb2FkaW5nLXN0ZGVy
ci50eHRVVAUAAxsZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC4YG5JSxuBNacAAADSAAAA
KQAYAAAAAAABAAAApIGHhBgAc3RvcmFnZS93ZWJzcWwvdGVzdC1hdXRob3JpemVyLXN0ZGVyci50
eHRVVAUAAxwZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC4YG5JSxuBNacAAADSAAAAPgAY
AAAAAAABAAAApIGRhRgAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24tY2FsbGJhY2stZXhjZXB0
aW9uLWNyYXNoLXN0ZGVyci50eHRVVAUAAxwZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC4
YG5Jr4gc160AAACkAQAAPQAYAAAAAAABAAAApIGwhhgAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rp
b24tY2FsbGJhY2staXNvbGF0ZWQtd29ybGQtc3RkZXJyLnR4dFVUBQADHBkqWHV4CwABBPUBAAAE
FAAAAFBLAQIeAxQAAgAIALlgbkmviBzXrQAAAKQBAABDABgAAAAAAAEAAACkgdSHGABzdG9yYWdl
L3dlYnNxbC90cmFuc2FjdGlvbi1lcnJvci1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1zdGRlcnIu
dHh0VVQFAAMdGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAuWBuSUsbgTWnAAAA0gAAADQA
GAAAAAAAAQAAAKSB/ogYAHN0b3JhZ2Uvd2Vic3FsL3RyYW5zYWN0aW9uLWVycm9yLWNhbGxiYWNr
LXN0ZGVyci50eHRVVAUAAx0ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC5YG5JSxuBNacA
AADSAAAALwAYAAAAAAABAAAApIETihgAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24tcHJvdG90
eXBlLXN0ZGVyci50eHRVVAUAAx0ZKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACAC5YG5Jr4gc
160AAACkAQAARQAYAAAAAAABAAAApIEjixgAc3RvcmFnZS93ZWJzcWwvdHJhbnNhY3Rpb24tc3Vj
Y2Vzcy1jYWxsYmFjay1pc29sYXRlZC13b3JsZC1zdGRlcnIudHh0VVQFAAMeGSpYdXgLAAEE9QEA
AAQUAAAAUEsBAh4DCgAAAAAAXVpuSQAAAAAAAAAAAAAAAAcAGAAAAAAAAAAQAO1BT4wYAHRhYmxl
cy9VVAUAAyEOKlh1eAsAAQT1AQAABBQAAABQSwECHgMUAAIACADUYG5JQs9u40MDAABYEwAAMwAY
AAAAAAABAAAApIGQjBgAdGFibGVzL3RhYmxlLXNlY3Rpb24tb3ZlcmZsb3ctY2xpcC1jcmFzaC1z
dGRlcnIudHh0VVQFAANQGSpYdXgLAAEE9QEAAAQUAAAAUEsBAh4DFAACAAgAVGFuSU+ViKaRAgAA
NxIAABkAGAAAAAAAAQAAAKSBQJAYAHdwdHdrX3Byb2Nlc3NfbG9nLm91dC50eHRVVAUAA0AaKlh1
eAsAAQT1AQAABBQAAABQSwUGAAAAAN4C3gI6bwEAJJMYAAAA
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294738</attachid>
            <date>2016-11-14 14:03:45 -0800</date>
            <delta_ts>2016-11-14 14:07:05 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>287596</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODY1MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNiArNjEzLDcgQEAKIAkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNw
cCAqLzsgfTsKIAkJMEZBN0E4RUMxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQTdBOEVFMThDRTRGRDgwMDUyMzcxRCAvKiBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZB
N0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi87
IH07CisJCTBGQURERDFEMUREMDFFREUwMDgyNzVFOCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFEREQxQzFE
RDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29wZS5oICovOyB9OwogCQkwRkFERTY3
MzFENEQyM0JFMDA3Njg0NTcgLyogSGVhcFV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1NyAvKiBIZWFwVXRp
bC5oICovOyB9OwogCQkwRkFGN0VGRDE2NUJBOTFCMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQUY3
RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRkFG
N0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMwMDksNiArMzAxMCw3IEBACiAJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVn
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUExOEI0MTNDODAwNTIz
NzFEIC8qIFJlZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBN0E4RUQxOENFNEZEODAwNTIzNzFEIC8qIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkFEREQxQzFERDAxRURDMDA4Mjc1RTggLyogUmVzdW1lVGhlV29ybGRTY29w
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bWVUaGVXb3JsZFNjb3Bl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQURFNjcyMUQ0RDIzQkMwMDc2ODQ1
NyAvKiBIZWFwVXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwVXRp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0
NTUgLyogSklURGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVERpc2Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGlzYXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01Njk2LDYgKzU2OTgsNyBAQAogCQkJCTBGQTc2MjAzMURCOTI0MjMw
MEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLywKIAkJCQlBRERCMUY2MjE4RDc3REI3MDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oICovLAogCQkJCTBGN0NGOTRFMURCRUVFODYwMDk4Q0MxMiAv
KiBSZWxlYXNlSGVhcEFjY2Vzc1Njb3BlLmggKi8sCisJCQkJMEZBREREMUMxREQwMUVEQzAwODI3
NUU4IC8qIFJlc3VtZVRoZVdvcmxkU2NvcGUuaCAqLywKIAkJCQlDMjI1NDk0MjE1RjdEQkFBMDA2
NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0QkE3OEYwMTNBQUI4OEYwMDVCN0My
QyAvKiBTbG90VmlzaXRvci5oICovLAogCQkJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBT
bG90VmlzaXRvcklubGluZXMuaCAqLywKQEAgLTc5MzMsNiArNzkzNiw3IEBACiAJCQkJMEZGQjky
MUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJz
ZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQURERDFEMUREMDFFREUwMDgyNzVF
OCAvKiBSZXN1bWVUaGVXb3JsZFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzNEMkIwQTFE
MzQzMTYyMDBCQTkxOEMgLyogSGVhcENlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZD
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMDA5OCw3ICsxMDEwMiw2IEBACiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZG
IC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUx
RDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAvKiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJ
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSW5saW5lQWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENy
YXMKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwogCiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gdmFsdWU7Ci0gICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0
LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKICAgICAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHZhbHVlKTsKICAgICAg
ICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1
b3VzU2hhcGUpKTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29s
IGxpbmtDb2RlSW5saW5lCiBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0pOwotCisgICAgCiAgICAgR1BSUmVnIGJhc2UgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJ
bmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFsdWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFs
dWVSZWdzKCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlBCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkp
OwogICAgICAgICBzdG9yYWdlID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgIH0KLQorICAgIAog
ICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpLCB2YWx1ZSk7CiAKQEAgLTI2NSw3ICsy
NjUsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVBcnJheUxlbmd0aChWCiAgICAgSlNW
YWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1ZVJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRj
aCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5mbyk7CiAKLSAgICBqaXQubG9hZDgoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoKTsKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgaml0LmFuZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHNj
cmF0Y2gpOwogICAgIGF1dG8gYnJhbmNoVG9TbG93UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gz
MigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYXJyYXktPmluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDEx
IEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX2FsbG9jYXRvcik7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNpdHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZSgpCiAgICAgICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBtX2lubGlu
ZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yKTsKICAgICAgICAgQVNTRVJUKCFtX3N0
cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghbV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICAgICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwogICAgICAgICBpZiAoaW5mZXJyZWRJbmxpbmVD
YXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSB7CkBAIC05
Niw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsK
ICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKKyAgICAgICAg
bV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFjaXR5OwogICAgIH0KIAogICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlKCkKQEAgLTEwNSwxMiArMTA5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgV1RG
Ojpsb2FkTG9hZEZlbmNlKCk7CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CiAgICAgfQotICAg
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KCkgeyByZXR1cm4gc3RydWN0dXJlKCktPmlubGluZUNh
cGFjaXR5KCk7IH0KKyAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1faW5s
aW5lQ2FwYWNpdHk7IH0KIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgbV9hbGxv
Y2F0b3IgPSAwOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX2lubGlu
ZUNhcGFjaXR5ID0gMDsKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKICAgICB9CiAKQEAgLTE0
NSw2ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAgTWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29k
ZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3N0cnVjdHVyZTsKKyAgICB1bnNpZ25l
ZCBtX2lubGluZUNhcGFjaXR5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgIHN3aXRjaCAobV90eXBlKSB7
CiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAgICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwot
ICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmxvYWQ4KEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NP
ZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAg
ICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsK
QEAgLTEyNTcsMTIgKzEyNTcsMTMgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNj
ZXNzR2VuZQogICAgICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxs
b2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAg
ICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+
IG9sZFNpemUpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChyZWFsbG9j
YXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdl
IGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9sZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAg
ICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFkIG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3Jh
Z2UpLgotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwotICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBz
Y3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCkBAIC0x
MjgxLDYgKzEyODIsOSBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgbmV3U2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGFsbG9jYXRpbmcgb3V0LW9mLWxp
bmUgdXNpbmcgYW4gb3BlcmF0aW9uLgogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJh
UmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKQEAgLTEzNTMsOCArMTM1Nyw3IEBAIHZvaWQgQWNjZXNzQ2Fz
ZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3
IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBsYXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1
cmVzIHRoYXQKICAgICAgICAgICAgIC8vIHdoYXRldmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMg
cG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29zZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAg
ICAgICAgLy8gcGF0aC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNj
cmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BS
LCBiYXNlR1BSKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdWludDMyX3Qgc3RydWN0
dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0dXJlKCktPmlkKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlm
eVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsNyArMTI0LDggQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgLy8gYnl0ZWNvZGUg
b3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4
ZWN1dGVkLgogICAgICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9u
IGlzIG5vdCB1c2VyLXZpc2libGUuCiAgICAgICAgICAgICBqaXQtPm1faml0LmxvYWQ4KAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjpp
bmRleGluZ1R5cGVPZmZzZXQoKSksIG1fc3RydWN0dXJlR1BSKTsKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5k
TWlzY09mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZUdQUik7CiAgICAgICAg
ICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAuZmlsbCgKICAgICAgICAgICAgICAgICBqaXQsIGpp
dC0+anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShtX3N0cnVjdHVyZUdQUiwgbV9hcnJheU1v
ZGUpKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODksNiArODg5LDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOyAv
LyBUaGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2UuCiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF90eXBlSW5mb1R5cGUpOwogICAgICAgICB3
cml0ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMjA4
NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihzY3JhdGNoMSwgYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVy
ZUlEKCkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoMSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gx
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Mo
c2NyYXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgp
KSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sc2hp
ZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAgIG1faml0Lm9yMzIoc2Ny
YXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRk
cmVzc09mQXJyYXlNb2RlcygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDEs
IGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2Vs
bDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgbV9q
aXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubHNoaWZ0MzIoc2NyYXRjaDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gyLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVz
cyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MDYsOSArNTA2LDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICBK
U0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CiAKLSAgICAgICAgaWYgKHByb3BlcnR5
LmlzVUludDMyKCkpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZ2V0QnlWYWwoZXhlYywgYmFzZSwgcHJvcGVydHkuYXNVSW50MzIoKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNEb3VibGUoKSkgeworICAgICAgICBlbHNlIGlm
IChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CiAgICAgICAgICAgICBkb3VibGUgcHJvcGVydHlBc0Rv
dWJsZSA9IHByb3BlcnR5LmFzRG91YmxlKCk7CiAgICAgICAgICAgICB1aW50MzJfdCBwcm9wZXJ0
eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5QXNEb3VibGUpOwogICAg
ICAgICAgICAgaWYgKHByb3BlcnR5QXNVSW50MzIgPT0gcHJvcGVydHlBc0RvdWJsZSAmJiBpc0lu
ZGV4KHByb3BlcnR5QXNVSW50MzIpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTAsMTYgKzYxMCwzNCBAQCBDb21waWxhdGlv
bktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBDb21waWxhdGlvbktleShjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2Nrcygp
Cit2b2lkIFBsYW46Om1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsK
KyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxv
Y2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdl
IG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBD
b2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCisKKyAgICBzbG90VmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2spOworICAgIHNsb3RWaXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CisgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrKQorICAgICAgICBzbG90VmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihwcm9maWxlZERGR0NvZGVCbG9jayk7
Cit9CisKK3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKK3sKKyAgICBpZiAo
IWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICAv
LyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91
dCBwZXJmb3JtaW5nCiAgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8g
YmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CiAgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tz
IG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCiAKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jaykt
PndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAgIEhlYXA6OmhlYXAoY29kZUJsb2NrKS0+d3Jp
dGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOwogICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKLSAgICAgICAgSGVh
cDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jayktPndyaXRlQmFycmllcihwcm9maWxlZERGR0Nv
ZGVCbG9jayk7CisgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJs
b2NrKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxh
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAko
d29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0g
ICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNs
b3RWaXNpdG9yJik7CisgICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKICAgICB2b2lk
IGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMDIsNiArNDEwMiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgLy8gUmFyZSBkYXRhIGlz
IG9ubHkgdXNlZCB0byBhY2Nlc3MgdGhlIGFsbG9jYXRvciAmIHN0cnVjdHVyZQogICAgICAgICAv
LyBXZSBjYW4gYXZvaWQgdXNpbmcgYW4gYWRkaXRpb25hbCBHUFIgdGhpcyB3YXkKICAgICAgICAg
R1BSUmVnIHJhcmVEYXRhR1BSID0gc3RydWN0dXJlR1BSOworICAgICAgICBHUFJSZWcgaW5saW5l
Q2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd1BhdGg7CiAKQEAgLTQxMTMsNiArNDExNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0
cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGFsbG9jYXRvckdQUikpOwogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIG51bGxwdHIsIGFsbG9jYXRvckdQ
Uiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBh
Y2l0eUdQUik7CisgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1
bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKKyAgICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7
CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5s
aW5lQ2FwYWNpdHkoKSkpOwogICAgICAgICAKQEAgLTQxMzcsNiArNDE0Myw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFs
bG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93
UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRH
UFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG1faml0Lm11dGF0b3JG
ZW5jZSgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwog
ICAgICAgICAKQEAgLTU5NjEsMTEgKzU5NjksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFsbG9jYXRlTmV3QQogICAgIG1faml0LnN0b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQpKTsKICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9vcCwgJm1faml0KTsKICAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAgICAgICAgIAorICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24oaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgIAorICAgIAogICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9y
YWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAKKyAgICBt
X2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6
Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRvcldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdl
bmVyYXRvcj4oCiAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRo
U2l6ZSwgcmVzdWx0R1BSLAogICAgICAgICBzdHJ1Y3R1cmUsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QWxsb2NhdGVSYXdPYmplCiAgICAgaWYgKGFsbG9jYXRvclB0cikgewogICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGVt
aXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBzY3JhdGNoR1BSLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3JhZ2VHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2Fz
ZXMpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BS
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0gZWxzZQogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKQEAgLTE2Miw2ICsxNjMsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3T2JqZQogICAgIAogICAgIGlmIChoYXNJbmRl
eGluZ0hlYWRlcikKICAgICAgICAgbV9qaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIobnVtRWxlbWVu
dHMpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAKKyAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9m
TGluZVN0b3JhZ2Uoc3RvcmFnZUdQUiwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
KyAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEdldExlbmd0aChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVn
IGxlbmd0aEdQUiwgYm9vbCBpbmNsdWRlVGhpcykKQEAgLTgzOCw3ICs4NDMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUqIG5vCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgICAgICBtX2ppdC5sb2FkOChNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgp
KSwgdGVtcEdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCAwLAogICAgICAgICAgICAganVt
cFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwpA
QCAtOTAyLDcgKzkwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUqIG5v
ZGUKICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgbV9qaXQubG9hZDgoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFu
ZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAgICAKICAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2Rl
KCkpKTsKICAgICB9CkBAIC0zOTMwLDYgKzM5MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWFrZVJvcGUoTm9kCiAgICAgfQogICAgIG1faml0LnN0b3JlMzIoYWxsb2NhdG9yR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSk7CiAgICAgCisgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgCiAgICAgc3dpdGNo
IChudW1PcEdQUnMpIHsKICAgICBjYXNlIDI6CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbCgKQEAgLTM5NDMsNyArMzk1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTYzNTUsNiArNjM2Miw4IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgU3BlY3UKICAgICBtX2ppdC5zdG9yZVB0cihzY29wZUdQ
UiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBvZmZzZXRPZlNjb3BlQ2hhaW4pKTsK
ICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldE9mRXhlY3V0YWJsZSkpOwogICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
b2Zmc2V0T2ZSYXJlRGF0YSkpOworICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24oTm9kZSogbm9kZSkKQEAg
LTY1NDYsNiArNjU1NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3Rp
dmEKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAgIHJl
c3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZz
ZXQoaSkpKSk7CiAgICAgfQorICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKQEAgLTY2MjUsNyArNjYz
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNp
emUobWluQ2FwYWNpdHkpKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAKICAgICAgICAgZW1pdEFs
bG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCiAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc2NyYXRjaDFHUFIsIHNjcmF0
Y2gxR1BSLCBzY3JhdGNoMkdQUiwKICAgICAgICAgICAgIHNsb3dQYXRoKTsKQEAgLTY2NDAsNyAr
NjY1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAg
ICAgCiAgICAgbV9qaXQuc3RvcmVQdHIoCiAgICAgICAgIFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJy
aWRlcygpKSk7Ci0gICAgICAgIAorICAgIAogICAgIGlmIChsZW5ndGhJc0tub3duKSB7CiAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAt
NjcwNSw2ICs2NzE2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVj
dAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgfQogICAgICAgICAKKyAgICBt
X2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOwogfQogCkBAIC02OTEzLDcgKzY5MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3ByZWFkKE5vZGUqCiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCi0gICAgICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFy
Z3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDFHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxs
OjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2gxR1BSKTsK
ICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKEludDMyU2hhcGUpLCBzY3JhdGNoMUdQ
Uik7CiAKQEAgLTY5MzMsNyArNjk0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
cHJlYWQoTm9kZSoKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKIAot
ICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlND
ZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKTsKKyAgICAgICAgbV9qaXQu
bG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDJHUFIpOwogICAgICAgICBtX2ppdC5hbmQzMihU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoMkdQUik7CiAgICAgICAgIGF1
dG8gaXNEb3VibGVBcnJheSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
c2NyYXRjaDJHUFIsIFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOwogCkBAIC02OTY3LDYgKzY5
ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGxlbmd0aEdQ
UikubGlua1RvKGxvb3BTdGFydCwgJm1faml0KTsKICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0Lm11dGF0b3JG
ZW5jZSgpOwogCiAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1faml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9u
U3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIGFyZ3VtZW50KSk7CkBAIC03Mzg1LDExICs3NDAw
LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0
Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwog
ICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOworICAgIAorICAgIGZvciAocHRyZGlmZl90
IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNl
dCArPSBzaXplb2Yodm9pZCopKQorICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRy
KDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2Yo
SlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOworICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5j
ZSgpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1Bh
dGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdp
dGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIxKSk7CiAKICAgICBtX2ppdC5zdG9yZVB0cihz
Y3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSk7CisgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CiAKICAgICBzdG9yYWdl
UmVzdWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0KQEAgLTc0MzUsNiArNzQ1Niw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHIKICAgICAKICAgICBtX2ppdC5hZGRQ
dHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCisgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0
ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihuZXdTaXplKTsgb2Zm
c2V0ICs9IHNpemVvZih2b2lkKikpCisgICAgICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVv
ZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7CisKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkp
KTsKIApAQCAtNzQ0Myw3ICs3NDY3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
YWxsb2NhdGVQcgogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9s
ZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkp
LCBzY3JhdGNoR1BSMik7CiAgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CisgICAgICAgIAorICAgIG1faml0LnN0b3JlQnV0dGVyZmx5KHNjcmF0Y2hHUFIxLCBi
YXNlR1BSKTsKIAogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5vZGUpOwogfQpAQCAt
NzczMSw2ICs3NzU2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09i
agogICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTV3JhcHBlck9iamVj
dDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7CiAjZW5kaWYKICAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsK
KyAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCiAgICAgICAgIHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QsIHJlc3VsdEdQUiwgb3BlcmFu
ZEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAgICAKQEAgLTc4MDgsNiArNzgzNSw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmEKICAgICAgICAgVHJ1c3RlZElt
bTMyKEZhc3RUeXBlZEFycmF5KSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpKTsKICAgICAKKyAgICBt
X2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoCiAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uTmV3VHlwZWRBcnJh
eVdpdGhTaXplRm9yVHlwZSh0eXBlKSwKICAgICAgICAgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNp
emVHUFIsIHN0b3JhZ2VHUFIpKTsKQEAgLTg4NzYsNyArODkwNSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAgICBpZiAoaXNGZW5jZWQpIHsKICAgICAgICAg
b2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2goYmFzZUdQUiwgc2NyYXRjaDFHUFIpKTsKICAg
ICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vRmVuY2UgPSBtX2ppdC5qdW1wSWZC
YXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCgpOwogICAgICAg
ICBtX2ppdC5tZW1vcnlGZW5jZSgpOwogICAgICAgICBvay5hcHBlbmQobV9qaXQuYmFycmllckJy
YW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CiAgICAgICAgIG5vRmVuY2UubGluaygmbV9qaXQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIGlm
ICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgpKQogICAgICAgICAgICAgbGV2ZWwgPSBGVEw6
OkNhbkNvbXBpbGU7Ci0KKyAgICAgICAgCiAgICAgICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExv
b3BzKCk7CiAgICAgICAgIE5hdHVyYWxMb29wcyYgbmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9u
YXR1cmFsTG9vcHM7CiAgICAgICAgIEhhc2hNYXA8Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25l
ZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50ID0gYnVpbGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAo
bmF0dXJhbExvb3BzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR1dvcmtsaXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLQogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRl
LmgiCiAjaW5jbHVkZSAiREZHU2FmZXBvaW50LmgiCkBAIC0zOCw2ICszNiw4IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFz
cyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGlj
OgogICAgIFRocmVhZEJvZHkoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29y
a2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGlj
VGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24sIGludCByZWxhdGl2ZVByaW9yaXR5KQpAQCAtMzQ5
LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAg
ICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogfQogCit2b2lkIFdvcmtsaXN0Ojpt
YXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAgICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0gbV9wbGFucy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4t
PnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBwbGFuLT5tYXJrQ29k
ZUJsb2NrcyhzbG90VmlzaXRvcik7CisgICAgfQorfQorCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJl
ckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwpA
QCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQgV29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0KICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdldCgpOwogICAgICAgICBpZiAo
cGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2NrcygpOworICAgICAgICBwbGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0p
OwogICAgIH0KIH0KIApAQCAtNTUzLDYgKzU2NCwxNCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNG
b3JWTShWTSYgdm0pCiAgICAgfQogfQogCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVt
YmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29y
a2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAg
ICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJsb2Nrcyh2bSwgc2xvdFZpc2l0b3IpOworICAgIH0KK30K
Kwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewpAQCAtNTYxLDcgKzU4MCwyMiBA
QCB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCiAgICAgfQogfQogCi19IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKKwordm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKQoreworfQorCit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xv
dFZpc2l0b3ImKQoreworfQorCit2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAorfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9u
IDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJM
RShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1RocmVhZERh
dGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGljVGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4IEBA
IGNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdf
SklUKQorCiBjbGFzcyBXb3JrbGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBw
dWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7IE5vdEtub3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07
CkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxS
ZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7
CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKICAgICB2b2lk
IHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogCiAgICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0Zv
clZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2Myw5ICsxNjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0JiBl
eGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQogICAgIHJldHVybiAqcmVzdWx0OwogfQogCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKIHZvaWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Cit2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQgQEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwbwogICAgICwgYWJzb2x1dGUoJnJvb3QsICJhYnNvbHV0ZSIpCiB7CiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxpY2l0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBT
dHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4KLSAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2Vs
bF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMSA9PSBKU0NlbGxf
dHlwZUluZm9UeXBlLm9mZnNldCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhp
bmdUeXBlLm9mZnNldCgpICsgMiA9PSBKU0NlbGxfdHlwZUluZm9GbGFncy5vZmZzZXQoKSk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlND
ZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5k
ZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSAmIChzaXplb2YoaW50MzJfdCkgLSAxKSkpOworICAg
IFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMSA9
PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0Nl
bGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSArIDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxh
Z3Mub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRN
aXNjLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2VsbFN0YXRlLm9mZnNldCgpKTsKIAogICAgIEpT
Q2VsbF9zdHJ1Y3R1cmVJRC5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF9oZWFkZXIpOwogICAgIEpTQ2Vs
bF91c2VmdWxCeXRlcy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF9oZWFkZXIpOwotICAgIEpTQ2VsbF9p
bmRleGluZ1R5cGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOworICAgIEpTQ2Vs
bF9pbmRleGluZ1R5cGVBbmRNaXNjLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsK
ICAgICBKU0NlbGxfdHlwZUluZm9UeXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVz
KTsKICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxC
eXRlcyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxC
eXRlcyk7CkBAIC0xMzUsMjEgKzEzNSwyNyBAQCB2b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6
OmNvbXB1dGVSYW5nCiAgICAgICAgIGRhdGFMb2coIkFic3RyYWN0IEhlYXAgUmVwb3NpdG9yeTpc
biIpOwogICAgICAgICByb290LmRlZXBEdW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgfQorICAg
IAorICAgIGF1dG8gcmFuZ2VGb3IgPSBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCogaGVhcCkgLT4g
SGVhcFJhbmdlIHsKKyAgICAgICAgaWYgKGhlYXApCisgICAgICAgICAgICByZXR1cm4gaGVhcC0+
cmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgpOworICAgIH07CiAKICAgICBmb3Ig
KEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvck1lbW9yeSkKLSAgICAgICAgZW50cnkudmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpLT5zZXRSYW5nZShlbnRyeS5oZWFwLT5yYW5nZSgpKTsKKyAg
ICAgICAgZW50cnkudmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5zZXRSYW5nZShyYW5nZUZvcihl
bnRyeS5oZWFwKSk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2Fs
bFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLnJl
YWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxs
VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3Ig
KEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckNDYWxsV3JpdGUpCi0gICAgICAgIGVudHJ5
LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJh
bmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndy
aXRlcyA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5
IDogbV9oZWFwRm9yUGF0Y2hwb2ludFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRj
aHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAg
ICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigpLT5lZmZlY3RzLnJlYWRzID0g
cmFuZ2VGb3IoZW50cnkuaGVhcCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hl
YXBGb3JQYXRjaHBvaW50V3JpdGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBvaW50
VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAg
ZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSByYW5n
ZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZv
ckZlbmNlUmVhZCkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJlYWQg
PSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1
ZT4oKS0+cmVhZCA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZhbHVl
IGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPEZl
bmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnku
dmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDExIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2Nl
bGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9o
ZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxfaW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2Ms
IEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxs
X3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9u
X3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpT
RnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAgQ29t
bWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAgICAg
ICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOworICAgICAgICBkYXRh
TG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzg2
LDcgKzI3ODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAg
ICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdT
dHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsK
LQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRy
YW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
bV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3Ry
dWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5ld1N0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpOwpAQCAtMzk0NSw2ICszOTQ1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW2ld
KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbXV0YXRvckZlbmNlKCk7CisgICAgICAg
IAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RP
YmplY3QpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAt
NDAwMSw2ICs0MDAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1Bv
aW50ZXIoZXhlY3V0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRh
YmxlKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVj
dCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3JhcmVEYXRhKTsKICAgICAgICAgCisgICAgICAgIG11dGF0
b3JGZW5jZSgpOworICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAKQEAgLTQxMjksNiArNDEzMyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhlbmQsIGxhc3ROZXh0KTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgbXV0YXRvckZlbmNlKCk7CisgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgfQogICAgIApAQCAtNDE4Miw2ICs0MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChjdXJyZW50T2Zmc2V0LCBtX291dC5jb25zdElu
dDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShsb29wU3RhcnQpKTsKIAogICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00MjE2LDYgKzQyMjMsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVl
KGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgbXV0YXRvckZl
bmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKQEAgLTQyNjgs
NiArNDI3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOworICAgICAgICAgICAgbXV0YXRv
ckZlbmNlKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00
Mzc2LDYgKzQzODUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVl
KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ0MTcsNyArNDQy
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOwogCi0gICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdTaGFwZSA9IG1fb3V0
LmxvYWQ4WmVyb0V4dDMyKGFyZ3VtZW50LCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOwor
ICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nU2hhcGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihh
cmd1bWVudCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgICAgICAg
ICBpbmRleGluZ1NoYXBlID0gbV9vdXQuYml0QW5kKGluZGV4aW5nU2hhcGUsIG1fb3V0LmNvbnN0
SW50MzIoSW5kZXhpbmdTaGFwZU1hc2spKTsKICAgICAgICAgICAgIExWYWx1ZSBpc09LSW5kZXhp
bmdUeXBlID0gbV9vdXQuYmVsb3dPckVxdWFsKAogICAgICAgICAgICAgICAgIG1fb3V0LnN1Yihp
bmRleGluZ1NoYXBlLCBtX291dC5jb25zdEludDMyKEludDMyU2hhcGUpKSwKQEAgLTQ0ODYsNiAr
NDQ5Niw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICAgICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblNwcmVhZEdlbmVyaWMpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpOwog
CkBAIC00NTE4LDYgKzQ1MjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2hl
YXBzLmZvckluZGV4aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgbXV0YXRvckZlbmNlKCk7
CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNDU0Miw2ICs0NTU0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgcHVibGljTGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKS5hcnJheSk7Cisg
ICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTQ2MDksNiArNDYyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5zdG9yZTMyKHNpemUsIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVy
Vmlld19sZW5ndGgpOwogICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMy
KEZhc3RUeXBlZEFycmF5KSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X21vZGUpOwogICAgICAgICAgICAgCisgICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJl
c3VsdFZhbHVlKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIApAQCAt
NDg1MSw2ICs0ODY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5K
U1N0cmluZ19mbGFncyk7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCByZXN1bHQsIG1f
aGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKICAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgp
OwogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3Vs
dCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCkBAIC01MjI5
LDYgKzUyNDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9i
dXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFk
ZExhemlseSgKICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBA
IC01MjM2LDcgKzUyNTIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzdG9yYWdlID0g
c3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQu
b2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRh
LmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygp
LnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CkBA
IC01MjQ0LDcgKzUyNjQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB3ZWFrU3Ry
dWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgc3Rv
cmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50
Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTgxMDMsNiArODEyMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGhhdmVCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
ZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
cGxhdFdvcmRzKAorICAgICAgICAgICAgICAgICAgICBmYXN0QnV0dGVyZmx5VmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAtIDEpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKC0xKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRpZXMu
YXRBbnlOdW1iZXIoKSk7CiAKICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxl
bmd0aCwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgp
OwogICAgICAgICAgICAgICAgIApAQCAtODI1Nyw3ICs4MjgyLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVk
IG9uZS4KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBCaXRWZWN0
b3Igc2V0SW5saW5lT2Zmc2V0czsKICAgICAgICAgICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBl
bnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKSB7CiAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgICAgICAgICAgICAgIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIGRlc2Ny
aXB0b3IgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsKQEAgLTgyNjYsMTEgKzgyOTIsMjAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkZXNj
cmlwdG9yLmluZm8oKV0gIT0gZW50cnkua2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
YmFzZSA9IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7
CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBiYXNlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNJbmxpbmVPZmZzZXQoZW50cnkub2Zmc2V0KSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0SW5saW5lT2Zmc2V0cy5zZXQoZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJhc2UgPSBvYmplY3Q7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZSA9IGJ1dHRlcmZseTsKICAgICAgICAgICAgICAgICAgICAg
c3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIGRlc2NyaXB0b3IuaW5mbygpLCBlbnRyeS5v
ZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNldElubGluZU9m
ZnNldHMuZ2V0KGkpKQorICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0Lmlu
dDY0WmVybywgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
b2JqZWN0LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShpKSkpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7
CiAgICAgICAgICAgICBtX291dC5qdW1wKG91dGVyQ29udGludWF0aW9uKTsKQEAgLTgyODEsNiAr
ODMxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRl
ckNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKHBvaW50ZXJUeXBlKCksIHJlc3VsdHMpKTsKKyAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAg
ICAgfQogCiAgICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCkKQEAg
LTgzNTYsNiArODM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAor
ICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgc2V0SlNWYWx1ZShhY3RpdmF0aW9uKTsK
ICAgICB9CiAKQEAgLTg5MzQsNyArODk3MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGluaXRMb29wKTsKICAg
ICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsSW5kZXggPSBtX291dC5hbmNo
b3IoZW5kKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxQb2ludGVyID0gbV9vdXQu
YW5jaG9yKGJhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbFBvaW50ZXIgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5hZGQoYmFzZSwgbV9vdXQuc2hsKG1fb3V0
LnNpZ25FeHQzMlRvUHRyKGJlZ2luKSwgbV9vdXQuY29uc3RJbnQzMigzKSkpKTsKICAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGVuZCwgYmVnaW4pLCB1bnN1cmUoaW5pdExvb3Ap
LCB1bnN1cmUoaW5pdERvbmUpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlu
aXRMb29wLCBpbml0RG9uZSk7CkBAIC04OTYzLDcgKzkwMDEsMTMgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7Ci0gICAgICAgIG1f
b3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoLWluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAtIDEpLCBtX291dC5j
b25zdEludDMyKC0xKSwKKyAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9w
ZXJ0aWVzLmF0QW55TnVtYmVyKCkpOworICAgICAgICAKKyAgICAgICAgc2V0QnV0dGVyZmx5KHJl
c3VsdCwgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC04
OTkxLDcgKzkwMzUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxv
YWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVz
dWx0LCBvZmZzZXQpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJm
bHkpKTsKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoLW5ld1NpemUgLSAxKSwgbV9vdXQuY29uc3RJbnQzMigtb2xk
U2l6ZSAtIDEpLAorICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSk7CisgICAgICAgIAorICAgICAgICBzZXRCdXR0ZXJmbHkocmVzdWx0
LCBvYmplY3QpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC05
ODYxLDYgKzk5MTAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGFsbG9jYXRvciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRo
KQogICAgIHsKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3Is
IHN0cnVjdHVyZSwgc2xvd1BhdGgpOworICAgICAgICBzcGxhdFdvcmRzKAorICAgICAgICAgICAg
cmVzdWx0LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihKU0ZpbmFsT2JqZWN0OjpvZmZz
ZXRPZklubGluZVN0b3JhZ2UoKSAvIDgpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihK
U0ZpbmFsT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIDggKyBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpLAorICAgICAgICAgICAgbV9vdXQuaW50NjRaZXJvLAorICAgICAgICAg
ICAgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOwogICAgICAgICBtX291dC5zdG9y
ZVB0cihidXR0ZXJmbHksIHJlc3VsdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTExOTQzLDcgKzExOTk4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVl
IGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X2luZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQu
bG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3Mo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKQEAgLTEyNDM2LDcg
KzEyNDkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRo
OjpjcmVhdGVHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNGZW5jZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1wSWZCYXJyaWVyU3RvcmVM
b2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQubWVtb3J5RmVuY2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuYmFycmllckJy
YW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9GZW5jZS5saW5rKCZqaXQpOwpAQCAtMTI0OTcsNiArMTI1NTIsNjQgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoKQorICAgIHsKKyAgICAgICAgaWYgKGlzWDg2KCkp
IHsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9F
eHQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAuYWRkcmVzc09mTXV0YXRvclNob3VsZEJlRmVu
Y2VkKCkpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
QnV0dGVyZmx5KExWYWx1ZSBidXR0ZXJmbHksIExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAg
ICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwg
bnVsbHB0cik7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihidXR0ZXJmbHksIG9iamVjdCwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgbV9vdXQuZmVuY2UoJm1f
aGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoZmFzdFBhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NP
Zk11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgp
LCB1c3VhbGx5KGZhc3RQYXRoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1f
aGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAg
IG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSk7CisgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgogICAgIExWYWx1ZSB2bUNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1
bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAg
IGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQ
UkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdU
MSk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJv
ZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBq
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAg
aml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
OjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIs
IE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZB
cnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywxMSBAQCBMVmFsdWUgT3V0cHV0
OjpzaWduRXh0MzJUbzY0KExWYWx1ZSB2YWx1CiAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAor
TFZhbHVlIE91dHB1dDo6c2lnbkV4dDMyVG9QdHIoTFZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biBzaWduRXh0MzJUbzY0KHZhbHVlKTsKK30KKwogTFZhbHVlIE91dHB1dDo6emVyb0V4dChMVmFs
dWUgdmFsdWUsIExUeXBlIHR5cGUpCiB7CiAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gdHlwZSkK
QEAgLTQ0Niw5ICs0NTEsMTIgQEAgdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlw
ZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVtb3J5KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7
CiB9CiAKLUZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoKQorRmVuY2VWYWx1ZSogT3V0cHV0Ojpm
ZW5jZShjb25zdCBBYnN0cmFjdEhlYXAqIHJlYWQsIGNvbnN0IEFic3RyYWN0SGVhcCogd3JpdGUp
CiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9y
aWdpbigpKTsKKyAgICBGZW5jZVZhbHVlKiByZXN1bHQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8RmVu
Y2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7CisgICAgbV9oZWFwcy0+ZGVjb3JhdGVGZW5jZVJl
YWQocmVhZCwgcmVzdWx0KTsKKyAgICBtX2hlYXBzLT5kZWNvcmF0ZUZlbmNlV3JpdGUod3JpdGUs
IHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBPdXRwdXQ6OnN0b3JlMzJB
czgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3
IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgZG91YmxlVG9VSW50KExWYWx1ZSk7CiAKICAgICBMVmFs
dWUgc2lnbkV4dDMyVG82NChMVmFsdWUpOworICAgIExWYWx1ZSBzaWduRXh0MzJUb1B0cihMVmFs
dWUpOwogICAgIExWYWx1ZSB6ZXJvRXh0KExWYWx1ZSwgTFR5cGUpOwogICAgIExWYWx1ZSB6ZXJv
RXh0UHRyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gemVyb0V4dCh2YWx1ZSwgQjM6OkludDY0KTsg
fQogICAgIExWYWx1ZSBpbnRUb0RvdWJsZShMVmFsdWUpOwpAQCAtMTg5LDcgKzE5MCw3IEBAIHB1
YmxpYzoKIAogICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQg
c3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIpOwotICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgp
OworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZShjb25zdCBBYnN0cmFjdEhlYXAqIHJlYWQsIGNv
bnN0IEFic3RyYWN0SGVhcCogd3JpdGUpOwogCiAgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5
cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDE0ICs0MCw4IEBAIGVudW0gY2xhc3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAg
ICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBEdXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0
aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQgeWV0LgogICAgIE5ld1doaXRlID0gMSwKIAot
ICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5k
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdv
aW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4gZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRo
YXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgotICAgIE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhl
IG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVy
IGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBpcyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlz
IGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJy
ZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCi0gICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xk
R3JleSA9IDMKKyAgICAvLyBUaGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nh
bm5lZC4KKyAgICBHcmV5ID0gMiwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1Ro
cmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJlc2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRl
T3JCbGFjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRl
ZEFycmF5LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDU2VnbWVudGVkQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRl
OgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxk
U2NvcGUgeworcHVibGljOgorICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAg
ICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29u
Y3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5v
dygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1zLi4uXVxuIik7Cisg
ICAgICAgIAorICAgICAgICBtX2hlYXAucmVzdW1lVGhlV29ybGQoKTsKKyAgICB9CisgICAgCisg
ICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjps
b2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisKIG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25z
dCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICogTUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJh
Z2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNh
dGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAg
LCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6
Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JNYXJrU3Rh
Y2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0
KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0Pigp
KQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3RkOjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGlu
ZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUg
aGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04pCiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVj
dXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2so
c3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRv
ck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAgICwgbV9o
ZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkpCiAgICAgLCBtX3RocmVhZExvY2soQm94PExv
Y2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFkQ29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC0yODEsNiArMzEzLDExIEBAIEhlYXA6OkhlYXAoVk0qIHZt
LCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogSGVhcDo6fkhlYXAoKQogeworICAgIGZvciAoYXV0byYg
c2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBzbG90VmlzaXRv
ci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJN
YXJrU3RhY2tzKCk7CisgICAgbV9tdXRhdG9yTWFya1N0YWNrLT5jbGVhcigpOworICAgIAogICAg
IGZvciAoV2Vha0Jsb2NrKiBibG9jayA6IG1fbG9naWNhbGx5RW1wdHlXZWFrQmxvY2tzKQogICAg
ICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKnRoaXMsIGJsb2NrKTsKIH0KQEAgLTQxNiwxMiArNDUz
LDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNlKEpTQ2VsbCogY2VsbCwgQXIKIAogdm9pZCBI
ZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQogewotICAgIG1fc2xvdFZpc2l0b3IuaGFydmVz
dFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+aGFydmVzdFdl
YWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVhcDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmlu
YWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5maW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5h
bGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZmluYWxpemVVbmNvbmRpdGlv
bmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhlYXA6OndpbGxTdGFydEl0ZXJhdGluZygpCkBA
IC00MzksMTE3ICs0NzYsMTY0IEBAIHZvaWQgSGVhcDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiAj
aWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxG
b3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTSgqbV92bSk7Ci0jZW5kaWYKIH0KIAotdm9p
ZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQordm9pZCBIZWFwOjptYXJrVG9G
aXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7Ci0gICAgVGltaW5nU2NvcGUgbWFya1Jvb3Rz
VGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMiKTsKKyAgICBUaW1pbmdTY29wZSBt
YXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQiKTsK
ICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKG1fc2xvdFZpc2l0b3Ip
OworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IoKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VU
aW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBiZWZvcmUgY29udmVyZ2VuY2UiKTsK
KyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKSB7Cisg
ICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90Vmlz
aXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xl
YXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgREZHOjpyZW1lbWJl
ckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisgICAgYmVnaW5NYXJraW5nKCk7CiAKLSNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBz
YW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAg
ICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24gdGhlIGxvY2sgZnJvbSBub3cgdW50aWwgd2Un
cmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2luZyB0aGUgU2FtcGxpbmdQcm9maWxlcidzIGRh
dGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUKLSAgICAgICAgICAgIC8vIFNhbXBsaW5nUHJv
ZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0IHdhbnQgaXQgdG8gYWNjdW11bGF0ZQotICAg
ICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMgYmVmb3JlIHdlIGdldCB0aGUgY2hhbmNlIHRv
IG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlzIGxvY2sgaXMgcmVsZWFzZWQgaW5zaWRlIHZp
c2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0
TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZl
cmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKIAot
ICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKSB7
Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3Nsb3RW
aXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBiZWdpbk1hcmtp
bmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKLQot
ICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigKLSAgICAgICAgICAgIFt0aGlzXSAo
KSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yOwotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxl
bFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBh
cmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9yID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChXVEZNb3Zl
KG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMu
dGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVu
Y3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAgICBTbG90VmlzaXRvciogc2xv
dFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fYXZh
aWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3VmlzaXRvci5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNp
dG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNsb3RW
aXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy50YWtlTGFzdCgpOworICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKEdDVGhy
ZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1Ro
cmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3Ip
OwotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0
b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RW
aXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7
CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRv
cjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxv
Y2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3Jz
LmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJh
bGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxl
bFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0YXJ0TWFya2luZygpOwotICAgIH0K
LSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUgY29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhp
cywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5jZSIpOwotICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIAotICAgICAgICBtX3Nsb3RW
aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZGlk
U3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRzIGNvbmN1cnJlbnRUaW1lOworICAgIGRvdWJs
ZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9IDAuMTsKKyAgICBjb25zdCBkb3VibGUgcmF0
aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1RpbWUgaW5pdGlhbFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1lIHRvcE9mTG9vcFRpbWUgPSBpbml0aWFsVGlt
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbiA9IDE7IDsgKytpdGVyYXRpb24pIHsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJpIyIsIGl0
ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lVG9SZXN1bWUgPSB0b3BP
Zkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsK
KyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW8gKj0gcmF0aW9TdGVwOwogICAgICAg
ICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0
aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZhdGl2ZSBzY2FuIik7CisgICAgICAgICAgICBU
aW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Rv
Rml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsKICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJv
b3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsKICAgICAgICAgICAgIFN1cGVyU2FtcGxlclNj
b3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAgICAgICAgIGdhdGhlclN0YWNrUm9v
dHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAgICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhj
b25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNv
bnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIE5v
dyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdldCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4cG9p
bnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAgICAgICAgLy8gYWxsIG9mIHRoZW0uCisjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgq
bV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworI2VuZGlmCiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhpcyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUg
dGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tzIHRoYXQgYXJlCi0gICAgICAgICAgICAvLyBy
dW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICph
ZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBr
bm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuCi0gICAgICAgICAgICBt
X2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZyh0aGlzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZpc2l0RXh0ZXJuYWxSZW1lbWJlcmVkU2V0KCk7Ci0gICAgICAgIHZp
c2l0U21hbGxTdHJpbmdzKCk7Ci0gICAgICAgIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9v
dFZpc2l0b3IpOwotICAgICAgICB2aXNpdEFyZ3VtZW50QnVmZmVycyhoZWFwUm9vdFZpc2l0b3Ip
OwotICAgICAgICB2aXNpdEV4Y2VwdGlvbihoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNp
dFN0cm9uZ0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRIYW5kbGVTdGFj
ayhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAg
ICAgICAgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICAgICAgdmlzaXRTaGFkb3dDaGlja2VuKCk7
Ci0gICAgICAgIHRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpOwotICAgICAgICBt
X3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwot
ICAgIH0KLSAgICAKLSAgICBUaW1pbmdTY29wZSBwb3N0Q29udmVyZ2VuY2VUaW1pbmdTY29wZSgq
dGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBjb252ZXJnZW5jZSIpOwotCi0gICAgLy8gV2Vh
ayByZWZlcmVuY2VzIG11c3QgYmUgbWFya2VkIGxhc3QgYmVjYXVzZSB0aGVpciBsaXZlbmVzcyBk
ZXBlbmRzIG9uCi0gICAgLy8gdGhlIGxpdmVuZXNzIG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3Qg
Z3JhcGguCi0gICAgdmlzaXRXZWFrSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBp
ZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3Bl
KSkKKyAgICAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMo
Km1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAgICAgCisgICAgICAgIGZvciAoYXV0
byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9y
LnZpc2l0KCZwYWlyLmtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKG1fbWFya0xpc3RT
ZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQorICAgICAgICAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXI6Om1hcmtMaXN0cyhoZWFwUm9vdFZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICBpZiAobV92bS0+ZXhjZXB0aW9uKCkpCisgICAgICAgICAgICBoZWFw
Um9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOworICAgICAgICBp
ZiAobV92bS0+bGFzdEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZp
c2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24oKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKGhlYXBSb290VmlzaXRvcik7CisgICAg
ICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShT
QU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgaWYgKFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5n
UHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKSk7CisgICAgICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAg
ICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7Cisg
ICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2Nv
bGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKKyAgICAgICAgCisgICAgICAgIGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkK
KyAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxlckxvZygpLT52aXNpdCgqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgIG1fdm0tPnNoYWRvd0NoaWNr
ZW4oKS52aXNpdENoaWxkcmVuKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgbV9qaXRTdHViUm91dGluZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVz
KCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKworICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgZm9yIChhdXRvJiBw
YXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgcGFy
YWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKKworICAgICAgICBt
X29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKCk7CisgICAgICAgIERGRzo6bWFya0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgYm9vbCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5pc0VtcHR5KCkgJiYgbV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0
aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQorICAg
ICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRv
IGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jaworICAgICAgICAvLyBzbyB0aGF0
IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhp
cyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQorICAgICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90
aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIuIEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50
IHRvIGRvIHRoaXMKKyAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5n
IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0MgZ2V0cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKKyAg
ICAgICAgLy8gR0MuCisgICAgICAgIG1fY29kZUJsb2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5
RXhlY3V0aW5nKHRoaXMpOworICAgICAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7
CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgU2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBh
cmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3RvciB0aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCisg
ICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRoYXQncyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KKyAg
ICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFuc2ZlclRvKG1fY29sbGVjdG9yU2xvdFZpc2l0
b3ItPm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJMaXZl
IFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxl
Y3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JNYXJrU3RhY2soKS5zaXplKCksICIrIiwgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiAiKTsKKworICAg
ICAgICB7CisgICAgICAgICAgICBUaW1pbmdTY29wZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAi
SGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2luZyIpOworICAgICAgICAgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1f
Y29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFuZERyYWluKHRpbWVUb1Jlc3VtZSk7CisgICAg
ICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5SZXN1bHQgPQorICAg
ICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90
VmlzaXRvcjo6TWFzdGVyRHJhaW4sIHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBpZiAoZHJh
aW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAg
ICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29wZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFp
bigpOworICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBNb25vdG9uaWNUaW1lIHRpbWVPZlN0b3AgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKKyAgICAgICAgY29uY3VycmVudFRpbWUgPSB0aW1lT2ZTdG9wIC0gdGltZVRv
UmVzdW1lOworICAgICAgICB0b3BPZkxvb3BUaW1lID0gdGltZU9mU3RvcDsKKyAgICB9CiAKICAg
ICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsK
QEAgLTU2Myw3ICs2NDcsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRp
bWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9v
dHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMtPmNsZWFyTWFya3MoKTsKICAgICBtX21hY2hp
bmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGlu
ZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBAIC01OTAsNDkgKzY3MywyOCBAQCB2b2lkIEhlYXA6
OmJlZ2luTWFya2luZygpCiAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjpiZWdpbk1hcmtpbmciKTsKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlv
blNjb3BlOjpGdWxsKQogICAgICAgICBtX2NvZGVCbG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29s
bGVjdGlvbigpOwotICAgIAotICAgIHsKLSAgICAgICAgVGltaW5nU2NvcGUgY2xlYXJNYXJrc1Rp
bWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmciKTsKLSAgICAgICAg
bV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQotewotI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0g
ICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgbV9zbG90VmlzaXRvcik7Ci0jZW5k
aWYKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNtYWxsU3RyaW5ncygpCi17Ci0gICAgaWYgKCFtX3Zt
LT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRlZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKG1fc2xvdFZpc2l0b3IpOwotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU21hbGwgc3RyaW5nczpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKKyAgICBtX2ppdFN0
dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOworICAgIG1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5n
KCk7CisgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSB0cnVlOworICAgIG1fYmFycmllclRo
cmVzaG9sZCA9IHRhdXRvbG9naWNhbFRocmVzaG9sZDsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX3Nsb3RW
aXNpdG9yLmFwcGVuZChyb290cyk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5k
KHJvb3RzKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0aXZlIFJvb3RzOlxuIiwgbV9zbG90VmlzaXRv
cik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgICAgIGRhdGFM
b2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIH0K
IAogdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpCiB7CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldv
cmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChp
KS52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOworICAgICAgICBERkc6OmV4aXN0
aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsIG1fc2xvdFZpc2l0b3Ip
OworICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xpc3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZp
c2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTcwNSwxMzIgKzc2NywxMCBAQCB2b2lkIEhlYXA6OnJl
bW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyhICiAgICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0
UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKLSAgICAgICAgaGVhcFJvb3RW
aXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBH
Q0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxu
IiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7
Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRBcmd1bWVudEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIGlmICghbV9tYXJrTGlzdFNldCB8fCAhbV9tYXJrTGlzdFNldC0+c2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xp
c3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygp
ID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVy
czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFp
bigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBpZiAoIW1fdm0tPmV4Y2VwdGlvbigpICYmICFtX3ZtLT5sYXN0RXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVz
c09mRXhjZXB0aW9uKCkpOwotICAgIHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4
Y2VwdGlvbigpKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVy
Ym9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhjZXB0aW9uczpcbiIsIG1fc2xvdFZpc2l0b3IpOwot
Ci0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZp
c2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5k
bGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJTdHJvbmcgSGFu
ZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmRE
cmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU3RhY2sudmlzaXQodmlzaXRvcik7Ci0KLSAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRv
ci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0U2FtcGxpbmdQcm9maWxl
cigpCi17Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQotICAgIGlmIChTYW1wbGluZ1By
b2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0g
ICAgICAgIEFTU0VSVChzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkuaXNMb2NrZWQoKSk7Ci0g
ICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBk
YXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAg
ICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICBzYW1wbGluZ1By
b2ZpbGVyLT5nZXRMb2NrKCkudW5sb2NrKCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1Q
TElOR19QUk9GSUxFUikKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFR5cGVQcm9maWxlcigpCi17Ci0g
ICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxl
ckxvZygpLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiVHlwZSBQcm9m
aWxlciB2aXNpdCBkYXRhOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0gICAgICAgIG1fc2xvdFZpc2l0
b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRTaGFkb3dD
aGlja2VuKCkKLXsKLSAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Ns
b3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91
dGluZXMoKQotewotICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5l
cyhtX3Nsb3RWaXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJv
dXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFu
ZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
Ojp2aXNpdFdlYWtIYW5kbGVzIik7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgewotICAg
ICAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2NvcGUoKnRoaXMsICJtX29iamVjdFNwYWNlLnZp
c2l0V2Vha1NldHMiKTsKLSAgICAgICAgICAgIG1fb2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2
aXNpdG9yKTsKLSAgICAgICAgfQotICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAg
ICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgaWYg
KG1fc2xvdFZpc2l0b3IuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAg
ZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAg
ICB7Ci0gICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRv
cik7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAg
ICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJh
aW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50
cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NM
b2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAgIHNpemVfdCB2aXNpdENvdW50ID0gbV9zbG90Vmlz
aXRvci52aXNpdENvdW50KCk7CisgICAgICAgIHNpemVfdCB2aXNpdENvdW50ID0gbV9jb2xsZWN0
b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgpOwogICAgICAgICB2aXNpdENvdW50ICs9IHRocmVh
ZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxvZ0YoIlxuTnVtYmVyIG9mIGxpdmUgT2JqZWN0
cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdj
U3RhcnRUaW1lKTsKICAgICB9CkBAIC04MzgsMjIgKzc3OCwyNyBAQCB2b2lkIEhlYXA6OnVwZGF0
ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENv
bGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAgbV90b3RhbEJ5dGVzVmlzaXRlZCA9IDA7CiAK
LSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc1Zp
c2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgpOworICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRU
aGlzQ3ljbGUgPQorICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQo
KSArCisgICAgICAgIHRocmVhZEJ5dGVzVmlzaXRlZCgpOwogICAgIAogICAgIG1fdG90YWxCeXRl
c1Zpc2l0ZWQgKz0gbV90b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZTsKIH0KIAogdm9pZCBIZWFw
OjplbmRNYXJraW5nKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLnJlc2V0KCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKIAogICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5y
ZXNldCgpOwogCi0gICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOwog
ICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9v
YmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CisgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSBP
cHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKTsKKyAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSBP
cHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJs
YWNrVGhyZXNob2xkOwogfQogCiBzaXplX3QgSGVhcDo6b2JqZWN0Q291bnQoKQpAQCAtOTg4LDE0
ICs5MzMsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1JlbWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewog
ICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQo
KSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRl
KCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhh
dCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6
Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3QgZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0
aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5
IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhlc2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1
c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhlCi0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5z
ZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVu
ZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6
aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsKKyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBj
b2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1hcmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZp
dmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlvbnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3Jl
IHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4gSWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAg
IC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIgdGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0
aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2FuCisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUg
dGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJl
IHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1hcmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBj
b2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBzdGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFu
dGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJdCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGgg
dGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElmIHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJh
dGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBnZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJ
ZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdpbGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWlu
LiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRo
ZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBt
X211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0
QWxsR2FyYmFnZSgpCkBAIC0xMDk0LDI0ICsxMDQ1LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdElu
VGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29ybGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUg
PSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3JlOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygp
KSB7Ci0gICAgICAgIGRhdGFMb2coIltHQzogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7
Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dD
OiBTVEFSVCAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgIiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0g
TW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGlt
ZTsKICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGls
ZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAoSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNv
bXBsZXRlQWxsRm9yVk0oKm1fdm0pKQotICAgICAgICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCku
dXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJhbWUpOwotICAgIAogICAgIEFTU0VSVChtX2lz
U2FmZVRvQ29sbGVjdCk7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRh
dGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFkeSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxl
Y3Rpb25TY29wZSwgIlxuIik7CkBAIC0xMTMxLDEyICsxMDcyLDkgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5nKTsKICAgICB9CiAgICAgICAgIAotICAgIGZs
dXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAgICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHBy
ZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAg
ICAgCi0gICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1lKTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0
YXJ0VGltZSk7CiAgICAgICAgIAogICAgIGlmIChtX3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVy
aWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2lu
Zyk7CkBAIC0xMTczLDggKzExMTEsOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAg
ICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBh
ZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwg
IiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNUaW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVyIC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRz
KCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMg
RU5EXVxuIik7CiAgICAgfQogICAgIAogICAgIHsKQEAgLTExOTYsMTAgKzExMzQsMzMgQEAgdm9p
ZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIHN0b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVu
ZENvbXBpbGVyVGhyZWFkcygpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJ
c1N0b3BwZWQgPSB0cnVlOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICB7CisgICAgICAgIERlZmVy
R0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0
YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKKyAgICAgICAgICAgIHNldEdDRGlkSklU
KCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShKSVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93
Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBm
bHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9s
ZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAg
ICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVz
dW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRo
ZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQor
ICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFz
ZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgorICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rp
b24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNlIHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVh
ZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVy
aW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5zdGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2Nr
LgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxsb2NhdGluZygpOworICAgIAogICAgIFJFTEVB
U0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAg
IG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICBy
ZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0MDgsMjMgKzEzNjksMTggQEAgdm9pZCBIZWFw
OjpoYW5kbGVOZWVkRmluYWxpemUoKQogCiB2b2lkIEhlYXA6OnNldEdDRGlkSklUKCkKIHsKLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxv
YWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xkU3RhdGUgJiBzdG9wcGVkQml0KTsKLSAg
ICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRT
dGF0ZSB8IGdjRGlkSklUQml0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV93
b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAorICAgICAgICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGUgJiBzdG9wcGVkQml0KTsKKyAgICAgICAg
ICAgIHN0YXRlIHw9IGdjRGlkSklUQml0OworICAgICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpz
ZXROZWVkRmluYWxpemUoKQogewotICAgIGZvciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xk
U3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwotICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNv
bXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9sZFN0YXRlIHwgbmVlZEZpbmFsaXplQml0KSkg
ewotICAgICAgICAgICAgbV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV93b3JsZFN0YXRlLmV4
Y2hhbmdlT3IobmVlZEZpbmFsaXplQml0KTsKKyAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1f
d29ybGRTdGF0ZSk7CisgICAgbV9zdG9wSWZOZWNlc3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7
CiB9CiAKIHZvaWQgSGVhcDo6d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKQEAgLTE0NDEsMjMgKzEz
OTcsMTQgQEAgdm9pZCBIZWFwOjp3YWl0V2hpbGVOZWVkRmluYWxpemUoKQogICAgIH0KIH0KIAot
dW5zaWduZWQgSGVhcDo6c2V0TXV0YXRvcldhaXRpbmcoKQordm9pZCBIZWFwOjpzZXRNdXRhdG9y
V2FpdGluZygpCiB7Ci0gICAgZm9yICg7OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9
IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0gICAgICAgIHVuc2lnbmVkIG5ld1N0YXRlID0gb2xkU3Rh
dGUgfCBtdXRhdG9yV2FpdGluZ0JpdDsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3
U3RhdGU7Ci0gICAgfQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZU9yKG11dGF0b3JXYWl0aW5n
Qml0KTsKIH0KIAogdm9pZCBIZWFwOjpjbGVhck11dGF0b3JXYWl0aW5nKCkKIHsKLSAgICBmb3Ig
KDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsK
LSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBv
bGRTdGF0ZSAmIH5tdXRhdG9yV2FpdGluZ0JpdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZUFuZCh+bXV0YXRvcldhaXRpbmdCaXQpOwogfQog
CiB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xkZXImKQpAQCAt
MTQ2OSwxMCArMTQxNiwxNSBAQCB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0
IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQogewotICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBp
bmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwotICAg
IGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRpb25z
KCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7
CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCk7CisgICAgICAgIGRlbGV0ZVNv
dXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAg
ICAgICBjb2xsZWN0QXN5bmMoKTsKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUg
PSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwog
fQpAQCAtMTU1NCwyMyArMTUwNiw5IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihP
cHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndpbGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12
b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKQotewotICAgIG1fc3RydWN0dXJl
SURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQotCiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJy
aWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNj
b3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgp
OwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNl
LnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMp
OwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JNYXJraW5nKCkKQEAgLTE5MzcsNyArMTg3NSw3
IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKIAogdm9pZCBIZWFw
Ojp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7Ci0gICAgaWYgKFVO
TElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpKSkgeworICAgIGlmIChVTkxJS0VMWShtdXRh
dG9yU2hvdWxkQmVGZW5jZWQoKSkpIHsKICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgYmFy
cmllclRocmVzaG9sZCBpcyB0aGUgdGF1dG9sb2dpY2FsIHRocmVzaG9sZCwgc28gZnJvbSBjb3Vs
ZCBzdGlsbCBiZQogICAgICAgICAvLyBub3QgYmxhY2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBz
dXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2UuCiAgICAgICAgIFdURjo6c3RvcmVMb2FkRmVu
Y2UoKTsKQEAgLTE5NTQsNyArMTg5Miw3IEBAIGJvb2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rpb25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgp
ID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBN
dXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtMTk3NiwxMiArMTkxNCw4IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhy
ZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NUaHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAh
PSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAKLXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJl
cG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3
YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGlu
IHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7
CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk5MiwxMiArMTkyNiw4IEBAIHZvaWQgSGVhcDo6
cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwKIH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBv
bGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5Vmlz
aXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3Vu
dCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxl
Y3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVk
ZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0K
ICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRlcm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3Ig
KDs7KSB7CkBAIC0yMDkxLDQgKzIwMjEsMTEgQEAgdm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVu
TG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVTRShDRikKIAordm9pZCBIZWFwOjpub3RpZnlJ
c1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAgICBp
ZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJD
b2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIgog
I2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUsNyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtl
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5o
IgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5oIgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBj
bGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFzcyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2Ns
YXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElmTmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsK
IApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3Bh
Y2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hp
bmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5lVGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xv
dFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQor
ICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2so
KSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNrOyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rpdml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNrKiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwpA
QCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIpOwogICAgIHZvaWQgYWRkRXhlY3V0YWJsZShF
eGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1f
aXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0
KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRv
Q29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRp
bmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDExIEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJv
dGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5nIG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFz
dHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4KICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCk7CiAKICNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8gVXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUg
c3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxpdmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENl
bGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJl
cG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3QpOwogICAgIHNpemVfdCBleHRlcm5hbE1l
bW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFsTWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAKQEAg
LTI4Myw4ICsyODYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVf
dCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVlQmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKICAg
ICAKLSAgICBib29sIGJhcnJpZXJTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFy
cmllclNob3VsZEJlRmVuY2VkOyB9Ci0gICAgY29uc3QgYm9vbCogYWRkcmVzc09mQmFycmllclNo
b3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gJm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9
CisgICAgYm9vbCBtdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0
b3JTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0IGJvb2wqIGFkZHJlc3NPZk11dGF0b3JTaG91
bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZtX211dGF0b3JTaG91bGRCZUZlbmNlZDsgfQog
ICAgIAogICAgIHVuc2lnbmVkIGJhcnJpZXJUaHJlc2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2Jh
cnJpZXJUaHJlc2hvbGQ7IH0KICAgICBjb25zdCB1bnNpZ25lZCogYWRkcmVzc09mQmFycmllclRo
cmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZtX2JhcnJpZXJUaHJlc2hvbGQ7IH0KQEAgLTM5MSw2
ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCBy
ZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7Cisg
ICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9w
VGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1lVGhlTXV0YXRvcigpOwogICAgIApAQCAtNDEy
LDcgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkRmluYWxpemUoKTsKICAgICB2
b2lkIHdhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwogICAgIAotICAgIHVuc2lnbmVkIHNldE11dGF0
b3JXYWl0aW5nKCk7CisgICAgdm9pZCBzZXRNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgY2xl
YXJNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgbm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3Qg
TG9ja0hvbGRlciYpOwogICAgIApAQCAtNDIyLDMxICs0MjgsMTggQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVhZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENv
bGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0
cnVjdHVyZUlEVGFibGVzKCk7CiAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwot
ICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKICAgICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7
CiAgICAgCi0gICAgdm9pZCBtYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lk
IG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAgdm9pZCBnYXRoZXJTdGFj
a1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgYmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2
aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3Mo
KTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsK
ICAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9p
ZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKLSAgICB2b2lkIHZpc2l0UHJv
dGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0QXJndW1lbnRC
dWZmZXJzKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRFeGNlcHRpb24oSGVhcFJv
b3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9y
Jik7Ci0gICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYpOwotICAgIHZv
aWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgdm9pZCB2aXNpdFR5cGVQcm9maWxlcigp
OwotICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgdm9pZCB0cmFjZUNvZGVCbG9j
a3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJv
b3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9GaXhwb2ludChIZWFwUm9vdFZpc2l0b3ImKTsK
ICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZv
aWQgZW5kTWFya2luZygpOwogCkBAIC01MTgsNyArNTExLDggQEAgcHJpdmF0ZToKIAogICAgIE1h
Y2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCi0gICAgU2xvdFZpc2l0b3IgbV9z
bG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9y
U2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0
b3JNYXJrU3RhY2s7CiAKICAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkg
cGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAg
Ly8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNo
ZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQpAQCAtNTM3LDcgKzUzMSw3IEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1
ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKLSAgICBib29sIG1fYmFycmllclNob3VsZEJlRmVu
Y2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKKyAgICBib29sIG1fbXV0YXRv
clNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgfTsKICAgICB1
bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIo
KSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkIH07CiAKICAgICBWTSog
bV92bTsKQEAgLTU3Miw3ICs1NjYsOCBAQCBwcml2YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdN
dXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFy
a1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtT
dGFja0FycmF5PiBtX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25l
ZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1f
bnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzIHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxl
bE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsKQEAgLTYwMCw2ICs1OTUsNyBAQCBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtdXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1
OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNlIHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFi
bGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dvcmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9u
aWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNj
b3BlPj4gbV9yZXF1ZXN0czsKICAgICBUaWNrZXQgbV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJr
U3RhY2tBcnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFya1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFy
a1N0YWNrQXJyYXkmIG90aGVyKQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVy
KTsKKyAgICAKKyAgICAvLyBSZW1vdmUgb3VyIGhlYWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhl
ciBsaXN0LgorICAgIEdDQXJyYXlTZWdtZW50PGNvbnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3Nl
Z21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiog
b3RoZXJIZWFkID0gb3RoZXIubV9zZWdtZW50cy5yZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJP
ZlNlZ21lbnRzLS07CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAg
b3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdtZW50cyk7CisgICAgCisgICAgb3RoZXIubV9u
dW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZTZWdtZW50czsKKyAgICBtX251bWJlck9mU2Vn
bWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0
aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5wdXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9z
ZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAg
b3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkp
IHsKKyAgICAgICAgcmVmaWxsKCk7CisgICAgICAgIHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisg
ICAgICAgICAgICBvdGhlci5hcHBlbmQocmVtb3ZlTGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQg
TWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikK
IHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVk
dWNlIGNvcHlpbmcgY29zdHMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3Rh
Y2tBcnJheSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBwdWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXko
KTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsK
LSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVf
dCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQgdHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYp
OworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lk
IHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tBcnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291
bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4o
TWFya2VkCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6
OkhhbmRsZSogYmxvY2spCiB7CiAgICAgQVNTRVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2Nr
LT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0
ZWQoKSk7CiAgICAgCiAgICAgRnJlZUxpc3QgZnJlZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2Vk
QmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIs
MTIgKzgyLDE0IEBAIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAg
ICAsIG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQogeworICAgIGlmIChmYWxzZSkK
KyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0K
IAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRl
c3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxl
TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2Nh
dGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2Ny
aWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0
ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2Rl
IG1hcmtzTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dl
ZXAoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3RO
ZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJsb2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2Vl
cE1vZGUgPT0gU3dlZXBPbmx5KSk7CiAgICAgCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOwogCkBAIC05OSw3ICsxMDEsNyBAQCBGcmVlTGlzdCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgaWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0
b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0gSXNFbXB0eQogICAgICAgICAmJiBuZXdseUFs
bG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCkgewotICAgICAgICBBU1NF
UlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUpOworICAgICAgICBBU1NFUlQobWFya3NNb2RlID09
IE1hcmtzU3RhbGUgfHwgYmxvY2subV9tYXJrcy5pc0VtcHR5KCkpOwogICAgICAgICAKICAgICAg
ICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihi
bG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkpOwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5k
ID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemUoKTsKQEAgLTExMSw2ICsxMTMsOCBAQCBGcmVl
TGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAgICAgICAgICBzZXRJc0Zy
ZWVMaXN0ZWQoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElz
RW1wdHkodGhpcywgdHJ1ZSk7CisgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAg
ICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2soKTsKICAgICAgICAgRnJlZUxpc3QgcmVzdWx0
ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwgcGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7
CiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2coIlF1aWNrbHkgc3dlcHQg
YmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgp
LCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmlidXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsK
QEAgLTEyMywxNyArMTI3LDExIEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNp
YWxpemUKICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAg
ICBib29sIGlzRW1wdHkgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsg
aSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewotICAgICAgICBpZiAoZW1wdHlN
b2RlID09IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0
YWxlICYmIGJsb2NrLm1fbWFya3MuZ2V0KGkpKQotICAgICAgICAgICAgICAgIHx8IChuZXdseUFs
bG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQo
aSkpKSkgewotICAgICAgICAgICAgaXNFbXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgVmVjdG9yPHNpemVfdD4gZGVhZENlbGxzOwor
ICAgIGF1dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0gKHNpemVfdCBpKSB7CiAgICAgICAgIEhlYXBD
ZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmYmxvY2suYXRvbXMo
KVtpXSk7CiAKLSAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9u
ICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAh
PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1wdHlNb2RlID09IE5vdEVtcHR5KQogICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2VsbCktPmNhbGxEZXN0cnVjdG9yKCp2bSgpKTsK
IAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgewpAQCAtMTQ0LDEy
ICsxNDIsMzMgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAg
ICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAg
fQorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9t
OyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1w
dHkKKyAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2su
bV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAgICAgICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9
PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxsb2NhdGVkLmdldChpKSkpKSB7CisgICAg
ICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3Ry
dWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKQorICAgICAgICAgICAgZGVhZENlbGxzLmFwcGVu
ZChpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAg
fQotCisgICAgCiAgICAgLy8gV2Ugb25seSB3YW50IHRvIGRpc2NhcmQgdGhlIG5ld2x5QWxsb2Nh
dGVkIGJpdHMgaWYgd2UncmUgY3JlYXRpbmcgYSBGcmVlTGlzdCwKICAgICAvLyBvdGhlcndpc2Ug
d2Ugd291bGQgbG9zZSBpbmZvcm1hdGlvbiBvbiB3aGF0J3MgY3VycmVudGx5IGFsaXZlLgogICAg
IGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0ICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9
PSBIYXNOZXdseUFsbG9jYXRlZCkKICAgICAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBN
YXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CisgICAgCisgICAgaWYgKHNwYWNlKCktPmlzTWFya2lu
ZygpKQorICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CisgICAgCisgICAgaWYgKGRlc3Ry
dWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgOiBkZWFkQ2VsbHMpCisgICAgICAgICAgICBoYW5kbGVE
ZWFkQ2VsbChpKTsKKyAgICB9CiAKICAgICBGcmVlTGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6bGlz
dChoZWFkLCBjb3VudCAqIGNlbGxTaXplKCkpOwogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBU
b0ZyZWVMaXN0KQpAQCAtMTc3LDEyICsxOTYsMTggQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3dlZXAoU3dlZQogICAgIAogICAgIEFTU0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2Nh
dGVkKHRoaXMpKTsKICAgICAKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxl
TW9kZTxOZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1vZGUpOwotICAgIHJldHVybiBzd2VlcEhlbHBl
clNlbGVjdFNjcmliYmxlTW9kZTxEb2VzTm90TmVlZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOwor
ICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgYmxvY2soKS5tX2xvY2subG9j
aygpOworICAgIAorICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0
cnVjdGlvbikgeworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9y
c0FuZENvbGxlY3RvcklzUnVubmluZz4oc3dlZXBNb2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7
CisgICAgfQorICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hh
c05vRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERl
c3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQog
ewogICAgIGlmIChzY3JpYmJsZUZyZWVDZWxscygpKQpAQCAtMTkwLDcgKzIxNSw3IEBAIEZyZWVM
aXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxw
ZXJTZWxlY3RFbXB0eU1vZGU8ZGVzdHJ1Y3Rpb25Nb2RlLCBEb250U2NyaWJibGU+KHN3ZWVwTW9k
ZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJr
ZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUg
c3dlZXBNb2RlKQogewogICAgIC8vIEl0J3Mgbm90IG9idmlvdXMsIGJ1dCB0aGlzIGlzIHRoZSBv
bmx5IHdheSB0byBrbm93IGlmIHRoZSBibG9jayBpcyBlbXB0eS4gSXQncyB0aGUgb25seQpAQCAt
MjA1LDcgKzIzMCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUK
ICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZDxOb3RFbXB0eSwg
ZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRl
PE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9k
ZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3Jp
YmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlN
b2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxs
b2NhdGVkKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAgaWYgKGhhc0FueU5ld2x5QWxsb2Nh
dGVkKCkpCkBAIC0yMTMsNyArMjM4LDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6
c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFN3ZWVwTW9kZTxlbXB0eU1v
ZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2Nh
dGVkPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0
eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgordGVtcGxhdGU8TWFy
a2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXds
eUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkK
IHsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCkKQEAgLTIyMSwxMCArMjQ2
LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1
cm4gc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGU8ZW1wdHlNb2RlLCBTd2VlcE9ubHksIGRlc3Ry
dWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGU+KCk7CiB9CiAKLXRl
bXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVj
dGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1v
ZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5l
d2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpCiB7Ci0gICAgaWYgKGFyZU1h
cmtzU3RhbGUoKSkKKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiA9IHNwYWNlKCktPm1h
cmtpbmdWZXJzaW9uKCk7CisgICAgYm9vbCBtYXJrc0FyZVVzZWZ1bCA9ICFibG9jaygpLmFyZU1h
cmtzU3RhbGUobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtp
bmcoKSkKKyAgICAgICAgbWFya3NBcmVVc2VmdWwgfD0gYmxvY2soKS5tYXJrc0NvbnZleUxpdmVu
ZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbik7CisgICAgCisgICAgaWYgKCFtYXJrc0Fy
ZVVzZWZ1bCkKICAgICAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2Vl
cE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtzU3RhbGU+KCk7CiAgICAgcmV0dXJuIHNwZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBz
d2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1v
ZGUsIE1hcmtzTm90U3RhbGU+KCk7CiB9CkBAIC0yNDEsMjQgKzI3Miw2IEBAIHZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7
CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9j
azo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAgIFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAg
IHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2Vs
bCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoTWFya2VkQmxv
Y2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2NrLT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9j
ay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0
dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxl
KiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGlu
Zyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEy
ICsyNzksMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAg
IEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNG
cmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygi
VGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2Nh
dGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAvLyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRv
bmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAgICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxv
Y2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaWYg
KGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVlIGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsK
KyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBjb2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRy
b3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8vIGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxp
c3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBzbyB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3
YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFkLiAKQEAgLTI3OSwxMiArMjk3LDE3IEBAIHZv
aWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2Nh
dGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9i
amVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9j
YXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAgICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAg
ICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6Oktp
bmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAgICAgICAgICBzZXROZXdseUFsbG9jYXRlZChj
ZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAg
ICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2VsbCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAg
ICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAgICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIp
OwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3Ry
dWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwtPnphcCgpOwogICAgICAgICAgICAgY2xlYXJO
ZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywxMCArMzMwLDE0IEBAIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9n
KFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRp
bmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAg
ICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAKICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2Nh
dGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUg
YWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2Ug
aGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9jayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlv
bi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7CiAgICAgfQpAQCAtMzU0LDYgKzM4MSw4IEBA
IHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAo
aGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2NhdGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwg
IW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAg
ICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6
IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAg
ICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgYmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFk
eSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQgdGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBu
b3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNvLCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRo
ZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdheS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUg
Zm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBA
IC0zNjIsNiArMzkxLDggQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBW
ZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFy
a3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAg
ICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFs
bG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYgKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lvbikgewogICAgICAgICAgICAgLy8gTWVyZ2Ug
dGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5ld2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhl
IGZ1bGwgc2V0IG9mIGJpdHMKQEAgLTQyOSw3ICs0NjAsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmRpZENvbnN1bWVGcmVlCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwg
IjogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNT
RVJUKGlzRnJlZUxpc3RlZCgpKTsKICAgICBtX2lzRnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFs
bG9jYXRvcigpLT5zZXRJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKKyAgICBhbGxvY2F0b3IoKS0+
YXRvbWljU2V0QW5kQ2hlY2tJc0FsbG9jYXRlZCh0aGlzLCB0cnVlKTsKIH0KIAogc2l6ZV90IE1h
cmtlZEJsb2NrOjptYXJrQ291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMzAgKzE5MCwzMiBAQCBw
dWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFuZGxlKEhlYXAmLCB2b2lkKik7CiAgICAg
ICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGU+CisgICAgICAgIGVudW0gU3dl
ZXBEZXN0cnVjdGlvbk1vZGUgeyBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1
Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcgfTsKKyAgICAg
ICAgCisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlPgogICAgICAgICBGcmVl
TGlzdCBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkp
OwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0gU2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxl
LCBTY3JpYmJsZSB9OwogICAgICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9u
TW9kZSwgU2NyaWJibGVNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9k
ZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdEVtcHR5
TW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0g
RW1wdHlNb2RlIHsgSXNFbXB0eSwgTm90RW1wdHkgfTsKICAgICAgICAgCi0gICAgICAgIHRlbXBs
YXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRl
bXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAg
ICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZChTd2VlcE1v
ZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAKICAgICAgICAgZW51bSBOZXdseUFsbG9jYXRlZE1v
ZGUgeyBIYXNOZXdseUFsbG9jYXRlZCwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZCB9OwogICAg
ICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmli
YmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUs
IFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4K
ICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlID0g
U3dlZXBPbmx5KTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBN
b2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgor
ICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1v
ZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBz
d2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpOwogICAgICAgICAKICAgICAgICAgZW51bSBNYXJr
c01vZGUgeyBNYXJrc1N0YWxlLCBNYXJrc05vdFN0YWxlIH07CiAgICAgICAgIAotICAgICAgICB0
ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1v
ZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0
eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3
bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CiAgICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVk
U3dlZXAoKTsKICAgICAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEyLDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJl
cGFyZUZvck1hcmtpbmcoKQogCiB2b2lkIE1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkK
IHsKLSAgICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAg
ICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFsbG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVz
IHsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN1bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SZXN1bWVUaGVXb3JsZFNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVzdW1lVGhlV29ybGRTY29wZS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Jlc3VtZVRoZVdvcmxkU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsOSArNzUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNl
bGwpCiAjZW5kaWYKIAogU2xvdFZpc2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXApCi0gICAg
OiBtX3N0YWNrKCkKLSAgICAsIG1fYnl0ZXNWaXNpdGVkKDApCi0gICAgLCBtX2J5dGVzQ29waWVk
KDApCisgICAgOiBtX2J5dGVzVmlzaXRlZCgwKQogICAgICwgbV92aXNpdENvdW50KDApCiAgICAg
LCBtX2lzSW5QYXJhbGxlbE1vZGUoZmFsc2UpCiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtl
ZFNwYWNlOjppbml0aWFsVmVyc2lvbikKQEAgLTkxLDcgKzg5LDcgQEAgU2xvdFZpc2l0b3I6OlNs
b3RWaXNpdG9yKEhlYXAmIGhlYXApCiAKIFNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IoKQogewot
ICAgIGNsZWFyTWFya1N0YWNrKCk7CisgICAgY2xlYXJNYXJrU3RhY2tzKCk7CiB9CiAKIHZvaWQg
U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZygpCkBAIC0xMDksMTYgKzEwNywxNyBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNl
dCgpCiB7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3BhcXVlUm9vdHMuc2l6ZSgpKTsKICAgICBt
X2J5dGVzVmlzaXRlZCA9IDA7Ci0gICAgbV9ieXRlc0NvcGllZCA9IDA7CiAgICAgbV92aXNpdENv
dW50ID0gMDsKICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRyOwotICAgIEFTU0VS
VCghbV9jdXJyZW50Q2VsbCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fY3VycmVudENlbGwpOwog
fQogCi12b2lkIFNsb3RWaXNpdG9yOjpjbGVhck1hcmtTdGFjaygpCit2b2lkIFNsb3RWaXNpdG9y
OjpjbGVhck1hcmtTdGFja3MoKQogewotICAgIG1fc3RhY2suY2xlYXIoKTsKKyAgICBtX2NvbGxl
Y3RvclN0YWNrLmNsZWFyKCk7CisgICAgbV9tdXRhdG9yU3RhY2suY2xlYXIoKTsKIH0KIAogdm9p
ZCBTbG90VmlzaXRvcjo6YXBwZW5kKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290
cykKQEAgLTE0OCw3ICsxNDcsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRKU0NlbGxPckF1
eGlsaWFyCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGpzQ2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3R3JleSk7CisgICAgICAgIGpzQ2Vs
bC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAKICAgICAgICAgYXBwZW5kVG9NYXJr
U3RhY2soanNDZWxsKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjEwLDcgKzIwOSw3IEBAIEFMV0FZ
U19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFya2UKICAgICAvLyBJbmRpY2F0ZSB0aGF0
IHRoZSBvYmplY3QgaXMgZ3JleSBhbmQgdGhhdDoKICAgICAvLyBJbiBjYXNlIG9mIGNvbmN1cnJl
bnQgR0M6IGl0J3MgdGhlIGZpcnN0IHRpbWUgaXQgaXMgZ3JleSBpbiB0aGlzIEdDIGN5Y2xlLgog
ICAgIC8vIEluIGNhc2Ugb2YgZWRlbiBjb2xsZWN0aW9uOiBpdCdzIGEgbmV3IG9iamVjdCB0aGF0
IGJlY2FtZSBncmV5IHJhdGhlciB0aGFuIGFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICBjZWxsLT5zZXRDZWxs
U3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBhcHBlbmRUb01hcmtTdGFjayhjb250
YWluZXIsIGNlbGwpOwogfQpAQCAtMjI4LDE2ICsyMjcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmRUbwogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZENvbmN1
cnJlbnRseShjZWxsKSk7CiAgICAgQVNTRVJUKCFjZWxsLT5pc1phcHBlZCgpKTsKLSAgICBBU1NF
UlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5IHx8IGNlbGwtPmNlbGxT
dGF0ZSgpID09IENlbGxTdGF0ZTo6T2xkR3JleSk7CisgICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0
ZSgpID09IENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAgICAgY29udGFpbmVyLm5vdGVNYXJrZWQo
KTsKICAgICAKLSAgICAvLyBGSVhNRTogVGhlc2UgImp1c3Qgd29yayIgYmVjYXVzZSB0aGUgR0Mg
cmVzZXRzIHRoZXNlIGZpZWxkcyBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4gQnV0Ci0gICAg
Ly8gdGhhdCB3b24ndCBiZSB0aGUgY2FzZSB3aGVuIHdlIGRvIGNvbmN1cnJlbnQgR0MuCiAgICAg
bV92aXNpdENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gY29udGFpbmVyLmNlbGxTaXpl
KCk7CiAgICAgCi0gICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CisgICAgbV9jb2xsZWN0b3JTdGFj
ay5hcHBlbmQoY2VsbCk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1h
cmtTdGFjayhjb25zdCBKU0NlbGwqIGNlbGwpCit7CisgICAgbV9tdXRhdG9yU3RhY2suYXBwZW5k
KGNlbGwpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjptYXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQq
IGJhc2UpCkBAIC0yOTQsMTIgKzI5NiwxNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OnZpc2l0Q2hpCiAgICAgCiAgICAgU2V0Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNj
b3BlKCp0aGlzLCBjZWxsKTsKICAgICAKLSAgICBtX29sZENlbGxTdGF0ZSA9IGNlbGwtPmNlbGxT
dGF0ZSgpOworICAgIGlmIChmYWxzZSkgeworICAgICAgICBkYXRhTG9nKCJWaXNpdGluZyAiLCBS
YXdQb2ludGVyKGNlbGwpKTsKKyAgICAgICAgaWYgKG1faXNWaXNpdGluZ011dGF0b3JTdGFjaykK
KyAgICAgICAgICAgIGRhdGFMb2coIiAobXV0YXRvcikiKTsKKyAgICAgICAgZGF0YUxvZygiXG4i
KTsKKyAgICB9CiAgICAgCi0gICAgLy8gVGhlcmUgaXMgbm8gcmFjZSBoZXJlIC0gdGhlIGNlbGwg
c3RhdGUgY2Fubm90IGNoYW5nZSByaWdodCBub3cuIEdyZXkgb2JqZWN0cyBjYW4gb25seSBiZQot
ICAgIC8vIHZpc2l0ZWQgYnkgb25lIG1hcmtpbmcgdGhyZWFkLiBOZWl0aGVyIHRoZSBiYXJyaWVy
IG5vciBtYXJraW5nIHdpbGwgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbgotICAgIC8vIG9iamVjdCB0
aGF0IGlzIGFscmVhZHkgZ3JleS4KLSAgICBBU1NFUlQobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0
YXRlOjpPbGRHcmV5IHx8IG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSk7Cisg
ICAgLy8gRnVubnkgc3Rvcnk6IGl0J3MgcG9zc2libGUgZm9yIHRoZSBvYmplY3QgdG8gYmUgYmxh
Y2sgYWxyZWFkeSwgaWYgd2UgYmFycmllciB0aGUgb2JqZWN0IGF0CisgICAgLy8gYWJvdXQgdGhl
IHNhbWUgdGltZSB0aGF0IGl0J3MgbWFya2VkLiBUaGF0J3MgZmluZS4gSXQncyBhIGduYXJseSBh
bmQgc3VwZXItcmFyZSByYWNlLiBJdCdzCisgICAgLy8gbm90IGNsZWFyIHRvIG1lIHRoYXQgaXQg
d291bGQgYmUgY29ycmVjdCBvciBwcm9maXRhYmxlIHRvIGJhaWwgaGVyZSBpZiB0aGUgb2JqZWN0
IGlzIGFscmVhZHkKKyAgICAvLyBibGFjay4KICAgICAKICAgICBjZWxsLT5zZXRDZWxsU3RhdGUo
Q2VsbFN0YXRlOjpBbnRocmFjaXRlT3JCbGFjayk7CiAgICAgCkBAIC0zMjYsMjMgKzMzMywyMyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpCiAgICAgfQogICAgIAog
ICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpKSB7Ci0gICAgICAgIGlmICht
X29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkpCisgICAgICAgIGlmICghbV9pc1Zp
c2l0aW5nTXV0YXRvclN0YWNrKQogICAgICAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5h
cHBlbmROb2RlKGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpOwogICAgIH0KIH0KIAotdm9pZCBT
bG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25h
dGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3RhY2tBcnJheSYgdG8p
CiB7CiAgICAgLy8gTk9URTogQmVjYXVzZSB3ZSByZS10cnkgb2Z0ZW4sIHdlIGNhbiBhZmZvcmQg
dG8gYmUgY29uc2VydmF0aXZlLCBhbmQKICAgICAvLyBhc3N1bWUgdGhhdCBkb25hdGluZyBpcyBu
b3QgcHJvZml0YWJsZS4KIAogICAgIC8vIEF2b2lkIGxvY2tpbmcgd2hlbiBhIHRocmVhZCByZWFj
aGVzIGEgZGVhZCBlbmQgaW4gdGhlIG9iamVjdCBncmFwaC4KLSAgICBpZiAobV9zdGFjay5zaXpl
KCkgPCAyKQorICAgIGlmIChmcm9tLnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBzb21lIHNoYXJlZCB3b3JrIHF1ZXVlZCB1cCwgYmUgY29u
c2VydmF0aXZlIGFuZCBhc3N1bWUKICAgICAvLyB0aGF0IGRvbmF0aW5nIG1vcmUgaXMgbm90IHBy
b2ZpdGFibGUuCi0gICAgaWYgKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5zaXplKCkpCisgICAg
aWYgKHRvLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgd2UncmUgY29udGVu
ZGluZyBvbiB0aGUgbG9jaywgYmUgY29uc2VydmF0aXZlIGFuZCBhc3N1bWUgdGhhdCBhbm90aGVy
CkBAIC0zNTIsMjYgKzM1OSw0MyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFs
bGVsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBh
IHRocmVhZCB3aWxsIGdvIGlkbGUgc29vbiwgYW5kIGRvbmF0ZS4KLSAgICBtX3N0YWNrLmRvbmF0
ZVNvbWVDZWxsc1RvKG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjayk7CisgICAgZnJvbS5kb25hdGVT
b21lQ2VsbHNUbyh0byk7CiAKICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
bm90aWZ5QWxsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKCkKK3ZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQoreworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwo
bV9jb2xsZWN0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjayk7Cisg
ICAgZG9uYXRlS25vd25QYXJhbGxlbChtX211dGF0b3JTdGFjaywgKm1faGVhcC5tX3NoYXJlZE11
dGF0b3JNYXJrU3RhY2spOworfQorCit2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbihNb25vdG9uaWNU
aW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKLSAg
ICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fc3RhY2sucmVmaWxsKCk7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJl
ck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNv
dW50ZG93bi0tOykKLSAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9zdGFjay5yZW1vdmVMYXN0
KCkpOworICAgIHdoaWxlICgoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpIHx8ICFtX211dGF0
b3JTdGFjay5pc0VtcHR5KCkpICYmICFoYXNFbGFwc2VkKHRpbWVvdXQpKSB7CisgICAgICAgIGlm
ICghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY29sbGVjdG9y
U3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWlu
aW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fY29sbGVjdG9yU3RhY2suY2Fu
UmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgICAgICB2aXNpdENoaWxk
cmVuKG1fY29sbGVjdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
bV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX211dGF0b3JTdGFjay5y
ZWZpbGwoKTsKKyAgICAgICAgICAgIC8vIFdlIGtub3cgZm9yIHN1cmUgdGhhdCB3ZSBhcmUgdmlz
aXRpbmcgb2JqZWN0cyBiZWNhdXNlIG9mIHRoZSBiYXJyaWVyLCBub3QgYmVjYXVzZSBvZgorICAg
ICAgICAgICAgLy8gbWFya2luZy4gTWFya2luZyB3aWxsIHZpc2l0IGFuIG9iamVjdCBleGFjdGx5
IG9uY2UuIFRoZSBiYXJyaWVyIHdpbGwgdmlzaXQgaXQKKyAgICAgICAgICAgIC8vIHBvc3NpYmx5
IG1hbnkgdGltZXMsIGFuZCBhbHdheXMgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgbWFya2VkLgorICAg
ICAgICAgICAgbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gdHJ1ZTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3
ZWVuUmViYWxhbmNlKCk7IG1fbXV0YXRvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRv
d24tLTspCisgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX211dGF0b3JTdGFjay5yZW1v
dmVMYXN0KCkpOworICAgICAgICB9CiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAg
ICB9CiAgICAgCiAgICAgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQg
U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5N
b2RlKQorU2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkZy
b21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0
aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgIApAQCAtMzky
LDQ4ICs0MTYsNjAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZAog
ICAgICAgICAgICAgICAgIC8vIFdhaXQgdW50aWwgZWl0aGVyIHRlcm1pbmF0aW9uIGlzIHJlYWNo
ZWQsIG9yIHVudGlsIHRoZXJlIGlzIHNvbWUgd29yawogICAgICAgICAgICAgICAgIC8vIGZvciB1
cyB0byBkby4KICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRWxhcHNlZCh0aW1lb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CisgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgcmVhY2ggdGVybWluYXRpb24/CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMK
LSAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxl
Y3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIExldCBhbnkgc2xlZXBpbmcgc2xhdmVzIGtub3cgaXQncyB0aW1lIGZvciB0
aGVtIHRvIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6
RG9uZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgLy8gSXMgdGhlcmUgd29yayB0byBiZSBkb25lPwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmICghbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9y
TWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB3YWl0
LgotICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdChsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlv
blZhcmlhYmxlLndhaXRVbnRpbChsb2NrLCB0aW1lb3V0KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChzaGFyZWREcmFpbk1v
ZGUgPT0gU2xhdmVEcmFpbik7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzRWxhcHNlZCh0aW1l
b3V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpUaW1l
ZE91dDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBEaWQgd2UgZGV0ZWN0
IHRlcm1pbmF0aW9uPyBJZiBzbywgbGV0IHRoZSBtYXN0ZXIga25vdy4KICAgICAgICAgICAgICAg
ICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAg
ICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0
eSgpCisgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2stPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogCi0gICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFy
a2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQoCi0gICAgICAgICAgICAgICAgICAgIGxvY2ssCisg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXRVbnRp
bCgKKyAgICAgICAgICAgICAgICAgICAgbG9jaywgdGltZW91dCwKICAgICAgICAgICAgICAgICAg
ICAgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hh
cmVkTWFya1N0YWNrLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFt
X2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0Vt
cHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2hlYXAubV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0OwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBJcyB0aGUgY3VycmVudCBwaGFzZSBkb25lPyBJZiBzbywg
cmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIG1fc3RhY2suc3RlYWxTb21lQ2VsbHNGcm9tKAotICAg
ICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZX
YWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU3RhY2suc3Rl
YWxTb21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7Cisg
ICAgICAgICAgICBtX211dGF0b3JTdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCisgICAgICAgICAg
ICAgICAgKm1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFj
dGl2ZVBhcmFsbGVsTWFya2VycysrOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0
aW5nUGFyYWxsZWxNYXJrZXJzLS07CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRyYWlu
KCk7CisgICAgICAgIGRyYWluKHRpbWVvdXQpOwogICAgIH0KIH0KIApAQCAtNDUzLDcgKzQ4OSw2
IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFkZE9wYXF1ZVJvb3Qodm9pZCogcm8KIGJvb2wgU2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiByb290KSBjb25zdAogewogICAgIEFTU0VS
VCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5
KCkpOwogICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290cy5jb250YWlucyhyb290KTsKIH0K
IApAQCAtNDY3LDEzICs1MDIsNiBAQCBUcmlTdGF0ZSBTbG90VmlzaXRvcjo6Y29udGFpbnNPcGFx
dWVSb290CiAgICAgcmV0dXJuIE1peGVkVHJpU3RhdGU7CiB9CiAKLWludCBTbG90VmlzaXRvcjo6
b3BhcXVlUm9vdENvdW50KCkKLXsKLSAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0g
ICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gbV9oZWFwLm1f
b3BhcXVlUm9vdHMuc2l6ZSgpOwotfQotCiB2b2lkIFNsb3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJv
b3RzSWZOZWNlc3NhcnkoKQogewogICAgIGlmIChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSkKQEAg
LTQ5NywxNSArNTI1LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZSgpCiAgICAgZG9uYXRl
S25vd25QYXJhbGxlbCgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbigp
Cit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQp
CiB7CiAgICAgZG9uYXRlKCk7Ci0gICAgZHJhaW4oKTsKKyAgICBkcmFpbih0aW1lb3V0KTsKIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290cygpCiB7Ci0gICAgQVNTRVJUKCFt
X29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIG9w
YXF1ZSByb290cyBhcmUgbm9uLWVtcHR5LgogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9oZWFwLm1fb3BhcXVlUm9vdHNNdXRleCk7CiAgICAgICAgIGZvciAoYXV0
byogcm9vdCA6IG1fb3BhcXVlUm9vdHMpCkBAIC01MjYsMTAgKzU1Myw5IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmZpbmFsaXplVW5jb25kaXRpb25hbEYKICAgICAgICAgbV9oZWFwLm1fdW5jb25kaXRp
b25hbEZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwog
fQogCi12b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3ZvaWQgU2xv
dFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0
IEpTQ2VsbCogY2VsbCA6IG1hcmtTdGFjaygpKQotICAgICAgICBkYXRhTG9nKCpjZWxsLCAiXG4i
KTsKKyAgICBvdXQucHJpbnQoIkNvbGxlY3RvcjogWyIsIHBvaW50ZXJMaXN0RHVtcChjb2xsZWN0
b3JNYXJrU3RhY2soKSksICJdLCBNdXRhdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKG11dGF0b3JN
YXJrU3RhY2soKSksICJdIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSGFuZGxlVHlwZXMuaCIKICNpbmNsdWRlICJNYXJr
U3RhY2suaCIKICNpbmNsdWRlICJPcGFxdWVSb290U2V0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90
b25pY1RpbWUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU3LDkgKzU4LDExIEBAIHB1Ymxp
YzoKICAgICBTbG90VmlzaXRvcihIZWFwJik7CiAgICAgflNsb3RWaXNpdG9yKCk7CiAKLSAgICBN
YXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgeyByZXR1cm4gbV9zdGFjazsgfQotICAgIGNvbnN0
IE1hcmtTdGFja0FycmF5JiBtYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YWNrOyB9Ci0K
KyAgICBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgeyByZXR1cm4gbV9jb2xs
ZWN0b3JTdGFjazsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyBy
ZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVj
dG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjazsgfQorICAgIGNv
bnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9t
dXRhdG9yU3RhY2s7IH0KKyAgICAKICAgICBWTSYgdm0oKTsKICAgICBjb25zdCBWTSYgdm0oKSBj
b25zdDsKICAgICBIZWFwKiBoZWFwKCkgY29uc3Q7CkBAIC04NCwyNCArODcsMjMgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkT3BhcXVlUm9vdCh2b2lkKik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBjb250YWluc09wYXF1ZVJvb3Qodm9pZCopIGNvbnN0Owog
ICAgIFRyaVN0YXRlIGNvbnRhaW5zT3BhcXVlUm9vdFRyaVN0YXRlKHZvaWQqKSBjb25zdDsKLSAg
ICBpbnQgb3BhcXVlUm9vdENvdW50KCk7CiAKLSAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiBt
X3N0YWNrLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fY29sbGVj
dG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKTsgfQogCiAgICAg
dm9pZCBkaWRTdGFydE1hcmtpbmcoKTsKICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgdm9pZCBjbGVh
ck1hcmtTdGFjaygpOworICAgIHZvaWQgY2xlYXJNYXJrU3RhY2tzKCk7CiAKICAgICBzaXplX3Qg
Ynl0ZXNWaXNpdGVkKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlc1Zpc2l0ZWQ7IH0KLSAgICBzaXpl
X3QgYnl0ZXNDb3BpZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzQ29waWVkOyB9CiAgICAgc2l6
ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KIAogICAgIHZv
aWQgZG9uYXRlKCk7Ci0gICAgdm9pZCBkcmFpbigpOwotICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4o
KTsKKyAgICB2b2lkIGRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6
OmluZmluaXR5KCkpOworICAgIHZvaWQgZG9uYXRlQW5kRHJhaW4oTW9ub3RvbmljVGltZSB0aW1l
b3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHkoKSk7CiAgICAgCiAgICAgZW51bSBTaGFyZWRE
cmFpbk1vZGUgeyBTbGF2ZURyYWluLCBNYXN0ZXJEcmFpbiB9OwotICAgIHZvaWQgZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZERyYWluTW9kZSk7CisgICAgZW51bSBjbGFzcyBTaGFyZWREcmFpblJlc3Vs
dCB7IERvbmUsIFRpbWVkT3V0IH07CisgICAgU2hhcmVkRHJhaW5SZXN1bHQgZHJhaW5Gcm9tU2hh
cmVkKFNoYXJlZERyYWluTW9kZSwgTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGlt
ZTo6aW5maW5pdHkoKSk7CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOwogICAg
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwpAQCAtMTI0LDYgKzEyNiw4
IEBAIHB1YmxpYzoKICAgICAKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNpb247IH0KIAorICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290
c0lmTmVjZXNzYXJ5KCk7CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9k
ZUVuYWJsZXI7CiAgICAgCkBAIC0xNDEsMjEgKzE0NSwyMyBAQCBwcml2YXRlOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvbnRhaW5lclR5cGU+CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhD
b250YWluZXJUeXBlJiwgSlNDZWxsKik7CiAgICAgCisgICAgdm9pZCBhcHBlbmRUb011dGF0b3JN
YXJrU3RhY2soY29uc3QgSlNDZWxsKik7CisgICAgCiAgICAgdm9pZCBub3RlTGl2ZUF1eGlsaWFy
eUNlbGwoSGVhcENlbGwqKTsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdl
T3BhcXVlUm9vdHMoKTsKLSAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOwog
ICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmUHJvZml0YWJsZSgpOwogCiAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKGNvbnN0IEpTQ2VsbCopOwogICAgIAogICAgIHZvaWQgZG9uYXRlS25vd25QYXJh
bGxlbCgpOworICAgIHZvaWQgZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJv
bSwgTWFya1N0YWNrQXJyYXkmIHRvKTsKIAotICAgIE1hcmtTdGFja0FycmF5IG1fc3RhY2s7Cisg
ICAgTWFya1N0YWNrQXJyYXkgbV9jb2xsZWN0b3JTdGFjazsKKyAgICBNYXJrU3RhY2tBcnJheSBt
X211dGF0b3JTdGFjazsKICAgICBPcGFxdWVSb290U2V0IG1fb3BhcXVlUm9vdHM7IC8vIEhhbmRs
ZS1vd25pbmcgZGF0YSBzdHJ1Y3R1cmVzIG5vdCB2aXNpYmxlIHRvIHRoZSBnYXJiYWdlIGNvbGxl
Y3Rvci4KICAgICAKICAgICBzaXplX3QgbV9ieXRlc1Zpc2l0ZWQ7Ci0gICAgc2l6ZV90IG1fYnl0
ZXNDb3BpZWQ7CiAgICAgc2l6ZV90IG1fdmlzaXRDb3VudDsKICAgICBib29sIG1faXNJblBhcmFs
bGVsTW9kZTsKICAgICAKQEAgLTE2NSw3ICsxNzEsNyBAQCBwcml2YXRlOgogCiAgICAgSGVhcFNu
YXBzaG90QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVsbHB0ciB9OwogICAgIEpT
Q2VsbCogbV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKLSAgICBDZWxsU3RhdGUgbV9vbGRDZWxs
U3RhdGU7CisgICAgYm9vbCBtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgeyBmYWxzZSB9OwogCiBw
dWJsaWM6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsMTMgKzEwNSwxNSBAQCBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkVW5j
b25kaXRpb25hCiAKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlmICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0
YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplKTsKIH0K
IAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjpy
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgaGVhcCgpLT5y
ZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQobV9vbGRDZWxsU3RhdGUsIHNpemUpOworICAgIGlm
ICghbV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICBoZWFwKCktPnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMSw3ICs0MDEsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFN0b3Jl
U3RydWN0dXJlCiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhTdHJ1Y3R1cmVJRElzVmFs
aWQpOwogICAgICAgICBjb3JyZWN0U3RydWN0dXJlLmxpbmsoJmppdCk7CiAKLSAgICAgICAgSnVt
cCBjb3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoc3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICBKdW1wIGNvcnJlY3RJ
bmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
c3RydWN0dXJlUHRyLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpKTsKICAgICAgICAg
aml0LmFib3J0V2l0aFJlYXNvbihBSEluZGV4aW5nVHlwZUlzVmFsaWQpOwogICAgICAgICBjb3Jy
ZWN0SW5kZXhpbmdUeXBlLmxpbmsoJmppdCk7CiAKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdFN0b3JlU3RydWN0dXJlCiAgICAgfQogI2Vsc2UKICAgICAvLyBE
byBhIDMyLWJpdCB3aWRlIHN0b3JlIHRvIGluaXRpYWxpemUgdGhlIGNlbGwncyBmaWVsZHMuCi0g
ICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+b2JqZWN0SW5pdGlhbGl6
YXRpb25CbG9iKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSk7CisgICAgaml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKHN0cnVjdHVy
ZVB0ci0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkpOwogICAgIGppdC5z
dG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzMTgsOCArMTMxOCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmU2NChzY3JhdGNoLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
ICNlbHNlCiAgICAgICAgIC8vIFN0b3JlIGFsbCB0aGUgaW5mbyBmbGFncyB1c2luZyBhIHNpbmds
ZSAzMi1iaXQgd2lkZSBsb2FkIGFuZCBzdG9yZS4KLSAgICAgICAgbG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0cnVjdHVyZSwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSks
IHNjcmF0Y2gpOwotICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpKTsKKyAgICAgICAgbG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZSwgU3RydWN0dXJlOjppbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICAgICAgc3RvcmUzMihz
Y3JhdGNoLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlw
ZUFuZE1pc2NPZmZzZXQoKSkpOwogCiAgICAgICAgIC8vIFN0b3JlIHRoZSBTdHJ1Y3R1cmVJRAog
ICAgICAgICBzdG9yZVB0cihzdHJ1Y3R1cmUsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3Qs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwpAQCAtMTM1NiwxNCArMTM1Niw0MCBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRCYXJyaWVy
cygpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKdW1wIG9rID0ganVtcElmQmFycmll
clN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRh
dG9yRmVuY2VOb3ROZWVkZWQoKTsKICAgICAgICAgbWVtb3J5RmVuY2UoKTsKICAgICAgICAgb2su
bGluayh0aGlzKTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBqdW1wSWZCYXJyaWVyU3RvcmVMb2Fk
RmVuY2VOb3ROZWVkZWQoKQorICAgIHZvaWQgbXV0YXRvckZlbmNlKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+aGVhcC5hZGRy
ZXNzT2ZCYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5v
dE5lZWRlZCgpOworICAgICAgICBzdG9yZUZlbmNlKCk7CisgICAgICAgIG9rLmxpbmsodGhpcyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVCdXR0ZXJmbHkoR1BSUmVnIGJ1dHRlcmZseSwg
R1BSUmVnIG9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAg
ICBzdG9yZVB0cihidXR0ZXJmbHksIEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5vdE5lZWRlZCgpOworICAgICAgICBz
dG9yZUZlbmNlKCk7CisgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhvYmplY3Qs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICBzdG9yZUZlbmNlKCk7Cisg
ICAgICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICAg
ICAgc3RvcmVQdHIoYnV0dGVyZmx5LCBBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9CisgICAgCisgICAg
SnVtcCBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGJyYW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZk11
dGF0b3JTaG91bGRCZUZlbmNlZCgpKSk7CiAgICAgfQogICAgIAogICAgIC8vIEVtaXRzIHRoZSBi
cmFuY2ggc3RydWN0dXJlIGZvciB0eXBlb2YuIFRoZSBjb2RlIGVtaXR0ZWQgYnkgdGhpcyBkb2Vz
bid0IGZhbGwgdGhyb3VnaC4gVGhlCkBAIC0xNTg5LDcgKzE2MTUsMjkgQEAgcHVibGljOgogICAg
ICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0Ojpj
bGFzc0luZm9PZmZzZXQoKSkpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShHUFJSZWcgYmFzZUdQUiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5saW5lQ2FwYWNpdHk7ICsr
aSkKKyAgICAgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKEpTVmFsdWUoKSwgQWRkcmVzcyhiYXNl
R1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgKyBpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSkpOworICAgIH0KIAorICAgIHZvaWQgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAg
ICBKdW1wIGVtcHR5ID0gYnJhbmNoVGVzdDMyKFplcm8sIGlubGluZUNhcGFjaXR5KTsKKyAgICAg
ICAgTGFiZWwgbG9vcCA9IGxhYmVsKCk7CisgICAgICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
aW5saW5lQ2FwYWNpdHkpOworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlKCksIEJh
c2VJbmRleChiYXNlR1BSLCBpbmxpbmVDYXBhY2l0eSwgVGltZXNFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSk7CisgICAgICAgIGJyYW5jaFRlc3QzMihOb25aZXJvLCBp
bmxpbmVDYXBhY2l0eSkubGlua1RvKGxvb3AsIHRoaXMpOworICAgICAgICBlbXB0eS5saW5rKHRo
aXMpOworICAgIH0KKworICAgIHZvaWQgZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9yYWdlKEdQ
UlJlZyBidXR0ZXJmbHlHUFIsIHVuc2lnbmVkIG91dE9mTGluZUNhcGFjaXR5KQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dE9mTGluZUNhcGFjaXR5OyArK2kpCisg
ICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShKU1ZhbHVlKCksIEFkZHJlc3MoYnV0dGVyZmx5
R1BSLCAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIChpICsgMSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSk7CisgICAgfQorICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgdm9pZCB3YW5n
c0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKTsKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OTYsNyArOTk2LDcgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9m
aWxpbmdTaXRlVwogICAgICAgICBzdG9yZTMyKGluZGV4aW5nVHlwZSwgYXJyYXlQcm9maWxlLT5h
ZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwogICAgIH0KIAotICAgIGxvYWQ4KEFkZHJl
c3MoY2VsbCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIGluZGV4aW5nVHlwZSk7Cisg
ICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KSksIGluZGV4aW5nVHlwZSk7CiB9CiAKIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmls
aW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVy
SUQgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjAxLDggKzIyMDEsMTAgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZWFsbG9jYXRlQgogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
IAogICAgIEFTU0VSVCghb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
Ci0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVTdG9yYWdlKHZt
LCAwLCBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRlcmZseSogcmVz
dWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCAwLCBpbml0aWFs
T3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgb2Jq
ZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAt
MjIxMSw4ICsyMjEzLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0
ZUIKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKIAotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0LT5ncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgbmV3U2l6ZSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdT
dHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmFs
bG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCksIG5ld1NpemUpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHkodm0sIHJlc3VsdCk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2Nv
cGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rp
b24uCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAg
ICAgICAgICAgICAKQEAgLTEwMTYsNiArMTAxNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90
b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJlZ1Qx
KTsKICAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CiAgICAgICAgICAgICBzdG9yZVB0cihyZWdU
MiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0V3Jp
dGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgpAQCAtMTAyNCw3ICsxMDI0LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKEluc3RydWN0aQogICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29w
ZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBl
bWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7
CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKICAgICAgICAgICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQ
dXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNr
IGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBj
aGVja3Mgc3RhdGljYWxseS4KQEAgLTEwMzgsMTQgKzEwMzcsMTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxW
YXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFs
dWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0p
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFi
bGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudElu
c3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJy
aWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwogICAgICAgICAgICAgZW1pdFB1dENs
b3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1
XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMTE1NywxMSArMTE1Nywx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3RyCiAgICAgaW50IGlu
ZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICBpbnQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgIAotICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAs
IERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVC
YXJyaWVyPFVua25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiB9CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9u
IDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzgsNiArMTc4LDE1IEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2Vy
dGlvbnMoVk0mIHZtKQogICAgIFNUQVRJQ19BU1NFUlQoRXZhbENvZGUgPT0gMSk7CiAgICAgU1RB
VElDX0FTU0VSVChGdW5jdGlvbkNvZGUgPT0gMik7CiAgICAgU1RBVElDX0FTU0VSVChNb2R1bGVD
b2RlID09IDMpOworICAgIAorICAgIFNUQVRJQ19BU1NFUlQoSXNBcnJheSA9PSAweDAxKTsKKyAg
ICBTVEFUSUNfQVNTRVJUKEluZGV4aW5nU2hhcGVNYXNrID09IDB4MEUpOworICAgIFNUQVRJQ19B
U1NFUlQoTm9JbmRleGluZ1NoYXBlID09IDB4MDApOworICAgIFNUQVRJQ19BU1NFUlQoSW50MzJT
aGFwZSA9PSAweDA0KTsKKyAgICBTVEFUSUNfQVNTRVJUKERvdWJsZVNoYXBlID09IDB4MDYpOwor
ICAgIFNUQVRJQ19BU1NFUlQoQ29udGlndW91c1NoYXBlID09IDB4MDgpOworICAgIFNUQVRJQ19B
U1NFUlQoQXJyYXlTdG9yYWdlU2hhcGUgPT0gMHgwQSk7CisgICAgU1RBVElDX0FTU0VSVChTbG93
UHV0QXJyYXlTdG9yYWdlU2hhcGUgPT0gMHgwQyk7CiAKICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PHB0cmRpZmZfdD4oKHJlaW50ZXJwcmV0X2Nhc3Q8V3JpdGVCYXJyaWVyPEpTQ2VsbD4q
PigweDQwMDApLT5zbG90KCkpKSAtIDB4NDAwMCkpOwogICAgIHN0YXRpY19hc3NlcnQoUHV0QnlJ
ZFByaW1hcnlUeXBlTWFzayA9PSAweDYsICJMTEludCBhc3N1bWVzIFB1dEJ5SWRQcmltYXJ5VHlw
ZU1hc2sgaXMgPT0gMHg2Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTE1MDUsNiArMTUwNSw3IEBAIF9sbGludF9vcF9nZXRfYnlfdmFsOgog
Lm9wR2V0QnlWYWxPdXRPZkJvdW5kczoKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig0LCB0MCkK
ICAgICBzdG9yZWIgMSwgQXJyYXlQcm9maWxlOjptX291dE9mQm91bmRzW3QwXQorICAgIGptcCAu
b3BHZXRCeVZhbFNsb3cKIAogLm9wR2V0QnlWYWxOb3RJbmRleGVkU3RvcmFnZToKICAgICAjIEZp
cnN0IGxldHMgY2hlY2sgaWYgd2UgZXZlbiBoYXZlIGEgdHlwZWQgYXJyYXkuIFRoaXMgbGV0cyB1
cyBkbyBzb21lIGJvaWxlcnBsYXRlIHVwIGZyb250LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA4
NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsMTQgKzMzMywxNCBAQCBlbHNlCiBlbmQKIAogIyBD
b25zdGFudCBmb3IgcmVhc29uaW5nIGFib3V0IGJ1dHRlcmZsaWVzLgotY29uc3QgSXNBcnJheSAg
ICAgICAgICAgICAgICAgID0gMQotY29uc3QgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMzAK
LWNvbnN0IE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDAKLWNvbnN0IEludDMyU2hhcGUgICAg
ICAgICAgICAgICA9IDIwCi1jb25zdCBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAyMgotY29u
c3QgQ29udGlndW91c1NoYXBlICAgICAgICAgID0gMjYKLWNvbnN0IEFycmF5U3RvcmFnZVNoYXBl
ICAgICAgICA9IDI4Ci1jb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAzMAorY29uc3Qg
SXNBcnJheSAgICAgICAgICAgICAgICAgID0gMHgwMQorY29uc3QgSW5kZXhpbmdTaGFwZU1hc2sg
ICAgICAgID0gMHgwRQorY29uc3QgTm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMAorY29u
c3QgSW50MzJTaGFwZSAgICAgICAgICAgICAgID0gMHgwNAorY29uc3QgRG91YmxlU2hhcGUgICAg
ICAgICAgICAgID0gMHgwNgorY29uc3QgQ29udGlndW91c1NoYXBlICAgICAgICAgID0gMHgwOAor
Y29uc3QgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQQorY29uc3QgU2xvd1B1dEFycmF5
U3RvcmFnZVNoYXBlID0gMHgwQwogCiAjIFR5cGUgY29uc3RhbnRzLgogY29uc3QgU3RyaW5nVHlw
ZSA9IDYKQEAgLTg4Nyw3ICs4ODcsNyBAQCBtYWNybyBhcnJheVByb2ZpbGUoY2VsbEFuZEluZGV4
aW5nVHlwZSwgCiAgICAgY29uc3QgaW5kZXhpbmdUeXBlID0gY2VsbEFuZEluZGV4aW5nVHlwZSAK
ICAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbY2VsbF0sIHNjcmF0Y2gKICAgICBzdG9y
ZWkgc2NyYXRjaCwgQXJyYXlQcm9maWxlOjptX2xhc3RTZWVuU3RydWN0dXJlSURbcHJvZmlsZV0K
LSAgICBsb2FkYiBKU0NlbGw6Om1faW5kZXhpbmdUeXBlW2NlbGxdLCBpbmRleGluZ1R5cGUKKyAg
ICBsb2FkYiBKU0NlbGw6Om1faW5kZXhpbmdUeXBlQW5kTWlzY1tjZWxsXSwgaW5kZXhpbmdUeXBl
CiBlbmQKIAogbWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgc2xvd1BhdGgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5s
aW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDcgQEAgaW5s
aW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGUoVk0mIAogICAgICAgICBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7CiAgICAgaWYgKGhhc0luZGV4aW5nSGVhZGVyKQogICAgICAgICAq
cmVzdWx0LT5pbmRleGluZ0hlYWRlcigpID0gaW5kZXhpbmdIZWFkZXI7CisgICAgbWVtc2V0KHJl
c3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBwcm9wZXJ0eUNhcGFjaXR5LCAwLCBwcm9wZXJ0eUNh
cGFjaXR5ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtMTA1LDYgKzEwNiwxMCBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZU9yR3JvCiAgICAgICAgIHJlc3VsdC0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNh
cGFjaXR5LAogICAgICAgICBvbGRCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gb2xkUHJv
cGVydHlDYXBhY2l0eSwKICAgICAgICAgdG90YWxTaXplKDAsIG9sZFByb3BlcnR5Q2FwYWNpdHks
IGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcykpOworICAgIG1l
bXNldCgKKyAgICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG5ld1Byb3BlcnR5Q2Fw
YWNpdHksCisgICAgICAgIDAsCisgICAgICAgIChuZXdQcm9wZXJ0eUNhcGFjaXR5IC0gb2xkUHJv
cGVydHlDYXBhY2l0eSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50
SklUTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bmN1cnJlbnRKSVRMb2NrLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDE1
ICs5NCw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0jaWYgRU5BQkxFKENPTkNVUlJF
TlRfSklUKQogICAgIERlZmVyR0MgbV9kZWZlckdDOwotI2Vsc2UKLSAgICBzdHJ1Y3QgTm9EZWZl
ciB7Ci0gICAgICAgIE5vRGVmZXIoSGVhcCYgaGVhcCkgOiBtX2hlYXAoaGVhcCkgeyB9Ci0gICAg
ICAgIEhlYXAmIG1faGVhcDsKLSAgICB9OwotICAgIE5vRGVmZXIgbV9kZWZlckdDOwotI2VuZGlm
CiB9OwogCiBjbGFzcyBDb25jdXJyZW50SklUTG9ja2VyIDogcHVibGljIENvbmN1cnJlbnRKSVRM
b2NrZXJCYXNlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjYsMTEgKzY2LDEzIEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBl
Pjo6Z2V0T3duUHJvcGUKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihvYmpl
Y3QpOwogICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5k
ZXgpKSB7Ci0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgdGhpc09iamVj
dC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhp
c09iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh0
aGlzT2JqZWN0LCBOb25lLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCi0gICAgcmV0dXJuIEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgob2JqZWN0LCBl
eGVjLCBpbmRleCwgc2xvdCk7CisgICAgYm9vbCByZXN1bHQgPSBCYXNlOjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0xMjksNyArMTMxLDcgQEAgYm9v
bCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpwdXRCeUluZGV4KAogewogICAgIFR5cGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8VHlwZSo+KGNlbGwpOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0K
KyAgICAKICAgICBpZiAodGhpc09iamVjdC0+Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkg
ewogICAgICAgICB0aGlzT2JqZWN0LT5zZXRJbmRleFF1aWNrbHkodm0sIGluZGV4LCB2YWx1ZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5kZXhpbmdUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTIsMjEgKzUzLDI1IEBAIHR5cGVkZWYgdWludDhfdCBJ
bmRleGluZ1R5cGU7CiBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIElzQXJyYXkgICAgICAgICAg
ICAgICAgICA9IDB4MDE7CiAKIC8vIFRoZSBzaGFwZSBvZiB0aGUgaW5kZXhlZCBwcm9wZXJ0eSBz
dG9yYWdlLgotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAg
ICAgPSAweDBFOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAg
ICAgICAgPSAweDAwOwotc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAg
ICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlzLgotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAweDA0Owotc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgPSAweDA2Owotc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Owotc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBOwot
c3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgPSAweDBD
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgICAg
ICAgID0gMHgwRTsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTm9JbmRleGluZ1NoYXBlICAg
ICAgICAgICAgICAgICA9IDB4MDA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRl
ZFNoYXBlICAgICAgICAgICAgICAgICAgPSAweDAyOyAvLyBPbmx5IHVzZWZ1bCBmb3IgYXJyYXlz
Lgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbnQzMlNoYXBlICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwNDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDY7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIENvbnRpZ3Vv
dXNTaGFwZSAgICAgICAgICAgICAgICAgPSAweDA4Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgICAgICAgID0gMHgwQTsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEM7CiAKLXN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgID0gMTsKLXN0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgID0gNzsKK3N0
YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5kZXhpbmdTaGFwZVNoaWZ0ICAgICAgICAgICAgICA9
IDE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9mSW5kZXhpbmdTaGFwZXMgICAg
ICAgICAgPSA3OwogCiAvLyBBZGRpdGlvbmFsIGZsYWdzIGZvciB0cmFja2luZyB0aGUgaGlzdG9y
eSBvZiB0aGUgdHlwZS4gVGhlc2UgYXJlIHVzdWFsbHkKIC8vIG1hc2tlZCBvZmYgdW5sZXNzIHlv
dSBhc2sgZm9yIHRoZW0gZGlyZWN0bHkuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1heUhh
dmVJbmRleGVkQWNjZXNzb3JzICA9IDB4MTA7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE1h
eUhhdmVJbmRleGVkQWNjZXNzb3JzICAgICAgICAgPSAweDEwOworCisvLyBUaGUgSW5kZXhpbmdU
eXBlIGZpZWxkIG9mIEpTQ2VsbHMgaXMgc3RvbGVuIGZvciBsb2Nrcy4KK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCAgICAgICAgICA9IDB4MjA7CitzdGF0
aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tIYXNQYXJrZWQgICAgICAgPSAw
eDQwOwogCiAvLyBMaXN0IG9mIGFjY2VwdGFibGUgYXJyYXkgdHlwZXMuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIE5vbkFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA7CkBAIC0x
NzcsNCArMTgyLDYgQEAgc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzIAog
Ly8gTWFzayBvZiBhbGwgcG9zc2libGUgdHlwZXMgaW5jbHVkaW5nIHRoZSBoaXN0b3J5Lgogc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBBbGxBcnJheVR5cGVzQW5kSGlzdG9yeSAgPSBBbGxBcnJh
eVR5cGVzIHwgTWF5SGF2ZUluZGV4ZWRBY2Nlc3NvcnM7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRo
bTxJbmRleGluZ1R5cGUsIEluZGV4aW5nVHlwZUxvY2tJc0hlbGQsIEluZGV4aW5nVHlwZUxvY2tI
YXNQYXJrZWQ+IEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG07CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlz
aW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDkgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0
Q291bnRTbG93Q2FzZShWTSYgdgogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlT
dG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhCaWFzOwogICAgIAotICAgIHNldEJ1dHRl
cmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIAorICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVy
Zmx5KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA2MywxMyArMTA2NSwxNSBAQCBib29s
IEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAgICAgLy8gTmVlZCB0byBoYXZl
IEdDIGRlZmVycmVkIGFyb3VuZCB0aGUgdW5zaGlmdENvdW50U2xvd0Nhc2UoKSwgc2luY2UgdGhh
dCBsZWF2ZXMgdGhlIGJ1dHRlcmZseSBpbgogICAgIC8vIGEgd2VpcmQgc3RhdGU6IHNvbWUgcGFy
dHMgb2YgaXQgd2lsbCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIHdoaWNoIHdlIHdpbGwgZmlsbCBp
biBoZXJlLgogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBKU0NlbGw6OkludGVy
bmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKICAgICAKICAgICBpZiAobW92ZUZyb250ICYmIHN0b3Jh
Z2UtPm1faW5kZXhCaWFzID49IGNvdW50KSB7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPnVuc2hpZnQoc3RydWN0dXJlKCksIGNvdW50KTsK
ICAgICAgICAgc3RvcmFnZSA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAg
IHN0b3JhZ2UtPm1faW5kZXhCaWFzIC09IGNvdW50OwogICAgICAgICBzdG9yYWdlLT5zZXRWZWN0
b3JMZW5ndGgodmVjdG9yTGVuZ3RoICsgY291bnQpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRo
b3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsK
ICAgICB9IGVsc2UgaWYgKCFtb3ZlRnJvbnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNv
dW50KQogICAgICAgICBzdG9yYWdlID0gc3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFn
ZSgpOwogICAgIGVsc2UgaWYgKHVuc2hpZnRDb3VudFNsb3dDYXNlKHZtLCBkZWZlckdDLCBtb3Zl
RnJvbnQsIGNvdW50KSkKQEAgLTEwOTAsNiArMTA5NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlm
dENvdW50V2l0aEFycmF5U3RvcmEKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQogICAgICAgICB2ZWN0b3JbaSArIHN0YXJ0SW5kZXhdLmNsZWFyKCk7CisgICAgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDggKzEwMCwzMiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1Byb3h5KCkgY29uc3Q7CiAgICAgYm9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0lu
Zm8qKSBjb25zdDsKICAgICBib29sIGlzQVBJVmFsdWVXcmFwcGVyKCkgY29uc3Q7CisgICAgCisg
ICAgLy8gRWFjaCBjZWxsIGhhcyBhIGJ1aWx0LWluIGxvY2suIEN1cnJlbnRseSBpdCdzIHNpbXBs
eSBhdmFpbGFibGUgZm9yIHVzZSBpZiB5b3UgbmVlZCBpdC4gSXQncworICAgIC8vIGEgZnVsbC1i
bG93biBXVEY6OkxvY2suIE5vdGUgdGhhdCB0aGlzIGxvY2sgaXMgY3VycmVudGx5IHVzZWQgaW4g
SlNBcnJheSBhbmQgdGhhdCBsb2NrJ3MKKyAgICAvLyBvcmRlcmluZyB3aXRoIHRoZSBTdHJ1Y3R1
cmUgbG9jayBpcyB0aGF0IHRoZSBTdHJ1Y3R1cmUgbG9jayBtdXN0IGJlIGFjcXVpcmVkIGZpcnN0
LgorICAgIHZvaWQgbG9ja0ludGVybmFsTG9jaygpOworICAgIHZvaWQgdW5sb2NrSW50ZXJuYWxM
b2NrKCk7CisgICAgCisgICAgY2xhc3MgSW50ZXJuYWxMb2NrZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSW50ZXJuYWxMb2NrZXIoSlNDZWxsKiBjZWxsKQorICAgICAgICAgICAgOiBtX2NlbGwo
Y2VsbCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jZWxsLT5sb2NrSW50ZXJuYWxMb2NrKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5JbnRlcm5hbExvY2tlcigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fY2VsbC0+dW5sb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNDZWxsKiBtX2NlbGw7CisgICAgfTsK
IAogICAgIEpTVHlwZSB0eXBlKCkgY29uc3Q7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZUFuZE1pc2MoKSBjb25zdDsKICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3Q7
CiAgICAgU3RydWN0dXJlSUQgc3RydWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZUlEOyB9CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKQEAgLTE2Nyw2ICsxOTEs
MTYgQEAgcHVibGljOgogICAgIENlbGxTdGF0ZSBjZWxsU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2NlbGxTdGF0ZTsgfQogICAgIAogICAgIHZvaWQgc2V0Q2VsbFN0YXRlKENlbGxTdGF0ZSBkYXRh
KSBjb25zdCB7IGNvbnN0X2Nhc3Q8SlNDZWxsKj4odGhpcyktPm1fY2VsbFN0YXRlID0gZGF0YTsg
fQorICAgIAorICAgIGJvb2wgYXRvbWljQ29tcGFyZUV4Y2hhbmdlQ2VsbFN0YXRlV2Vha1JlbGF4
ZWQoQ2VsbFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9jZWxsU3Rh
dGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQorCisgICAgQ2VsbFN0YXRlIGF0b21pY0Nv
bXBhcmVFeGNoYW5nZUNlbGxTdGF0ZVN0cm9uZyhDZWxsU3RhdGUgb2xkU3RhdGUsIENlbGxTdGF0
ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmF0b21pY0NvbXBhcmVFeGNo
YW5nZVN0cm9uZygmbV9jZWxsU3RhdGUsIG9sZFN0YXRlLCBuZXdTdGF0ZSk7CisgICAgfQogCiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBzdHJ1Y3R1cmVJRE9mZnNldCgpCiAgICAgewpAQCAtMTgzLDkg
KzIxNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxs
LCBtX3R5cGUpOwogICAgIH0KIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zm
c2V0KCkKKyAgICAvLyBETyBOT1Qgc3RvcmUgdG8gdGhpcyBmaWVsZC4gQWx3YXlzIHVzZSBhIENB
UyBsb29wLCBzaW5jZSBzb21lIGJpdHMgYXJlIGZsaXBwZWQgdXNpbmcgQ0FTCisgICAgLy8gZnJv
bSBvdGhlciB0aHJlYWRzIGR1ZSB0byB0aGUgaW50ZXJuYWwgbG9jay4gT25lIGV4Y2VwdGlvbjog
eW91IGRvbid0IG5lZWQgdGhlIENBUyBpZiB0aGUKKyAgICAvLyBvYmplY3QgaGFzIG5vdCBlc2Nh
cGVkIHlldC4KKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhp
bmdUeXBlKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1faW5kZXhp
bmdUeXBlQW5kTWlzYyk7CiAgICAgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBjZWxsU3RhdGVP
ZmZzZXQoKQpAQCAtMjI4LDcgKzI2NSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIFN0cnVjdHVyZUlEIG1fc3RydWN0dXJlSUQ7Ci0g
ICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlOworICAgIEluZGV4aW5nVHlwZSBtX2luZGV4
aW5nVHlwZUFuZE1pc2M7IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgQ0FT
LgogICAgIEpTVHlwZSBtX3R5cGU7CiAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBtX2Zs
YWdzOwogICAgIENlbGxTdGF0ZSBtX2NlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIGlubGluZSBKU0NlbGw6OkpTQ2VsbChDcmVhdGlu
Z0Vhcmx5Q2VsbFQKIAogaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFZNJiwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgOiBtX3N0cnVjdHVyZUlEKHN0cnVjdHVyZS0+aWQoKSkKLSAgICAsIG1faW5k
ZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgLCBtX2luZGV4aW5nVHlw
ZUFuZE1pc2Moc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkpCiAgICAg
LCBtX3R5cGUoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSkKICAgICAsIG1fZmxhZ3Moc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKQogICAgICwgbV9jZWxsU3RhdGUo
Q2VsbFN0YXRlOjpOZXdXaGl0ZSkKQEAgLTU3LDYgKzU3LDEwIEBAIGlubGluZSBKU0NlbGw6OkpT
Q2VsbChWTSYsIFN0cnVjdHVyZSogc3QKIAogaW5saW5lIHZvaWQgSlNDZWxsOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiB7CisgICAgLy8gVGhpcyBvYmplY3QgaXMgcmVhZHkgdG8gYmUgZXNjYXBl
ZCBzbyB0aGUgY29uY3VycmVudCBHQyBtYXkgc2VlIGl0IGF0IGFueSB0aW1lLiBXZSBoYXZlCisg
ICAgLy8gdG8gbWFrZSBzdXJlIHRoYXQgbm9uZSBvZiBvdXIgc3RvcmVzIHNpbmsgYmVsb3cgaGVy
ZS4KKyAgICBpZiAoaXNYODYoKSB8fCBVTkxJS0VMWSh2bS5oZWFwLm11dGF0b3JTaG91bGRCZUZl
bmNlZCgpKSkKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICNpZiBFTkFCTEUoR0Nf
VkFMSURBVElPTikKICAgICBBU1NFUlQodm0uaXNJbml0aWFsaXppbmdPYmplY3QoKSk7CiAgICAg
dm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoMCk7CkBAIC03NCw3ICs3OCw3IEBAIGlubGlu
ZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKICAgICBpZiAoc3RydWN0dXJlKSB7
CiAjZW5kaWYKICAgICAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZS0+aWQoKTsKLSAgICAg
ICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgICAgICBt
X2luZGV4aW5nVHlwZUFuZE1pc2MgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoKTsKICAgICAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsK
ICAgICAgICAgbV9mbGFncyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3Mo
KTsKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKQEAgLTkxLDkgKzk1LDE0IEBAIGlubGluZSBK
U1R5cGUgSlNDZWxsOjp0eXBlKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlOwogfQogCitpbmxp
bmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW5kZXhpbmdUeXBlQW5kTWlzYzsKK30KKwogaW5saW5lIEluZGV4aW5nVHlw
ZSBKU0NlbGw6OmluZGV4aW5nVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1faW5kZXhpbmdU
eXBlOworICAgIHJldHVybiBpbmRleGluZ1R5cGVBbmRNaXNjKCkgJiBBbGxBcnJheVR5cGVzOwog
fQogCiBpbmxpbmUgU3RydWN0dXJlKiBKU0NlbGw6OnN0cnVjdHVyZSgpIGNvbnN0CkBAIC0xOTUs
MTcgKzIwNCwyNiBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6OmlzQVBJVmFsdWVXcmFwcGVyKCkgCiAg
ICAgcmV0dXJuIG1fdHlwZSA9PSBBUElWYWx1ZVdyYXBwZXJUeXBlOwogfQogCi1pbmxpbmUgdm9p
ZCBKU0NlbGw6OnNldFN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorQUxX
QVlTX0lOTElORSB2b2lkIEpTQ2VsbDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkgPT0gdGhpcy0+
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpKTsKICAgICBBU1NFUlQoIXRoaXMtPnN0cnVjdHVyZSgp
CiAgICAgICAgIHx8IHRoaXMtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhh
c0JlZW5JbnZhbGlkYXRlZCgpCiAgICAgICAgIHx8IEhlYXA6OmhlYXAodGhpcyktPnN0cnVjdHVy
ZUlEVGFibGUoKS5nZXQoc3RydWN0dXJlLT5pZCgpKSA9PSBzdHJ1Y3R1cmUpOwotICAgIHZtLmhl
YXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CiAgICAgbV9zdHJ1Y3R1cmVJRCA9IHN0
cnVjdHVyZS0+aWQoKTsKICAgICBtX2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGlu
ZVR5cGVGbGFncygpOwogICAgIG1fdHlwZSA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCk7
Ci0gICAgbV9pbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIElu
ZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUgPSBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKTsKKyAgICBpZiAobV9pbmRleGluZ1R5cGVBbmRNaXNjICE9IG5ld0luZGV4
aW5nVHlwZSkgeworICAgICAgICBBU1NFUlQoIShuZXdJbmRleGluZ1R5cGUgJiB+QWxsQXJyYXlU
eXBlc0FuZEhpc3RvcnkpKTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgSW5kZXhp
bmdUeXBlIG9sZFZhbHVlID0gbV9pbmRleGluZ1R5cGVBbmRNaXNjOworICAgICAgICAgICAgSW5k
ZXhpbmdUeXBlIG5ld1ZhbHVlID0gKG9sZFZhbHVlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5
KSB8IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOworICAgICAgICAg
ICAgaWYgKFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQoJm1faW5kZXhpbmdU
eXBlQW5kTWlzYywgb2xkVmFsdWUsIG5ld1ZhbHVlKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1
cmUpOwogfQogCiBpbmxpbmUgY29uc3QgTWV0aG9kVGFibGUqIEpTQ2VsbDo6bWV0aG9kVGFibGUo
KSBjb25zdApAQCAtMjg0LDExICszMDIsMjYgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpjYWxsRGVz
dHJ1Y3RvcihWTSYgdgogICAgIGlmIChpc1phcHBlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
QVNTRVJUKHN0cnVjdHVyZUlEKCkpOwotICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVj
dHVyZUlzSW1tb3J0YWwpCi0gICAgICAgIHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZS5kZXN0cm95KHRoaXMpOwotICAgIGVsc2UKKyAgICBpZiAoaW5saW5lVHlwZUZsYWdz
KCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8gPSBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpOworICAgICAgICBNZXRob2RUYWJsZTo6RGVzdHJv
eUZ1bmN0aW9uUHRyIGRlc3Ryb3kgPSBjbGFzc0luZm8tPm1ldGhvZFRhYmxlLmRlc3Ryb3k7Cisg
ICAgICAgIGRlc3Ryb3kodGhpcyk7CisgICAgfSBlbHNlCiAgICAgICAgIGpzQ2FzdDxKU0Rlc3Ry
dWN0aWJsZU9iamVjdCo+KHRoaXMpLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0
aGlzKTsKICAgICB6YXAoKTsKIH0KIAoraW5saW5lIHZvaWQgSlNDZWxsOjpsb2NrSW50ZXJuYWxM
b2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdpc2VfY2FzdDxB
dG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOworICAgIEluZGV4
aW5nVHlwZUxvY2tBbGdvcml0aG06OmxvY2soKmxvY2spOworfQorCitpbmxpbmUgdm9pZCBKU0Nl
bGw6OnVubG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlwZT4qIGxv
Y2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGluZ1R5cGVB
bmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjp1bmxvY2soKmxvY2spOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDE3ICsxMTIs
MjggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcgogICAgIAogICAg
IC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4o
YnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7
Ci0gICAgCi0gICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCi0gICAgc3dpdGNo
ICh0aGlzLT5pbmRleGluZ1R5cGUoKSkgeworCisgICAgSW5kZXhpbmdUeXBlIG9sZFR5cGUgPSBz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOworICAgIHN3aXRjaCAob2xkVHlwZSkgewogICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5w
dWJsaWNMZW5ndGgoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JB
R0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSk7Ci0gICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3NwYXJzZU1hcCkKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFH
RV9JTkRFWElOR19UWVBFUzogeworICAgICAgICAvLyBUaGlzIGxvY2sgaXMgaGVyZSB0byBwcm90
ZWN0IENvbnRpZ3VvdXMtPkFycmF5U3RvcmFnZSB0cmFuc2l0aW9ucywgYnV0IHdlIGNvdWxkIG1h
a2UgdGhhdAorICAgICAgICAvLyByYWNlIHdvcmsgaWYgd2UgbmVlZGVkIHRvLgorICAgICAgICBK
U0NlbGw6OkludGVybmFsTG9ja2VyIGxvY2tlcih0aGlzKTsKKyAgICAgICAgSW5kZXhpbmdUeXBl
IG5ld1R5cGUgPSB0aGlzLT5pbmRleGluZ1R5cGUoKTsKKyAgICAgICAgYnV0dGVyZmx5ID0gdGhp
cy0+YnV0dGVyZmx5KCk7CisgICAgICAgIHN3aXRjaCAobmV3VHlwZSkgeworICAgICAgICBjYXNl
IEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAgICAgICAgICAgdmlzaXRvci5hcHBl
bmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAv
LyBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUworICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgICAgIGlm
IChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKKyAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0NiwxMCArMTU3LDM0IEBA
IHZvaWQgSlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWwKICAgICAKICAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChidXR0
ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRl
cmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSkpOwotCisgICAgLy8gV2Ug
d2FudCB0byBkZWZlbmQgYWdhaW5zdCBtdWx0aXBsZSBwb3NzaWJsZSByYWNlcyB3aXRoIHRoZSBt
dXRhdG9yOgorICAgIC8vIC0gTXV0YXRvciBjb3VsZCBpbnN0YWxsIGEgYmlnZ2VyIGJ1dHRlcmZs
eSBhbmQgdGhlbiBpbnN0YWxsIGEgc3RydWN0dXJlIHRoYXQgY2xhaW1zIG1vcmUKKyAgICAvLyAg
IHByb3BlcnRpZXMuIFRoaXMgdHJpdmlhbGx5IHdvcmtzLgorICAgIC8vIC0gTXV0YXRvciBjb3Vs
ZCBtdXRhdGUgdGhlIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBIZW5jZSwgd2UgaG9sZCB0aGUgc3Ry
dWN0dXJlIGxvY2sgZm9yCisgICAgLy8gICBkaWN0aW9uYXJ5IHN0cnVjdHVyZXMuCisgICAgLy8g
LSBUaGUgYnV0dGVyZmx5IGNvdWxkIHNocmluaywgYnV0IHRoaXMgY291bGQgb25seSBoYXBwZW4g
aWYgdGhlIG9iamVjdCB3YXMgYSBkaWN0aW9uYXJ5LgorICAgIC8vICAgVXN1YWxseSwgdGhpcyBt
ZWFucyB0aGF0IHdlIHdvdWxkIGdldCB0aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGFjcXVp
cmUgYSBsb2NrLiBUaGF0CisgICAgLy8gICB0cml2aWFsbHkgd29ya3MuIEJ1dCB3ZSBjb3VsZCBs
b2FkIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBvYmplY3QgYmVjYW1lIGEgZGljdGlvbmFyeQor
ICAgIC8vICAgYW5kIHRoZW4gbG9hZCB0aGUgYnV0dGVyZmx5IHRoYXQgd2FzIHNocnVuay4gV2Ug
cHJvdGVjdCBhZ2FpbnN0IHRoaXMgY2FzZSBieSBjaGVja2luZworICAgIC8vICAgdGhlIHN0cnVj
dHVyZSBhIHNlY29uZCB0aW1lIGJlZm9yZSBzY2FubmluZyB0aGUgYnV0dGVyZmx5LiBUaGlzIG1l
YW5zIHRoYXQgdGhlIGJ1dHRlcmZseQorICAgIC8vICAgaXMgYXQgd29yc3QgdGhlIGJ1dHRlcmZs
eSB0aGF0IHRoZSBtdXRhdG9yIGhhZCBpbnN0YWxsZWQganVzdCBwcmlvciB0byBmbGlwcGluZyB0
aGUKKyAgICAvLyAgIHN0dXJjdHVyZS4gU28gaWYgdGhlIHN0cnVjdHVyZSB3ZSBzZWUgaXMgYSBu
b24tZGljdGlvbmFyeSB0aGVuIHRoZSBidXR0ZXJmbHkgY2Fubm90IHlldAorICAgIC8vICAgaGF2
ZSBiZWVuIHNocnVuay4KKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgIGJvb2wgd2FzRGlj
dGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAgaWYgKHdhc0RpY3Rpb25h
cnkpIHsKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIH0gZWxzZQorICAg
ICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXQoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2Fk
RmVuY2UoKTsKKyAgICAgICAgaWYgKHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCkgPT0gc3RydWN0
dXJlLT5pZCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRv
ciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIH0KKyAgICBpZiAod2FzRGljdGlvbmFyeSkK
KyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAgCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24g
PSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2VuZGlmCkBAIC0yMDQsMTUg
KzIzOSwyNSBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAg
CiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgp
KTsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpOwot
ICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZp
c2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICBWTSYgdm0gPSB2aXNpdG9yLnZtKCk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwor
ICAgIGJvb2wgd2FzRGljdGlvbmFyeSA9IHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCk7CisgICAg
aWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLmxvY2soKTsKKyAg
ICBlbHNlCisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkq
IGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPmJ1dHRlcmZseSgpKSB7CisgICAgICAgIFdURjo6bG9h
ZExvYWRGZW5jZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5pZCgpID09IHRoaXNPYmplY3Qt
PnN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2
aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQogCiAgICAgc2l6ZV90IHN0b3Jh
Z2VTaXplID0gc3RydWN0dXJlLT5pbmxpbmVTaXplKCk7CiAgICAgaWYgKHN0b3JhZ2VTaXplKQog
ICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9y
YWdlKCksIHN0b3JhZ2VTaXplKTsKLQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBz
dHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTY2Niw3ICs3MTEsOCBAQCBB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0OjplbnRlckRpY3Rpb25hcnlJCiAgICAgbmV3QnV0dGVyZmx5
LT5hcnJheVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSAwOwogICAgIG5ld0J1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aCgwKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5
U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5zZXQodm0sIHRoaXMsIG1hcCk7Ci0gICAgc2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwog
ICAgIAogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpOwogfQpAQCAtNzMx
LDcgKzc3NywxMCBAQCBCdXR0ZXJmbHkqIEpTT2JqZWN0OjpjcmVhdGVJbml0aWFsVW5kZWNpCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gY3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVVbmRlY2lkZWQpOwot
ICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJm
bHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBu
ZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHk7CiB9CiAKQEAg
LTc0Miw3ICs3OTEsMTAgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0
aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGkt
LTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKClbaV0uc2V0V2l0aG91
dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0g
U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTc1
Myw3ICs4MDUsMTAgQEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQog
ICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTsp
CiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpW2ldID0gUE5hTjsKICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlRG91
YmxlKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZs
eSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzRG91YmxlKCk7CiB9CiAKQEAgLTc2NCw3ICs4MTksMTAgQEAgQ29udGlndW91c0pT
VmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAgIGZvciAodW5zaWduZWQgaSA9IG5ld0J1
dHRlcmZseS0+dmVjdG9yTGVuZ3RoKCk7IGktLTspCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29u
dGlndW91cygpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91
cyk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1
dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHko
dm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRT
dHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29u
dGlndW91cygpOwogfQogCkBAIC03OTcsNyArODU1LDEwIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNyZWF0ZUFycmF5U3RvcmEKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0
ZUFycmF5U3RvcmFnZUJ1dHRlcmZseSh2bSwgdGhpcywgc3RydWN0dXJlLCBsZW5ndGgsIHZlY3Rv
ckxlbmd0aCwgbV9idXR0ZXJmbHkuZ2V0KCkpOwogICAgIEFycmF5U3RvcmFnZSogcmVzdWx0ID0g
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHN0cnVj
dHVyZS0+c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbigpKTsKLSAgICBzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3Ry
dWN0dXJlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04ODAsNyArOTQxLDEwIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWQKICAgICAgICAgc3RvcmFnZS0+
bV92ZWN0b3JbaV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIAogICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1
dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIHN0b3JhZ2UtPmJ1dHRl
cmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gc3RvcmFnZTsKIH0KIApAQCAtOTM1LDcgKzk5
OSwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FyCiAgICAgfQog
ICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5l
d1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsK
IH0KIApAQCAtOTgxLDcgKzEwNDgsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVy
dERvdWJsZVRvQQogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0
aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
c2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTEwMDYsNyArMTA3NiwyMyBAQCBBcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2
bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisKKyAgICAvLyBUaGlz
IGhhcyBhIGNyYXp5IHJhY2Ugd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuIFdoZW4gY2hhbmdp
bmcgdGhlIGJ1dHRlcmZseSBhbmQgc3RydWN0dXJlLAorICAgIC8vIHRoZSBtdXRhdG9yIGFsd2F5
cyBzZXRzIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gVGhlIGNvbGxlY3RvciB3aWxsIGFsd2F5cyByZWFk
IHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBmaXJzdC4gV2UgcHJvYmFibHkgaGF2ZSB0byBmb2xsb3cg
dGhhdCBjb252ZW50aW9uIGhlcmUgYXMgd2VsbC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0
b3IKKyAgICAvLyB3aWxsIHNvbWV0aW1lcyBzZWUgdGhlIG5ldyBidXR0ZXJmbHkgKHRoZSBvbmUg
d2l0aCBBcnJheVN0b3JhZ2UpIHdpdGggdGhlIG9ubHkgc3RydWN0dXJlICh0aGUKKyAgICAvLyBv
bmUgdGhhdCBzYXlzIHRoYXQgdGhlIGJ1dHRlcmZseSBpcyBDb250aWd1b3VzKS4gV2hlbiBzY2Fu
bmluZyBDb250aWd1b3VzLCB0aGUgY29sbGVjdG9yIHdpbGwKKyAgICAvLyBtYXJrIHdvcmQgYXQg
YWRkcmVzc2VzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYnV0dGVyZmx5IHBvaW50ZXIs
IHVwIHRvIHRoZSBwdWJsaWNMZW5ndGgKKyAgICAvLyBpbiB0aGUgYnV0dGVyZmx5LiBCdXQgYW4g
QXJyYXlTdG9yYWdlIGhhcyBzb21lIG5vbi1wb2ludGVyIGhlYWRlciBkYXRhIGF0IGxvdyBwb3Np
dGl2ZQorICAgIC8vIG9mZnNldHMgZnJvbSB0aGUgYnV0dGVyZmx5IC0gc28gd2hlbiB0aGlzIHJh
Y2UgaGFwcGVucywgdGhlIGNvbGxlY3RvciB3aWxsIHN1cmVseSBjcmFzaAorICAgIC8vIGJlY2F1
c2UgaXQgd2lsbCBmYWlsIHRvIGRlY29kZSB0d28gY29uc2VjdXRpdmUgaW50MzJzIGFzIGlmIGl0
IHdhcyBhIEpTVmFsdWUuCisgICAgLy8KKyAgICAvLyBGb3J0dW5hdGVseSwgd2UgaGF2ZSB0aGUg
SlNDZWxsIGxvY2sgZm9yIHRoaXMgcHVycG9zZSEKKyAgICAKKyAgICBJbnRlcm5hbExvY2tlciBs
b2NrZXIodGhpcyk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHko
KSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTE0NjgsNyArMTU1
NCw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2UKIAogICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92
ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0s
IHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCkgeyB9KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOwogCkBAIC0yMDE5LDcgKzIxMDUsNyBAQCBib29s
IEpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkoCiAKICAgICBTcGFyc2VBcnJheVZh
bHVlTWFwKiBtYXAgPSBtX2J1dHRlcmZseS5nZXQoKS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNl
TWFwLmdldCgpOwogICAgIFJFTEVBU0VfQVNTRVJUKG1hcCk7Ci0KKyAgICAKICAgICAvLyAxLiBM
ZXQgY3VycmVudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbR2V0T3duUHJvcGVydHld
XSBpbnRlcm5hbCBtZXRob2Qgb2YgTyB3aXRoIHByb3BlcnR5IG5hbWUgUC4KICAgICBTcGFyc2VB
cnJheVZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbWFwLT5hZGQodGhpcywgaW5kZXgpOwog
ICAgIFNwYXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAgPSAmcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKQEAgLTI3MjUsNyArMjgxMSw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVu
Z3RoKFZNJiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yTGVuZ3RoOyBpIDwgbmV3
VmVjdG9yTGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgc2V0QnV0
dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1
dHRlcmZseSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTI3NDIsNyAr
MjgyOSw4IEBAIGJvb2wgSlNPYmplY3Q6OmluY3JlYXNlVmVjdG9yTGVuZ3RoKFZNJiAKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAg
ICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9y
TGVuZ3RoKTsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9
IG5ld0luZGV4QmlhczsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUo
dm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRC
dXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3
NjIsNiArMjg1MCw3IEBAIGJvb2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAK
ICAgICAKICAgICB1bnNpZ25lZCBhdmFpbGFibGVPbGRMZW5ndGggPQogICAgICAgICBCdXR0ZXJm
bHk6OmF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgocHJvcGVydHlDYXBhY2l0eSwgb2xk
VmVjdG9yTGVuZ3RoKTsKKyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG51bGxwdHI7CiAg
ICAgaWYgKGF2YWlsYWJsZU9sZExlbmd0aCA+PSBsZW5ndGgpIHsKICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgY2FzZSB3aGVyZSBzb21lb25lIGVsc2Ugc2VsZWN0ZWQgYSB2ZWN0b3IgbGVuZ3RoIHRo
YXQgY2F1c2VkIGludGVybmFsCiAgICAgICAgIC8vIGZyYWdtZW50YXRpb24uIElmIHdlIGRpZCBv
dXIgam9icyByaWdodCwgdGhpcyB3b3VsZCBuZXZlciBoYXBwZW4uIEJ1dCBJIGJldCB3ZSB3aWxs
IG1lc3MKQEAgLTI3NzYsMTcgKzI4NjUsMjQgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3Ro
U2xvdyhWTSYgdm0sIAogICAgICAgICAgICAgbmV3VmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSk7CiAgICAgICAgIGlmICghYnV0dGVyZmx5KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7Cisg
ICAgICAgIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseTsKICAgICB9CiAKLSAgICBidXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotCiAgICAgaWYgKGhhc0RvdWJsZShp
bmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkVmVjdG9yTGVu
Z3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXSA9IFBOYU47CisgICAgICAgICAgICBidXR0ZXJmbHktPmluZGV4
aW5nUGF5bG9hZDxkb3VibGU+KClbaV0gPSBQTmFOOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytp
KQotICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKClbaV0uY2xlYXIoKTsKKyAgICAg
ICAgICAgIGJ1dHRlcmZseS0+aW5kZXhpbmdQYXlsb2FkPFdyaXRlQmFycmllcjxVbmtub3duPj4o
KVtpXS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChuZXdCdXR0ZXJmbHkpIHsKKyAgICAgICAg
YnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBu
ZXdCdXR0ZXJmbHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yODAyLDEyICsyODk4LDEzIEBAIHZvaWQg
SlNPYmplY3Q6OnJlYWxsb2NhdGVBbmRTaHJpbmtCdXR0ZXIKIAogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5Lmdl
dCgpLT5yZXNpemVBcnJheSh2bSwgdGhpcywgc3RydWN0dXJlKCksIDAsIEFycmF5U3RvcmFnZTo6
c2l6ZUZvcihsZW5ndGgpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRl
cmZseSk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobGVuZ3RoKTsKICAgICBu
ZXdCdXR0ZXJmbHktPnNldFB1YmxpY0xlbmd0aChsZW5ndGgpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgbV9idXR0ZXJmbHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwog
fQogCi1CdXR0ZXJmbHkqIEpTT2JqZWN0Ojpncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNp
emVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKK0J1dHRlcmZseSogSlNPYmplY3Q6OmFsbG9j
YXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5l
d1NpemUpCiB7CiAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXplKTsKIApAQCAtMzA5MiwxNSAr
MzE4OSwzNCBAQCB2b2lkIEpTT2JqZWN0Ojpjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2CiAgICAg
ICAgIHZtLCBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiB9CiAKLXZvaWQgSlNPYmpl
Y3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZNJiB2bSwgc2l6ZV90IG91dE9mTGlu
ZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcikKK3ZvaWQgSlNP
YmplY3Q6OnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXImLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcikKIHsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1
dHRlcmZseSgpOwotICAgIHNpemVfdCBwcmVDYXBhY2l0eSA9IHRoaXMtPmJ1dHRlcmZseVByZUNh
cGFjaXR5KCk7Ci0gICAgdm9pZCogY3VycmVudEJhc2UgPSBidXR0ZXJmbHktPmJhc2UocHJlQ2Fw
YWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwotICAgIHZvaWQqIG5ld0Jhc2UgPSBidXR0
ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QmVmb3JlKTsKKyAgICAv
LyBUaGlzIGNvdWxkIGludGVybGVhdmUgdmlzaXRDaGlsZHJlbiBiZWNhdXNlIHNvbWUgb2xkIHN0
cnVjdHVyZSBjb3VsZCBoYXZlIGJlZW4gYSBub24KKyAgICAvLyBkaWN0aW9uYXJ5IHN0cnVjdHVy
ZS4gV2UgaGF2ZSB0byBiZSBjcmF6eSBjYXJlZnVsLiBCdXQsIHdlIGFyZSBndWFyYW50ZWVkIHRv
IGJlIGhvbGRpbmcKKyAgICAvLyB0aGUgc3RydWN0dXJlJ3MgbG9jayByaWdodCBub3csIGFuZCB0
aGF0IGhlbHBzIGEgYml0LgorICAgIAorICAgIEJ1dHRlcmZseSogb2xkQnV0dGVyZmx5ID0gdGhp
cy0+YnV0dGVyZmx5KCk7CisgICAgc2l6ZV90IHByZUNhcGFjaXR5OworICAgIHNpemVfdCBpbmRl
eGluZ1BheWxvYWRTaXplSW5CeXRlczsKKyAgICBib29sIGhhc0luZGV4aW5nSGVhZGVyID0gdGhp
cy0+aGFzSW5kZXhpbmdIZWFkZXIoKTsKKyAgICBpZiAoVU5MSUtFTFkoaGFzSW5kZXhpbmdIZWFk
ZXIpKSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gb2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRl
cigpLT5wcmVDYXBhY2l0eShzdHJ1Y3R1cmUpOworICAgICAgICBpbmRleGluZ1BheWxvYWRTaXpl
SW5CeXRlcyA9IG9sZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+aW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMoc3RydWN0dXJlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVDYXBhY2l0
eSA9IDA7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0gMDsKKyAgICB9CisK
KyAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IEJ1dHRlcmZseTo6Y3JlYXRlVW5pbml0aWFs
aXplZCh2bSwgdGhpcywgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0lu
ZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CiAKLSAgICBtZW1tb3Zl
KG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCB0aGlzLT5idXR0ZXJmbHlUb3RhbFNpemUoKSk7Ci0gICAg
c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBCdXR0ZXJmbHk6OmZyb21C
YXNlKG5ld0Jhc2UsIHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKSk7CisgICAg
Ly8gTm8gbmVlZCB0byBjb3B5IHRoZSBwcmVjYXBhY2l0eS4KKyAgICB2b2lkKiBjdXJyZW50QmFz
ZSA9IG9sZEJ1dHRlcmZseS0+YmFzZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2
b2lkKiBuZXdCYXNlID0gbmV3QnV0dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0
ZXIpOworCisgICAgbWVtY3B5KG5ld0Jhc2UsIGN1cnJlbnRCYXNlLCBCdXR0ZXJmbHk6OnRvdGFs
U2l6ZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpKTsKKyAgICAKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKIH0KIAogdWludDMyX3QgSlNP
YmplY3Q6OmdldEVudW1lcmFibGVMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2Jq
ZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NDcsMTEgKzc0NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
dGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5zdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCgpOyB9CiAgICAgdm9pZCByZWlmeUFsbFN0YXRpY1Byb3BlcnRpZXMoRXhl
Y1N0YXRlKik7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkqIGdyb3dPdXRPZkxp
bmVTdG9yYWdlKFZNJiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lk
IHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZShWTSYsIEJ1dHRlcmZseSopOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3Rv
cmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CiAgICAgICAgIAorICAg
IHZvaWQgc2V0QnV0dGVyZmx5KFZNJiwgQnV0dGVyZmx5Kik7IC8vIEFsd2F5cyBjaGFuZ2UgdGhl
IGJ1dHRlcmZseSBiZWZvcmUgY2hhbmdpbmcgdGhlIHN0cnVjdHVyZSEKICAgICB2b2lkIHNldFN0
cnVjdHVyZShWTSYsIFN0cnVjdHVyZSopOwotICAgIHZvaWQgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KFZNJiwgU3RydWN0dXJlKiwgQnV0dGVyZmx5Kik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mKTsKIApAQCAtNzU5LDcgKzc1OCw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHN0cnVjdHVyZSh2bSktPmZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKHZtLCB0aGlzKTsKICAgICB9Ci0gICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxh
dHRlbmluZyhWTSYsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9m
TGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5p
bmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKIAogICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdAogICAgIHsKQEAgLTk5MCw5ICs5ODksOSBAQCBwcml2
YXRlOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSBib29sIHB1dElubGluZVNs
b3coRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIGJvb2wgZ2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBib29sIGdldE93bk5vbkluZGV4UHJvcGVydHlTbG90
KFZNJiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29s
IGdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQ
cm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFByb3BlcnR5T2Zm
c2V0KTsKLSAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFN0cnVjdHVyZSYpOworICAgIHZvaWQgZmlsbEN1c3RvbUdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0
dXJlKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blN0YXRpY1Byb3BlcnR5
U2xvdChWTSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0
eU5hbWUpIGNvbnN0OwpAQCAtMTExMyw2ICsxMTEyLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNp
dCBKU0ZpbmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEJ1dHRlcmZseSog
YnV0dGVyZmx5ID0gbnVsbHB0cikKICAgICAgICAgOiBKU09iamVjdCh2bSwgc3RydWN0dXJlLCBi
dXR0ZXJmbHkpCiAgICAgeworICAgICAgICBtZW1zZXQoaW5saW5lU3RvcmFnZSgpLCAwLCBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICB9
CiB9OwogCkBAIC0xMjA1LDE0ICsxMjA1LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OmlzV2l0
aFNjb3BlKCkgY29ucwogICAgIHJldHVybiB0eXBlKCkgPT0gV2l0aFNjb3BlVHlwZTsKIH0KIAot
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkKLXsKLSAgICBBU1NFUlQo
c3RydWN0dXJlKTsKLSAgICBBU1NFUlQoIWJ1dHRlcmZseSA9PSAoIXN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSAmJiAhc3RydWN0dXJlLT5oYXNJbmRleGluZ0hlYWRlcih0aGlzKSkpOwot
ICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKLSAgICBzZXRTdHJ1Y3R1
cmUodm0sIHN0cnVjdHVyZSk7Ci19Ci0KIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJl
KTsKQEAgLTEyMjAsNyArMTIxMiw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmUoVk0mIHYKICAgICBKU0NlbGw6OnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKIH0KIAot
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVy
ZShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnNl
dEJ1dHRlcmZseShWTSYgdm0sIEJ1dHRlcmZseSogYnV0dGVyZmx5KQogewogICAgIG1fYnV0dGVy
Zmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKIH0KQEAgLTEyNzMsMTYgKzEyNjUsMTYgQEAg
aW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldFByb3RvdHlwZShWTQogCiAvLyBJdCBpcyBzYWZl
IHRvIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIFByb3BlcnR5TmFtZSB0aGF0IGlzIGFjdHVhbGx5
IGFuIGluZGV4LAogLy8gYnV0IGlmIHNvIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSAoZG9lc24n
dCBzZWFyY2ggaW5kZXggc3RvcmFnZSkuCi1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omdl
dE93bk5vbkluZGV4UHJvcGVydHlTbG90KFZNJiB2bSwgU3RydWN0dXJlJiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK0FMV0FZU19JTkxJ
TkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiBzbG90KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAg
ICBpZiAoIVR5cGVJbmZvOjpoYXNTdGF0aWNQcm9wZXJ0eVRhYmxlKGlubGluZVR5cGVGbGFncygp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGdldE93blN0YXRp
Y1Byb3BlcnR5U2xvdCh2bSwgcHJvcGVydHlOYW1lLCBzbG90KTsKICAgICB9Ci0KKyAgICAKICAg
ICAvLyBnZXRQcm9wZXJ0eVNsb3QgcmVsaWVzIG9uIHRoaXMgbWV0aG9kIG5ldmVyIHJldHVybmlu
ZyBpbmRleCBwcm9wZXJ0aWVzIQogICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KTsKIApAQCAtMTMwNyw5ICsxMjk5LDkgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojpn
ZXRPd25Ob25JbgogICAgIHJldHVybiB0cnVlOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNP
YmplY3Q6OmZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBK
U1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJl
JiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HZXR0
ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiBzbG90LCBKU1ZhbHVlIGN1c3RvbUdldHRlclNl
dHRlciwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAg
aWYgKHN0cnVjdHVyZS5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgaWYgKHN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewogICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzLCBhdHRyaWJ1dGVzLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oY3VzdG9tR2V0
dGVyU2V0dGVyKS0+Z2V0dGVyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTMyNSw3
ICsxMzE3LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsQ3VzdG9tRwogQUxX
QVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUm
IHN0cnVjdHVyZSA9ICpvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9u
SW5kZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBh
cnNlSW5kZXgocHJvcGVydHlOYW1lKSkKQEAgLTEzNTMsMTAgKzEzNDUsMTAgQEAgQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgICAgICAgICAgcmV0dXJuIG9iamVj
dC0+Z2V0Tm9uSW5kZXhQcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlQob2JqZWN0LT50eXBlKCkgIT0gUHJveHlPYmplY3RUeXBl
KTsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQo
b2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAo
b2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVl
IHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGlmICgh
cHJvdG90eXBlLmlzT2JqZWN0KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgb2JqZWN0
ID0gYXNPYmplY3QocHJvdG90eXBlKTsKQEAgLTEzODUsMTMyICsxMzc3LDYgQEAgaW5saW5lIEpT
VmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogfQogCi10ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKLXsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0dl
dHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIEFTU0VSVCgh
SGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlz
KSk7Ci0gICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwotCi0gICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJl
ZFR5cGVzKCkpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwotICAgICAgICAgICAgc2xv
dC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0KLSAgICAgICAgICAgIGlmICgo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikg
fHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KSk7Ci0gICAgICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6
OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1
cmVFeHRlbnNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IGJ1dHRlcmZseSgpOwotICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdpbGxHcm93
T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkp
OwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVyZmx5KTsK
LQotICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQodGhpcy0+
c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgICAgIHB1dERpcmVjdCh2
bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zm
c2V0KTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgICAgIHRo
aXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAg
c2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKAotICAgICAgICBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKLSAgICBpZiAobmV3U3RydWN0dXJlKSB7
Ci0gICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRp
b24oCi0gICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkg
PT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgCi0gICAgICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0
ZXJmbHkoKTsKLSAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBuZXdTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUgIT0g
dGhpcy0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9m
TGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7
Ci0gICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0g
ICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIGJvb2wgaGFzSW5m
ZXJyZWRUeXBlOwotICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGN1cnJlbnRBdHRyaWJ1dGVzLCBoYXNJbmZlcnJlZFR5cGUpOwotICAgIGlmIChvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCkgewotICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoaGFzSW5mZXJyZWRUeXBlKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT53
aWxsU3RvcmVWYWx1ZUZvclJlcGxhY2UoCi0gICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLQotICAgICAgICBpZiAo
KGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
IHx8IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAm
IEN1c3RvbUFjY2Vzc29yKSkgewotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFJl
YWRPbmx5KSk7Ci0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
KG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlv
biB3YXRjaHBvaW50IHRvIGZpcmUgYWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCi0gICAg
Ly8gc3RydWN0dXJlLiBUaGlzIGFsbG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZl
IGlmIHRoZSBuZXcgc3RydWN0dXJlIGlzIHRoZSBvbmUKLSAgICAvLyB3ZSB3YW50LgotICAgIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2lu
dEZpcmU7Ci0gICAgCi0gICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0
eVRyYW5zaXRpb24oCi0gICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOwot
ICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKAotICAgICAg
ICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlT
bG90OjpQdXRCeUlkKTsKLSAgICAKLSAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgIEFT
U0VSVChuZXdTdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Ci0gICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwotICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBuZXdTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5ld0NhcGFj
aXR5KTsKLSAgICBpZiAob2xkQ2FwYWNpdHkgPT0gbmV3Q2FwYWNpdHkpCi0gICAgICAgIHNldFN0
cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQnV0dGVyZmx5
KiBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkQ2FwYWNpdHksIG5l
d0NhcGFjaXR5KTsKLSAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0gICAgfQotICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2
YWx1ZSk7Ci0gICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgIGlmIChh
dHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NF
UlQodmFsdWUpOwpAQCAtMTU0OSwyNCArMTQxNSw2IEBAIGlubGluZSBib29sIEpTT2JqZWN0Ojpw
dXREaXJlY3QoVk0mIHZtLCAKICAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURl
ZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCk7CiB9CiAK
LWlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIEFTU0VSVCghdmFs
dWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwotICAgIEFT
U0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKLSAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQotICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0
T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVj
dHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUoKTsKLSAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
LSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwotICAg
IGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKLSAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZh
bHVlRm9yTmV3VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1p
emUpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwotICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci19Ci0KIEFMV0FZU19J
TkxJTkUgSlNPYmplY3QqIFJlZ2lzdGVyOjpvYmplY3QoKSBjb25zdAogewogICAgIHJldHVybiBh
c09iamVjdChqc1ZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsMTMgKzEwNywxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5
CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6OkdldFByb3Rv
dHlwZUZ1bmN0aW9uUHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0UHJvdG90
eXBlOwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0g
KnN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7Ci0gICAgICAgIGlm
IChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdEJ5
SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQo
KSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRP
d25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7CiAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlOwotICAgICAgICBpZiAoTElL
RUxZKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRl
ZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKLSAgICAgICAgICAgIHByb3Rv
dHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKExJS0VMWShz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVs
dEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQorICAgICAgICAgICAgcHJvdG90eXBl
ID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3RvdHlwZSh2bSwgZXhlYyk7CiAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CkBAIC0xMzUsMTggKzEzNSwx
OCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgSlNPYmpl
Y3QqIG9iamVjdCA9IHRoaXM7CiAgICAgTWV0aG9kVGFibGU6OkdldFByb3RvdHlwZUZ1bmN0aW9u
UHRyIGRlZmF1bHRHZXRQcm90b3R5cGUgPSBKU09iamVjdDo6Z2V0UHJvdG90eXBlOwogICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJlID0gKnN0cnVjdHVyZUlE
VGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKICAg
ICAgICAgaWYgKExJS0VMWSghVHlwZUluZm86Om92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdChv
YmplY3QtPmlubGluZVR5cGVGbGFncygpKSkpIHsKICAgICAgICAgICAgIGlmIChvYmplY3QtPmdl
dE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRPd25Qcm9w
ZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQorICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xv
dChvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7
CiAgICAgICAgIH0KICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChMSUtF
TFkoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVm
YXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5
U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAgcHJvdG90
eXBlID0gc3RydWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElLRUxZKHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0
R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90
OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90b3R5cGUg
PSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIHByb3RvdHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTE1Nyw2ICsxNTcsMzAg
QEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXROb25JbmRleAogICAgIH0KIH0KIAor
aW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKK3sKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgQVNTRVJUKCF2YWx1
ZS5pc0dldHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CisgICAgQVNT
RVJUKCF2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRl
cmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKHZtKTsKKyAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
CisgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNhcGFj
aXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBi
dXR0ZXJmbHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQ
cm9wZXJ0aWVzKCk7CisgICAgICAgICAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Cisg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbih2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkT3B0aW1pemUpOworICAgICAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgfSk7Cit9CisKIC8vIEVDTUEgOC42LjIu
MgogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXRJbmxpbmUoSlNDZWxsKiBjZWxsLCBF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKQEAgLTIwNyw0ICsyMzEsMTM5IEBAIEFMV0FZU19J
TkxJTkUgYm9vbCBKU09iamVjdDo6aGFzT3duUHJvcGUKICAgICByZXR1cm4gY29uc3RfY2FzdDxK
U09iamVjdCo+KHRoaXMpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+Z2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyksIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgc2xvdCk7CiB9CiAKK3RlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+CitBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0
UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJUKHZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CisgICAg
QVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpo
ZWFwKHRoaXMpKTsKKyAgICBBU1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CisKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgaWYgKHN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhh
c0luZmVycmVkVHlwZXMoKSk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0
KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAg
ICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKworICAgICAgICAg
ICAgaWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFj
Y2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJp
YnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIShhdHRy
aWJ1dGVzICYgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFp
c1N0cnVjdHVyZUV4dGVuc2libGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICB1bnNpZ25lZCBvbGRPdXRPZkxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKAorICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywK
KyAgICAgICAgICAgIFsmXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkgeworICAgICAgICAgICAgICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gdGhpcy0+YnV0dGVyZmx5KCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSAhPSBvbGRPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgICAgICAgICAg
ICAgICAgICBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRP
dXRPZkxpbmVDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBidXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOworICAgICAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNs
b3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKKyAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1Jl
YWRPbmx5UHJvcGVydGllcygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQ7CisgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMt
PnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKAorICAgICAgICBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0
KTsKKyAgICBpZiAobmV3U3RydWN0dXJlKSB7CisgICAgICAgIG5ld1N0cnVjdHVyZS0+d2lsbFN0
b3JlVmFsdWVGb3JFeGlzdGluZ1RyYW5zaXRpb24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
KyAgICAgICAgCisgICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgQnV0
dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRD
YXBhY2l0eSAhPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUgIT0gdGhpcy0+c3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgY3VycmVu
dENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
ICAgIH0KKworICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOworICAgICAgICBBU1NFUlQo
bmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVy
ZSk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Cisg
ICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7CisgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgIGlmICgobW9kZSA9PSBQdXRN
b2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNl
dCk7CisgICAgICAgIGlmIChVTkxJS0VMWShoYXNJbmZlcnJlZFR5cGUpKSB7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yUmVwbGFjZSgKKyAgICAgICAgICAgICAgICB2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90
OjpQdXRCeUlkKTsKKyAgICAgICAgfQorCisgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0
eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwor
CisgICAgICAgIGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJl
bnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7CisgICAgICAgICAgICBBU1NFUlQoIShh
dHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsKKyAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcykpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNp
YmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVj
dHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMg
c3dpdGNoZWQKKyAgICAvLyBzdHJ1Y3R1cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9p
bnRzIHRvIG9ic2VydmUgaWYgdGhlIG5ldyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQorICAgIC8vIHdl
IHdhbnQuCisgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVm
ZXJyZWRXYXRjaHBvaW50RmlyZTsKKyAgICAKKyAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRj
aHBvaW50RmlyZSk7CisgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5z
aXRpb24oCisgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9
PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgIAorICAgIHZhbGlkYXRlT2Zmc2V0KG9m
ZnNldCk7CisgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
KyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgc2l6ZV90IG9sZENhcGFjaXR5ID0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICBBU1NFUlQob2xkQ2FwYWNp
dHkgPD0gbmV3Q2FwYWNpdHkpOworICAgIGlmIChvbGRDYXBhY2l0eSAhPSBuZXdDYXBhY2l0eSkg
eworICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGlu
ZVN0b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsK
KyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB9CisgICAgcHV0RGlyZWN0KHZt
LCBvZmZzZXQsIHZhbHVlKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Cisg
ICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgIGlmIChhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCisgICAgICAgIG5ld1N0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVBy
b3BlcnRpZXMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NCw2ICsxODQsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmlu
ZzsKICAgICB2KGJvb2wsIHZlcmJvc2VTYW5pdGl6ZVN0YWNrLCBmYWxzZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VHZW5lcmF0aW9uYWxHQywgdHJ1ZSwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VDb25jdXJyZW50QmFycmllcnMsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNlQ29uY3VycmVudEdDLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihib29sLCBjb2xsZWN0Q29udGludW91c2x5LCBmYWxzZSwgTm9ybWFs
LCBudWxscHRyKSBcCiAgICAgdihib29sLCBmb3JjZUZlbmNlZEJhcnJpZXIsIGZhbHNlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHNjcmliYmxlRnJlZUNlbGxzLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihkb3VibGUsIHNpemVDbGFzc1Byb2dyZXNzaW9uLCAxLjQs
IE5vcm1hbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3BhcnNlQXJyYXlWYWx1ZU1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHN0cnVjdCBTcGFyc2VBcnJheUVudHJ5IDogcHVibGlj
IFdyaXRlQmEKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogfTsKIAorLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gaGF2ZSBhIGxvY2sgaW4gaXQuCiBjbGFzcyBTcGFyc2VBcnJheVZhbHVlTWFwIGZp
bmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTIgKzQ1LDYgQEAKIAogI2RlZmluZSBEVU1QX1NU
UlVDVFVSRV9JRF9TVEFUSVNUSUNTIDAKIAotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgRE9fUFJP
UEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLIDAKLSNlbHNlCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQ
X0NPTlNURU5DWV9DSEVDSyAwCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiAKQEAgLTE2Myw5ICsxNTcsOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVt
cFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpKSB7CisgICAgICAgIGlmIChQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZU9yTnVsbCgpKSB7CiAgICAg
ICAgICAgICArK251bWJlcldpdGhQcm9wZXJ0eU1hcHM7Ci0gICAgICAgICAgICB0b3RhbFByb3Bl
cnR5TWFwc1NpemUgKz0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPnNpemVJbk1lbW9yeSgp
OworICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHRhYmxlLT5zaXplSW5NZW1v
cnkoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzA2LDcgKzMwMCw3IEBAIHZvaWQgU3RydWN0
dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck0KICAgICBmb3IgKHN0cnVjdHVyZSA9IHRoaXM7
IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpIHsKICAgICAg
ICAgc3RydWN0dXJlLT5tX2xvY2subG9jaygpOwogICAgICAgICAKLSAgICAgICAgdGFibGUgPSBz
dHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS5nZXQoKTsKKyAgICAgICAgdGFibGUgPSBzdHJ1Y3R1
cmUtPnByb3BlcnR5VGFibGVPck51bGwoKTsKICAgICAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAg
ICAgICAvLyBMZWF2ZSB0aGUgc3RydWN0dXJlIGxvY2tlZCwgc28gdGhhdCB0aGUgY2FsbGVyIGNh
biBkbyB0aGluZ3MgdG8gaXQgYXRvbWljYWxseQogICAgICAgICAgICAgLy8gYmVmb3JlIGl0IGxv
c2VzIGl0cyBwcm9wZXJ0eSB0YWJsZS4KQEAgLTMyMSwzMCArMzE1LDMxIEBAIHZvaWQgU3RydWN0
dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck0KICAgICBBU1NFUlQoIXRhYmxlKTsKIH0KIAot
dm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0mIHZtKQorUHJvcGVydHlU
YWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNl
dFByb3BlcnR5VGFibGUpCiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOwotICAgIEFTU0VSVCghcHJvcGVydHlUYWJsZSgpKTsKLQorICAgIAorICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4g
c3RydWN0dXJlczsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZTsKICAgICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlv
bihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAKKyAgICB1bnNpZ25lZCBjYXBh
Y2l0eSA9IG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFj
aXR5KTsKICAgICBpZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwg
bnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsK
KyAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgY2FwYWNpdHkpOwogICAgICAgICBzdHJ1
Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRhYmxl
ID0gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBjYXBhY2l0eSk7CiAgICAgCiAgICAgLy8gTXVz
dCBob2xkIHRoZSBsb2NrIG9uIHRoaXMgc3RydWN0dXJlLCBzaW5jZSB3ZSB3aWxsIGJlIG1vZGlm
eWluZyB0aGlzIHN0cnVjdHVyZSdzCiAgICAgLy8gcHJvcGVydHkgbWFwLiBXZSBkb24ndCB3YW50
IGdldENvbmN1cnJlbnRseSgpIHRvIHNlZSB0aGUgcHJvcGVydHkgbWFwIGluIGEgaGFsZi1iYWtl
ZAogICAgIC8vIHN0YXRlLgogICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jaywgdm0uaGVhcCk7Ci0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlN
YXAobG9ja2VyLCB2bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5s
aW5lQ2FwYWNpdHkpKTsKLSAgICBlbHNlCi0gICAgICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0s
IHRoaXMsIHRhYmxlKTsKKyAgICBpZiAoc2V0UHJvcGVydHlUYWJsZSkKKyAgICAgICAgdGhpcy0+
c2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOwogCiAgICAgSW5mZXJyZWRUeXBlVGFibGUqIHR5
cGVUYWJsZSA9IG1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCk7CiAKQEAgLTM1NSwxMCArMzUwLDEy
IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgUHJv
cGVydHlNYXBFbnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0
cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAg
ICAgICAgIGlmICh0eXBlVGFibGUgJiYgdHlwZVRhYmxlLT5nZXQoc3RydWN0dXJlLT5tX25hbWVJ
blByZXZpb3VzLmdldCgpKSkKICAgICAgICAgICAgIGVudHJ5Lmhhc0luZmVycmVkVHlwZSA9IHRy
dWU7Ci0gICAgICAgIHByb3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVy
dHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgdGFibGUtPmFk
ZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENo
YW5nZSk7CiAgICAgfQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICAK
KyAgICByZXR1cm4gdGFibGU7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCkKQEAgLTQ3Myw3ICs0NzAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRk
TmV3UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5z
ZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVD
aGFpbi5nZXQoKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5
TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRy
aWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5tX2luZmVycmVkVHlwZVRhYmxl
LnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2luZmVycmVkVHlwZVRh
YmxlLmdldCgpKTsKIApAQCAtNTIxLDM2ICs1MTgsMzAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbgogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90
eXBlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIHByb3Rv
dHlwZSkKIHsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgdHJhbnNpdGlvbi0+bV9w
cm90b3R5cGUuc2V0KHZtLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwotCi0gICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOworICAgIAorICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0
cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KKyAgICAKICAgICB0
cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRp
b247CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgICAg
ICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgICAg
IAorICAgICAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIAogICAg
ICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9uOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPnByb3BlcnR5VGFibGUoKSk7Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0p
LT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBBU1NFUlQoZW50cnkpOwogICAgIGVudHJ5
LT5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIApAQCAtNTYxLDE3ICs1NTIsMTUgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGlj
dGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZp
cmUqIGRlZmVycmVkKQogewogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKTsKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKIAot
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJv
cGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5waW4odm0sIHN0cnVjdHVyZS0+
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlL
aW5kKGtpbmQpOwotICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgIHRyYW5zaXRpb24tPnNldEhh
c0JlZW5EaWN0aW9uYXJ5KHRydWUpOwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQpAQCAtNjAzLDMxICs1
OTIsMjkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiBQcm9w
ZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZN
JiB2bSkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0gICAgCi0gICAg
aWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJs
ZSgpLT5jb3B5KHZtLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpOwotICAgIAotICAgIC8v
IEhvbGQgdGhlIGxvY2sgd2hpbGUgc3RlYWxpbmcgdGhlIHRhYmxlIC0gc28gdGhhdCBnZXRDb25j
dXJyZW50bHkoKSBvbiBhbm90aGVyIHRocmVhZAotICAgIC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8g
YnlwYXNzIHRoaXMgc3RydWN0dXJlLCBvciB3aWxsIGdldCB0byB1c2UgdGhlIHByb3BlcnR5IHRh
YmxlCi0gICAgLy8gYmVmb3JlIGl0IGlzIHN0b2xlbi4KLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIFByb3BlcnR5VGFibGUqIHRha2VuUHJvcGVydHlUYWJsZSA9
IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICBwcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsKLSAg
ICByZXR1cm4gdGFrZW5Qcm9wZXJ0eVRhYmxlOworICAgIC8vIFRoaXMgbXVzdCBhbHdheXMgcmV0
dXJuIGEgcHJvcGVydHkgdGFibGUuIEl0IGNhbid0IHJldHVybiBudWxsLgorICAgIFByb3BlcnR5
VGFibGUqIHJlc3VsdCA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKyAgICBpZiAocmVzdWx0KSB7
CisgICAgICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQtPmNvcHkodm0sIHJlc3VsdC0+c2l6ZSgpICsgMSk7CisgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0s
IG51bGxwdHIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBib29sIHNldFBy
b3BlcnR5VGFibGUgPSBmYWxzZTsKKyAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxl
KHZtLCBzZXRQcm9wZXJ0eVRhYmxlKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gdHJhbnNpdGlvbktpbmQpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlcyA9
IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOworICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CiAgICAgCiAgICAgaWYgKGNoYW5n
ZXNJbmRleGluZ1R5cGUodHJhbnNpdGlvbktpbmQpKSB7CiAgICAgICAgIGlmIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5tX2dsb2JhbE9iamVjdC5nZXQoKSkgewog
ICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0
cnVjdHVyZSkpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3VsdCA9IGdsb2JhbE9i
amVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUp
OwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnkoKSA9PSBpbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHJlc3Vs
dCA9IGdsb2JhbE9iamVjdC0+b3JpZ2luYWxBcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZShp
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSkgewogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFRyYW5zaXRpb25G
cm9tVGhpc1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgICAgIH0KQEAgLTYzOCw3ICs2MjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb247
CiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRp
b24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzKSkpIHsK
ICAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+YXR0cmlidXRlc0luUHJldmlvdXMo
KSA9PSBhdHRyaWJ1dGVzKTsKLSAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5k
ZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5nVHlwZSk7CisgICAgICAgIEFT
U0VSVChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9
PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5n
VHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC02NDYsNyArNjMzLDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1
dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5k
ZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7CisgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7CiAg
ICAgCiAgICAgaWYgKHByZXZlbnRzRXh0ZW5zaW9ucyh0cmFuc2l0aW9uS2luZCkpCiAgICAgICAg
IHRyYW5zaXRpb24tPnNldERpZFByZXZlbnRFeHRlbnNpb25zKHRydWUpOwpAQCAtNjU3LDMyICs2
NDQsMjkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgICAg
ICAvLyB0YWJsZSwgc2luY2Ugb3VyIGxvZ2ljIGZvciB3YWxraW5nIHRoZSBwcm9wZXJ0eSB0cmFu
c2l0aW9uIGNoYWluIHRvIHJlbWF0ZXJpYWxpemUgdGhlCiAgICAgICAgIC8vIHRhYmxlIGRvZXNu
J3Qga25vdyBob3cgdG8gdGFrZSBpbnRvIGFjY291bnQgc3VjaCB3aG9sZXNhbGUgZWRpdHMuCiAg
ICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KHZtKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcodm0sIHN0cnVjdHVyZS0+
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1f
b2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9y
Q2FjaGluZygpOwogICAgICAgICAKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlKCkuZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVP
bkFsbFByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpKQotICAgICAgICAgICAgICAgICAgICBlbnRy
eS5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7Ci0gICAgICAgICAgICAgICAgaWYgKHNldHNSZWFk
T25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSAmJiAhKGVudHJ5LmF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0
ZXMgfD0gUmVhZE9ubHk7Ci0gICAgICAgICAgICB9CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCh0YWJsZSk7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKKyAg
ICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyh0cmFuc2l0aW9uS2lu
ZCkpCisgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOworICAg
ICAgICAgICAgaWYgKHNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRp
b25LaW5kKSAmJiAhKGVudHJ5LmF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpCisgICAgICAgICAgICAg
ICAgZW50cnkuYXR0cmlidXRlcyB8PSBSZWFkT25seTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNl
dCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24t
Pm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKHNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5k
KQotICAgICAgICAmJiB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkKLSAgICAgICAgJiYgIXRy
YW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS0+aXNFbXB0eSgpKQorICAgICAgICAmJiAhdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZU9yTnVsbCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHRyYW5zaXRp
b24tPnNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8o
dHJ1ZSk7CiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
IHRyYW5zaXRpb24tPnBpbigpOworICAgICAgICB0cmFuc2l0aW9uLT5waW4odm0sIHRyYW5zaXRp
b24tPmVuc3VyZVByb3BlcnR5VGFibGUodm0pKTsKICAgICBlbHNlIHsKICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOwogICAgICAgICBzdHJ1Y3R1
cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CkBAIC02OTgsMTMgKzY4
MiwxMiBAQCBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoVk0mIHZtKQogICAgIGlmIChpc1N0cnVj
dHVyZUV4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2
bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJs
ZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0
YWJsZSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgIAorICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5l
bmQoKTsKKyAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBpZiAoKGl0ZXItPmF0dHJpYnV0
ZXMgJiBEb250RGVsZXRlKSAhPSBEb250RGVsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTcxNywxMyArNzAwLDEyIEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihW
TSYgdm0pCiAgICAgaWYgKGlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFi
bGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5v
dEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0g
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIGlmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIChSZWFkT25seSB8
IEFjY2Vzc29yKSkpCkBAIC03MzYsMjEgKzcxOCwyNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
ZmxhdHRlbkRpY3Rpb25hcnlTCiB7CiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAg
IEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7CisgICAgCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKIAogICAgIHNpemVfdCBiZWZvcmVPdXRPZkxp
bmVDYXBhY2l0eSA9IHRoaXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgaWYgKGlzVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7Cisg
ICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAg
ICAgICBBU1NFUlQodGFibGUpOwogCi0gICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gcHJv
cGVydHlUYWJsZSgpLT5zaXplKCk7CisgICAgICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gdGFi
bGUtPnNpemUoKTsKIAogICAgICAgICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3RlZCBieSBp
bnNlcnRpb24gb3JkZXIuCiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJvcGVydHlD
b3VudCk7CiAKICAgICAgICAgLy8gQ29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhlaXIgaGFz
aGVkIGxvY2F0aW9ucywgY29tcGFjdGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFzIHdlIGdv
LgogICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOwogICAgICAgICBtX29mZnNldCA9IGludmFsaWRP
ZmZzZXQ7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3Bl
cnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CisgICAgICAg
IGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyLCArK2kpIHsKICAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9iamVjdC0+
Z2V0RGlyZWN0KGl0ZXItPm9mZnNldCk7CiAgICAgICAgICAgICBtX29mZnNldCA9IGl0ZXItPm9m
ZnNldCA9IG9mZnNldEZvclByb3BlcnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpOwogICAg
ICAgICB9CkBAIC03NTksNyArNzQ0LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5E
aWN0aW9uYXJ5UwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVydHlDb3Vu
dDsgaSsrKQogICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3Qodm0sIG9mZnNldEZvclByb3Bl
cnR5TnVtYmVyKGksIG1faW5saW5lQ2FwYWNpdHkpLCB2YWx1ZXNbaV0pOwogCi0gICAgICAgIHBy
b3BlcnR5VGFibGUoKS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOworICAgICAgICB0YWJsZS0+Y2xl
YXJEZWxldGVkT2Zmc2V0cygpOwogICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAg
ICAgfQogCkBAIC03NjgsNTUgKzc1MywzNCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRl
bkRpY3Rpb25hcnlTCiAKICAgICBzaXplX3QgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSA9IHRoaXMt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CiAKLSAgICBpZiAoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkg
IT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkgeworICAgIGlmIChvYmplY3QtPmJ1dHRlcmZseSgp
ICYmIGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsK
ICAgICAgICAgQVNTRVJUKGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ID4gYWZ0ZXJPdXRPZkxpbmVD
YXBhY2l0eSk7CiAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgaGFkIGEgQnV0dGVyZmx5IGJ1dCBh
ZnRlciBmbGF0dGVuaW5nL2NvbXBhY3Rpbmcgd2Ugbm8gbG9uZ2VyIGhhdmUgbmVlZCBvZiBpdCwK
ICAgICAgICAgLy8gd2UgbmVlZCB0byB6ZXJvIGl0IG91dCBiZWNhdXNlIHRoZSBjb2xsZWN0b3Ig
ZGVwZW5kcyBvbiB0aGUgU3RydWN0dXJlIHRvIGtub3cgdGhlIHNpemUgZm9yIGNvcHlpbmcuCi0g
ICAgICAgIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpICYmICFhZnRlck91dE9mTGluZUNhcGFjaXR5
ICYmICF0aGlzLT5oYXNJbmRleGluZ0hlYWRlcihvYmplY3QpKQotICAgICAgICAgICAgb2JqZWN0
LT5zZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMsIDApOworICAgICAgICBpZiAoIWFm
dGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkp
CisgICAgICAgICAgICBvYmplY3QtPnNldEJ1dHRlcmZseSh2bSwgbnVsbHB0cik7CiAgICAgICAg
IC8vIElmIHRoZSBvYmplY3Qgd2FzIGRvd24tc2l6ZWQgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBi
YXNlIG9mIHRoZSBCdXR0ZXJmbHkgaXMgbm8gbG9uZ2VyIHdpdGhpbiB0aGUgCiAgICAgICAgIC8v
IGZpcnN0IENvcGllZEJsb2NrOjpibG9ja1NpemUgYnl0ZXMsIHdlJ2xsIGdldCB0aGUgd3Jvbmcg
YW5zd2VyIGlmIHdlIHRyeSB0byBtYXNrIHRoZSBiYXNlIGJhY2sgdG8gCiAgICAgICAgIC8vIHRo
ZSBDb3BpZWRCbG9jayBoZWFkZXIuIFRvIHByZXZlbnQgdGhpcyBjYXNlIHdlIG5lZWQgdG8gbWVt
bW92ZSB0aGUgQnV0dGVyZmx5IGRvd24uCi0gICAgICAgIGVsc2UgaWYgKG9iamVjdC0+YnV0dGVy
Zmx5KCkpCi0gICAgICAgICAgICBvYmplY3QtPnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5n
KHZtLCBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSwgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0
ZW5pbmcobG9ja2VyLCB2bSwgdGhpcywgYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSk7CiAgICAgfQot
Ci0gICAgcmV0dXJuIHRoaXM7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVy
R0MpOwogICAgIAotICAgIHBpbigpOwotCi0gICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKLX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
LXsKLSAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7Ci0KLSAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7Ci0KLSAgICBwaW4oKTsKLSAgICByZXR1cm4gcmVtb3Zl
KHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpw
aW4oKQordm9pZCBTdHJ1Y3R1cmU6OnBpbihWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQog
ewotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlU
YWJsZSh0cnVlKTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgY2xlYXJQ
cmV2aW91c0lEKCk7CiAgICAgbV9uYW1lSW5QcmV2aW91cyA9IG51bGxwdHI7CiB9CiAKLXZvaWQg
U3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5nKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW5Gb3JDYWNoaW5n
KFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFi
bGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUpOworICAgIHNldFByb3Bl
cnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0K
IApAQCAtODkxLDE3ICs4NTUsMTMgQEAgdm9pZCBTdHJ1Y3R1cmU6OndpbGxTdG9yZVZhbHVlU2xv
dygKICAgICB9CiAKICAgICAvLyBUaGlzIG9ubHkgd29ya3MgaWYgd2UndmUgZ290IGEgcHJvcGVy
dHkgdGFibGUuCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAgICBtYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwotCisgICAgUHJv
cGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOworICAg
IAogICAgIC8vIFdlIG11c3QgYmUgY2FsbGluZyB0aGlzIGFmdGVyIGhhdmluZyBjcmVhdGVkIHRo
ZSBnaXZlbiBwcm9wZXJ0eSBvciBjb25maXJtZWQgdGhhdCBpdCB3YXMgcHJlc2VudAotICAgIC8v
IGFscmVhZHksIHNvIHdlIG11c3QgaGF2ZSBhIHByb3BlcnR5IHRhYmxlIG5vdy4KLSAgICBBU1NF
UlQocHJvcGVydHlUYWJsZSk7Ci0KLSAgICAvLyAuLi4gYW5kIHRoZSBwcm9wZXJ0eSBtdXN0IGJl
IHByZXNlbnQuCisgICAgLy8gYWxyZWFkeSwgc28gdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2Vu
dC4KICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUtPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7Ci0KKyAgICAKICAgICBpZiAoc2hv
dWxkT3B0aW1pemUpCiAgICAgICAgIGVudHJ5LT5oYXNJbmZlcnJlZFR5cGUgPSB0YWJsZS0+d2ls
bFN0b3JlVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGFnZSk7CiAgICAgZWxzZSB7CkBA
IC05NDMsMTggKzkwMywxMiBAQCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyOjp+UHJv
cGVyCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRh
YmxlKFZNJiB2bSkKLXsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgp
LmdldCgpKTsKLX0KLQogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoVk0mIHZtKQogewotICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAg
IHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7
Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVtYmVyT2ZTbG90c0Zvckxh
c3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICBpZiAoUHJvcGVydHlU
YWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnRhYmxlKTsKKyAgICBib29sIHNldFByb3BlcnR5VGFibGUg
PSBmYWxzZTsKKyAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9w
ZXJ0eVRhYmxlKTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50
bHkoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCkBAIC05ODks
NzAgKzk0MywyNCBAQCBWZWN0b3I8UHJvcGVydHlNYXBFbnRyeT4gU3RydWN0dXJlOjpnZXRQCiAK
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKLSAgICBHQ1NhZmVDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIAotICAgIEFTU0VSVCghSlNDOjpp
c1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwotCi0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlz
U3ltYm9sKCkpCi0gICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQot
ICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2Nr
ZXIsIHZtKTsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUo
KS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+
YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNl
dCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOwotICAgIAotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICByZXR1cm4gbmV3T2Zmc2V0OworICAgIHJldHVybiBhZGQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgW10gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFwcm9w
ZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwotCi0gICAgUHJvcGVy
dHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChy
ZXApOwotICAgIGlmICghcG9zaXRpb24uZmlyc3QpCi0gICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwotCi0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNl
dDsKLQotICAgIHByb3BlcnR5VGFibGUoKS0+cmVtb3ZlKHBvc2l0aW9uKTsKLSAgICBwcm9wZXJ0
eVRhYmxlKCktPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKLQotICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICByZXR1cm4gb2Zmc2V0OwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJv
cGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiB2bSwgdW5zaWdu
ZWQgY2FwYWNpdHkpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwotCi0gICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgIHByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRoaXMsIFByb3Bl
cnR5VGFibGU6OmNyZWF0ZSh2bSwgY2FwYWNpdHkpKTsKKyAgICByZXR1cm4gcmVtb3ZlKHByb3Bl
cnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkg
eyB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQogewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlm
Tm90RW1wdHkodm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybjsKLQorICAgIAog
ICAgIGJvb2wga25vd25VbmlxdWUgPSBwcm9wZXJ0eU5hbWVzLmNhbkFkZEtub3duVW5pcXVlRm9y
U3RydWN0dXJlKCk7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0
eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIAor
ICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAgICBmb3Ig
KFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewogICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93
ZWRGb3JFbnVtZXJhdGlvbigpIHx8ICEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7CiAg
ICAgICAgIEFTU0VSVCghaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9u
KCkgfHwgIWl0ZXItPmtleS0+aXNTeW1ib2woKSk7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJp
YnV0ZXMgJiBEb250RW51bSkgfHwgbW9kZS5pbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKCkpIHsK
QEAgLTExMTQsNiArMTAyMiw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2UKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7
CiAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAg
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+bV9sb2NrKTsKKyAg
ICAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9nbG9iYWxPYmplY3QpOwogICAg
IGlmICghdGhpc09iamVjdC0+aXNPYmplY3QoKSkKICAgICAgICAgdGhpc09iamVjdC0+bV9jYWNo
ZWRQcm90b3R5cGVDaGFpbi5jbGVhcigpOwpAQCAtMTI3Niw5MiArMTE4Nyw2IEBAIHZvaWQgU3Ry
dWN0dXJlOjpkdW1wQ29udGV4dEhlYWRlcihQcmludFMKICAgICBvdXQucHJpbnQoIlN0cnVjdHVy
ZXM6Iik7CiB9CiAKLSNpZiBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sKLQotdm9pZCBQ
cm9wZXJ0eVRhYmxlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBBU1NFUlQobV9pbmRleFNp
emUgPj0gUHJvcGVydHlUYWJsZTo6TWluaW11bVRhYmxlU2l6ZSk7Ci0gICAgQVNTRVJUKG1faW5k
ZXhNYXNrKTsKLSAgICBBU1NFUlQobV9pbmRleFNpemUgPT0gbV9pbmRleE1hc2sgKyAxKTsKLSAg
ICBBU1NFUlQoIShtX2luZGV4U2l6ZSAmIG1faW5kZXhNYXNrKSk7Ci0KLSAgICBBU1NFUlQobV9r
ZXlDb3VudCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVChtX2tleUNvdW50ICsgbV9k
ZWxldGVkQ291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAgICBBU1NFUlQobV9kZWxldGVkQ291
bnQgPD0gbV9pbmRleFNpemUgLyA0KTsKLQotICAgIHVuc2lnbmVkIGluZGV4Q291bnQgPSAwOwot
ICAgIHVuc2lnbmVkIGRlbGV0ZWRJbmRleENvdW50ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGEg
PSAwOyBhICE9IG1faW5kZXhTaXplOyArK2EpIHsKLSAgICAgICAgdW5zaWduZWQgZW50cnlJbmRl
eCA9IG1faW5kZXhbYV07Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09IFByb3BlcnR5VGFibGU6
OkVtcHR5RW50cnlJbmRleCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZW50
cnlJbmRleCA9PSBkZWxldGVkRW50cnlJbmRleCgpKSB7Ci0gICAgICAgICAgICArK2RlbGV0ZWRJ
bmRleENvdW50OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNT
RVJUKGVudHJ5SW5kZXggPCBkZWxldGVkRW50cnlJbmRleCgpKTsKLSAgICAgICAgQVNTRVJUKGVu
dHJ5SW5kZXggLSAxIDw9IHVzZWRDb3VudCgpKTsKLSAgICAgICAgKytpbmRleENvdW50OwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgYiA9IGEgKyAxOyBiICE9IG1faW5kZXhTaXplOyArK2IpCi0g
ICAgICAgICAgICBBU1NFUlQobV9pbmRleFtiXSAhPSBlbnRyeUluZGV4KTsKLSAgICB9Ci0gICAg
QVNTRVJUKGluZGV4Q291bnQgPT0gbV9rZXlDb3VudCk7Ci0gICAgQVNTRVJUKGRlbGV0ZWRJbmRl
eENvdW50ID09IG1fZGVsZXRlZENvdW50KTsKLQotICAgIEFTU0VSVCghdGFibGUoKVtkZWxldGVk
RW50cnlJbmRleCgpIC0gMV0ua2V5KTsKLQotICAgIHVuc2lnbmVkIG5vbkVtcHR5RW50cnlDb3Vu
dCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBjID0gMDsgYyA8IHVzZWRDb3VudCgpOyArK2MpIHsK
LSAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gdGFibGUoKVtjXS5rZXk7Ci0gICAgICAgIGlmIChy
ZXAgPT0gUFJPUEVSVFlfTUFQX0RFTEVURURfRU5UUllfS0VZKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICsrbm9uRW1wdHlFbnRyeUNvdW50OwotICAgICAgICB1bnNpZ25lZCBpID0g
SWRlbnRpZmllclJlcEhhc2g6Omhhc2gocmVwKTsKLSAgICAgICAgdW5zaWduZWQgayA9IDA7Ci0g
ICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXg7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAg
ICAgICBlbnRyeUluZGV4ID0gbV9pbmRleFtpICYgbV9pbmRleE1hc2tdOwotICAgICAgICAgICAg
QVNTRVJUKGVudHJ5SW5kZXggIT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRyeUluZGV4KTsKLSAg
ICAgICAgICAgIGlmIChyZXAgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAgICAg
ICBrID0gMSB8IGRvdWJsZUhhc2goSWRlbnRpZmllclJlcEhhc2g6Omhhc2gocmVwKSk7Ci0gICAg
ICAgICAgICBpICs9IGs7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKGVudHJ5SW5kZXggPT0g
YyArIDEpOwotICAgIH0KLQotICAgIEFTU0VSVChub25FbXB0eUVudHJ5Q291bnQgPT0gbV9rZXlD
b3VudCk7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JF
bnVtZXJhdGlvbigpKSB7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHBy
b3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
ewotICAgICAgICAgICAgQVNTRVJUKCEoaXRlci0+YXR0cmlidXRlcyAmIERvbnRFbnVtKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmtleS0+aXNTeW1ib2woKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPmNoZWNrQ29uc2lzdGVuY3koKTsKLX0KLQotI2Vs
c2UKLQotaW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbmRpZiAvLyBET19QUk9QRVJUWU1BUF9D
T05TVEVOQ1lfQ0hFQ0sKLQogYm9vbCBDbGFzc0luZm86Omhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogY2kgPSB0
aGlzOyBjaTsgY2kgPSBjaS0+cGFyZW50Q2xhc3MpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDE3
ICsxODMsMTkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNTZWFsZWQo
Vk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzRnJvemVuKFZNJik7CiAgICAgYm9v
bCBpc1N0cnVjdHVyZUV4dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhZGlkUHJldmVudEV4dGVu
c2lvbnMoKTsgfQotICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCk7Ci0gICAg
c2l6ZV90IHN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpOyAKIAogICAgIEpT
X0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoVk0m
LCBKU09iamVjdCopOwogCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IHRydWU7CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIC8vIFRoZXNl
IHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIC8vIFZlcnNpb25z
IHRoYXQgdGFrZSBhIGZ1bmMgd2lsbCBjYWxsIGl0IGFmdGVyIG1ha2luZyB0aGUgY2hhbmdlIGJ1
dCB3aGlsZSBzdGlsbCBob2xkaW5nCisgICAgLy8gdGhlIGxvY2suIFRoZSBjYWxsYmFjayBpcyBu
b3QgY2FsbGVkIGlmIHRoZXJlIGlzIG5vIGNoYW5nZSBiZWluZyBtYWRlLCBsaWtlIGlmIHlvdSBj
YWxsCisgICAgLy8gcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigpIGFuZCB0aGUgcHJv
cGVydHkgaXMgbm90IGZvdW5kLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJv
cGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFt
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYsIFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIHZvaWQgc2V0UHJvdG90
eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3Rv
dHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCiAgICAgYm9vbCBpc0Rp
Y3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBkaWN0aW9uYXJ5S2luZCgpICE9IE5vbmVEaWN0aW9u
YXJ5S2luZDsgfQpAQCAtMjI5LDggKzIzMSw4IEBAIHB1YmxpYzoKICAgICBUeXBlSW5mbyB0eXBl
SW5mbygpIGNvbnN0IHsgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkp
OyByZXR1cm4gbV9ibG9iLnR5cGVJbmZvKG1fb3V0T2ZMaW5lVHlwZUZsYWdzKTsgfQogICAgIGJv
b2wgaXNPYmplY3QoKSBjb25zdCB7IHJldHVybiB0eXBlSW5mbygpLmlzT2JqZWN0KCk7IH0KIAot
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5k
ZXhpbmdUeXBlKCkgJiBBbGxBcnJheVR5cGVzOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBl
KCk7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9i
bG9iLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSAmIEFsbEFycmF5VHlwZXM7IH0KKyAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7IH0KICAgICAgICAgCiAg
ICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdAogICAgIHsKQEAgLTQz
Myw5ICs0MzUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3Ry
dWN0dXJlLCBtX2NsYXNzSW5mbyk7CiAgICAgfQogICAgICAgICAKLSAgICBzdGF0aWMgcHRyZGlm
Zl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGluZ1R5
cGVPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1f
YmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZz
ZXQoKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIHB0cmRpZmZfdCBwcm9wZXJ0eVRhYmxlVW5z
YWZlT2Zmc2V0KCkKQEAgLTU3OSw2ICs1ODEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGlj
IHZvaWQgZHVtcENvbnRleHRIZWFkZXIoUHJpbnRTdHJlYW0mKTsKICAgICAKKyAgICBDb25jdXJy
ZW50SklUTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKIHByaXZhdGU6CkBAIC02MzMsNDQgKzYzNyw0NSBAQCBwcml2YXRlOgog
ICAgIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBEaWN0aW9uYXJ5S2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgor
ICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAg
ICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIGNyZWF0
ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXImLCBWTSYsIHVuc2ln
bmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBX
cml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3BlcnR5VGFibGUoKTsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOwotICAgIFByb3Bl
cnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFZNJik7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIERlZmVyR0MmKQorICAgIC8v
IFRoaXMgbWF5IGdyYWIgdGhlIGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5n
IHRoZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5
VGFibGVJZk5vdEVtcHR5KFZNJiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxh
dGlvblRocmVhZCgpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOwotICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAg
ICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQotICAgICAgICAgICAg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiBy
ZXN1bHQgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzSUQoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAg
ICB9Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeShWTSYgdm0sIFByb3BlcnR5VGFibGUqJiB0YWJsZSkKKyAgICAKKyAgICAvLyBUaGlzIG1h
eSBncmFiIHRoZSBsb2NrLCBvciBub3QuIERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3Ry
dWN0dXJlJ3MgbG9jay4KKyAgICBQcm9wZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlKFZN
JiB2bSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAg
ICBBU1NFUlQoY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpKTsKLSAgICAgICAgdGFibGUgPSBwcm9w
ZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgICAgIGlmICghdGFibGUgJiYgcHJldmlvdXNJRCgpKSB7
Ci0gICAgICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKHZtKTsKLSAgICAgICAgICAgIHRhYmxlID0gcHJvcGVydHlUYWJs
ZSgpLmdldCgpOwotICAgICAgICB9CisgICAgICAgIGlmIChQcm9wZXJ0eVRhYmxlKiByZXN1bHQg
PSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKHZtKTsKICAgICB9Ci0g
ICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKFZNJiB2
bSwgRGVmZXJHQyYpCisgICAgCisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZU9yTnVs
bCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygp
ID09IGluZm8oKSk7Ci0gICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KHZtKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKICAgICB9
CisgICAgCisgICAgLy8gVGhpcyB3aWxsIGdyYWIgdGhlIGxvY2suIERvIG5vdCBjYWxsIHdoZW4g
aG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9w
ZXJ0eVRhYmxlKiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mLCBib29sIHNldFByb3BlcnR5
VGFibGUgPSB0cnVlKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5VGFibGUoVk0mIHZtLCBQ
cm9wZXJ0eVRhYmxlKiB0YWJsZSk7CisgICAgCisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcoVk0mKTsKIAogICAgIHZvaWQgc2V0UHJldmlvdXNJRChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKQEAgLTY5Nyw4ICs3MDIsOCBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNWYWxpZChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZUNoYWluKiBj
YWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgYm9vbCBpc1ZhbGlkKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDaGFpbikgY29uc3Q7CiAgICAgICAgIAot
ICAgIHZvaWQgcGluKCk7Ci0gICAgdm9pZCBwaW5Gb3JDYWNoaW5nKCk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBwaW4oVk0mLCBQcm9wZXJ0eVRhYmxlKik7CisgICAgdm9pZCBwaW5Gb3JD
YWNoaW5nKFZNJiwgUHJvcGVydHlUYWJsZSopOwogICAgIAogICAgIGJvb2wgaXNSYXJlRGF0YShK
U0NlbGwqIGNlbGwpIGNvbnN0CiAgICAgewpAQCAtNzEwLDcgKzcxNSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwogICAgIH0K
LSAgICAgICAgCisKICAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShWTSYpOwpAQCAtNzQw
LDcgKzc0NSw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90
cmFuc2l0aW9uVGFibGU7CiAKLSAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9w
ZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhy
ZWFkLgorICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIGVuc3VyZVByb3BlcnR5VGFi
bGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCiAg
ICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFwc2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFi
bGUgc28gaXQgaXMgc2FmZSB0byB1c2UuCiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+
IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSURCbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQwLDEwICs0MCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHUuZG91YmxlV29yZCA9IDB4
YmJhZGJlZWY7CiAgICAgfQogCi0gICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVj
dHVyZUlELCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUlu
Zm8pCisgICAgU3RydWN0dXJlSURCbG9iKFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlELCBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSwgY29uc3QgVHlwZUluZm8mIHR5cGVJ
bmZvKQogICAgIHsKICAgICAgICAgdS5maWVsZHMuc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmVJRDsK
LSAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlID0gaW5kZXhpbmdUeXBlOworICAgICAgICB1
LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeTsKICAgICAgICAgdS5maWVsZHMudHlwZSA9IHR5cGVJbmZvLnR5cGUoKTsKICAg
ICAgICAgdS5maWVsZHMuaW5saW5lVHlwZUZsYWdzID0gdHlwZUluZm8uaW5saW5lVHlwZUZsYWdz
KCk7CiAgICAgICAgIHUuZmllbGRzLmRlZmF1bHRDZWxsU3RhdGUgPSBDZWxsU3RhdGU6Ok5ld1do
aXRlOwpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
U3RydWN0dXJlSURCbG9iJiBvdGhlcikgeyB1LmRvdWJsZVdvcmQgPSBvdGhlci51LmRvdWJsZVdv
cmQ7IH0KICAgICAKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJu
IHUuZmllbGRzLnN0cnVjdHVyZUlEOyB9Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZTsgfQotICAgIHZvaWQgc2V0SW5k
ZXhpbmdUeXBlKEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUpIHsgdS5maWVsZHMuaW5kZXhpbmdU
eXBlID0gaW5kZXhpbmdUeXBlOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRp
bmdIaXN0b3J5OyB9CisgICAgdm9pZCBzZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7IHUuZmllbGRzLmluZGV4
aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5OyB9
CiAgICAgSlNUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy50eXBlOyB9CiAgICAg
VHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3MoKSBjb25zdCB7IHJldHVy
biB1LmZpZWxkcy5pbmxpbmVUeXBlRmxhZ3M7IH0KICAgICAKQEAgLTY3LDE2ICs2NywxNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9iLCB1
LmZpZWxkcy5zdHJ1Y3R1cmVJRCk7CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRl
eGluZ1R5cGVPZmZzZXQoKQorICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeU9mZnNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmluZGV4aW5nVHlwZUlu
Y2x1ZGluZ0hpc3RvcnkpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICB1bmlvbiB7CiAgICAgICAg
IHN0cnVjdCB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRDsKLSAgICAgICAg
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGU7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsKICAgICAgICAgICAgIEpTVHlwZSB0eXBlOwog
ICAgICAgICAgICAgVHlwZUluZm86OklubGluZVR5cGVGbGFncyBpbmxpbmVUeXBlRmxhZ3M7CiAg
ICAgICAgICAgICBDZWxsU3RhdGUgZGVmYXVsdENlbGxTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDggKzkzLDcgQEAgQUxXQVlTX0lOTElORSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OgogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
ICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CiAKLSAgICBQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVy
dHlUYWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKICAgICBpZiAoIXBy
b3BlcnR5VGFibGUpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC0yMTksMzEg
KzIxOCw2IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChFeGVjU3RhdGUKICAgICBy
ZXR1cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlw
ZUNoYWluKTsKIH0KIAotaW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKQotewotICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLQotICAgIEFTU0VS
VChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7Ci0KLSAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkgewotICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9m
T3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKG91
dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOwotICAgICAgICByZXR1cm4gY3VycmVu
dFNpemUgPT0gb3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodG90YWxT
dG9yYWdlQ2FwYWNpdHkoKSA+PSBwcm9wZXJ0eVRhYmxlKCktPnByb3BlcnR5U3RvcmFnZVNpemUo
KSk7Ci0gICAgaWYgKHByb3BlcnR5VGFibGUoKS0+aGFzRGVsZXRlZE9mZnNldCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBw
cm9wZXJ0eVRhYmxlKCktPnNpemUoKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+c2l6
ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5KCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgV3JpdGVC
YXJyaWVyPFByb3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQotewotICAg
IHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7Ci19Ci0KIGlubGluZSB2b2lkIFN0cnVjdHVy
ZTo6ZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsKICAgICBpZiAo
TElLRUxZKCFoYXNSYXJlRGF0YSgpKSkKQEAgLTI3MSw3ICsyNDUsNyBAQCBpbmxpbmUgV2F0Y2hw
b2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1
cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAogewotICAgIFByb3BlcnR5VGFibGUq
IHByb3BlcnR5VGFibGUgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCk7CisgICAgUHJvcGVy
dHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKIAogICAgIGlm
ICghcHJvcGVydHlUYWJsZSkgewogICAgICAgICBBU1NFUlQoIWlzUGlubmVkUHJvcGVydHlUYWJs
ZSgpKTsKQEAgLTI5Miw2ICsyNjYsMTEgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6
Y2hlY2tPZmZzZQogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6
OmNoZWNrQ29uc2lzdGVuY3koKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKK30K
KwogaW5saW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KHNpemVfdCBjdXJy
ZW50Q2FwYWNpdHkpCiB7CiAgICAgaWYgKCFjdXJyZW50Q2FwYWNpdHkpCkBAIC0yOTksMTEgKzI3
OCw2IEBAIGlubGluZSBzaXplX3QgbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2kKICAgICByZXR1
cm4gY3VycmVudENhcGFjaXR5ICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwogfQogCi1pbmxpbmUg
c2l6ZV90IFN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkK
LXsKLSAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZ1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU1N0cmluZyogdmFsdWUsIFByb3BlcnR5U2xv
dCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpCiB7CiAgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQpAQCAt
MzExLDQgKzI4NSw4NSBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5n
CiAgICAgcmFyZURhdGEoKS0+c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShleGVjLCB2bSwgdGhpcywg
dmFsdWUsIHRvU3RyaW5nVGFnU3ltYm9sU2xvdCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5j
KQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7
CisKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXAp
OworICAgIAorICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKKyAgICAKKyAgICBBU1NF
UlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIERvbnRFbnVtIHx8IHByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxv
d2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUu
dWlkKCk7CisKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNl
dChtX2lubGluZUNhcGFjaXR5KTsKKyAgICAKKyAgICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50
cnkocmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KworICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQpOworICAgIHJldHVybiBuZXdPZmZzZXQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykK
K3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAorICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKworICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwor
ICAgIAorICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZyb20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVz
LCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJvcGVydHkgdGFibGUuCisgICAgLy8gVGhlIG9u
bHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEgdGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHku
CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisKKyAg
ICBpZiAoIXRhYmxlKQorICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKKworICAgIFByb3Bl
cnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSB0YWJsZS0+ZmluZChyZXApOworICAg
IGlmICghcG9zaXRpb24uZmlyc3QpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworICAg
IAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CisK
KyAgICB0YWJsZS0+cmVtb3ZlKHBvc2l0aW9uKTsKKyAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNl
dChvZmZzZXQpOworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVuYyhsb2NrZXIs
IG9mZnNldCk7CisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Yz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIHBpbih2bSwgZW5zdXJlUHJvcGVydHlU
YWJsZSh2bSkpOworICAgIAorICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgZnVuYyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBBU1NF
UlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVy
dHlUYWJsZSgpKTsKKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKKyAgICAKKyAg
ICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVuYyk7Cit9CisKK2lubGluZSB2b2lkIFN0
cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQor
eworICAgIG1fcHJvcGVydHlUYWJsZVVuc2FmZS5zZXRNYXlCZU51bGwodm0sIHRoaXMsIHRhYmxl
KTsKK30KKyAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAK
KzIwMTYtMTEtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgR0Mgc2hvdWxkIGJlIG9wdGlvbmFsbHkgY29uY3VycmVudCBhbmQgZGlzYWJsZWQgYnkgZGVm
YXVsdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
NDU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAgICAgIAorICAg
ICAgICBUaGUgcmVhc29uIHdoeSBJIHdlbnQgdG8gc3VjaCBncmVhdCBwYWlucyB0byBtYWtlIFdU
Rjo6TG9jayBmaXQgaW4gdHdvIGJpdHMgaXMgdGhhdCBJCisgICAgICAgIGtuZXcgdGhhdCBJIHdv
dWxkIGV2ZW50dWFsbHkgbmVlZCB0byBzdHVmZiBvbmUgaW50byBzb21lIG1pc2NlbGxhbmVvdXMg
Yml0cyBvZiB0aGUKKyAgICAgICAgSlNDZWxsIGhlYWRlci4gVGhhdCB0aW1lIGhhcyBjb21lLCBi
ZWNhdXNlIHRoZSBjb25jdXJyZW50IEdDIGhhcyBudW1lcm91cyByYWNlCisgICAgICAgIGNvbmRp
dGlvbnMgaW4gdmlzaXRDaGlsZHJlbiB0aGF0IGNhbiBiZSB0cml2aWFsbHkgZml4ZWQgaWYgZWFj
aCBvYmplY3QganVzdCBoYXMgYW4KKyAgICAgICAgaW50ZXJuYWwgbG9jay4gU29tZSBjZWxsIHR5
cGVzIG1pZ2h0IHVzZSBpdCB0byBzaW1wbHkgcHJvdGVjdCB0aGVpciBlbnRpcmUgdmlzaXRDaGls
ZHJlbgorICAgICAgICBmdW5jdGlvbiBhbmQgYW55dGhpbmcgdGhhdCBtdXRhdGVzIHRoZSBmaWVs
ZHMgaXQgdG91Y2hlcywgd2hpbGUgb3RoZXIgY2VsbCB0eXBlcyBtaWdodAorICAgICAgICB1c2Ug
aXQgYXMgYSAibG9jayBvZiBsYXN0IHJlc29ydCIgdG8gaGFuZGxlIGNvcm5lciBjYXNlcyBvZiBh
biBvdGhlcndpc2Ugd2FpdC1mcmVlIG9yCisgICAgICAgIGxvY2stZnJlZSBhbGdvcml0aG0uIFJp
Z2h0IG5vdywgaXQncyB1c2VkIHRvIHByb3RlY3QgY2VydGFpbiB0cmFuc2Zvcm1hdGlvbnMgaW52
b2x2aW5nCisgICAgICAgIGluZGV4aW5nIHN0b3JhZ2UuCisgICAgICAgIAorICAgICAgICBUbyBt
YWtlIHRoaXMgaGFwcGVuLCBJIGZhY3RvcmVkIHRoZSBXVEY6OkxvY2sgYWxnb3JpdGhtIGludG8g
YSBMb2NrQWxnb3JpdGhtIHN0cnVjdCB0aGF0CisgICAgICAgIGlzIHRlbXBsYXRpemVkIG9uIGxv
Y2sgdHlwZSAodWludDhfdCBmb3IgV1RGOjpMb2NrKSwgdGhlIGlzSGVsZEJpdCB2YWx1ZSAoMSBm
b3IKKyAgICAgICAgV1RGOjpMb2NrKSwgYW5kIHRoZSBoYXNQYXJrZWRCaXQgdmFsdWUgKDIgZm9y
IFdURjo6TG9jaykuIFRoaXMgY291bGQgaGF2ZSBiZWVuIGRvbmUgYXMKKyAgICAgICAgYSB0ZW1w
bGF0aXplZCBMb2NrIGNsYXNzIHRoYXQgYmFzaWNhbGx5IGNvbnRhaW5zIEF0b21pYzxMb2NrVHlw
ZT4uIFlvdSBjb3VsZCB0aGVuIG1ha2UKKyAgICAgICAgYW55IGZpZWxkIGludG8gYSBsb2NrIGJ5
IGJpdHdpc2VfY2FzdGluZyBpdCB0byBUZW1wbGF0ZUxvY2s8ZmllbGQgdHlwZSwgYml0MSwgYml0
Mj4uIEJ1dAorICAgICAgICB0aGlzIGZlbHQgdG9vIGRpcnR5LCBzbyBpbnN0ZWFkLCBMb2NrQWxn
b3JpdGhtIGhhcyBzdGF0aWMgbWV0aG9kcyB0aGF0IHRha2UKKyAgICAgICAgQXRvbWljPExvY2tU
eXBlPiYgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuIEkgdGhpbmsgdGhhdCB0aGlzIG1ha2VzIGl0
IG1vcmUgbmF0dXJhbCB0bworICAgICAgICBwcm9qZWN0IGEgTG9ja0FsZ29yaXRobSBvbnRvIGFu
IGV4aXN0aW5nIEF0b21pYzw+IGZpZWxkLiBTYWRseSwgc29tZSBwbGFjZXMgaGF2ZSB0byBjYXN0
CisgICAgICAgIHRoZWlyIG5vbi1BdG9taWM8PiBmaWVsZCB0byBBdG9taWM8PiBpbiBvcmRlciBm
b3IgdGhpcyB0byB3b3JrLiBMaWtlIHNvIG1hbnkgb3RoZXIgdGhpbmdzCisgICAgICAgIHdlIGRv
LCB0aGlzIGp1c3Qgc2hvd3MgdGhhdCB0aGUgQysrIHN0eWxlIG9mIGxhYmVsaW5nIGZpZWxkcyB0
aGF0IGFyZSBzdWJqZWN0IHRvIGF0b21pYworICAgICAgICBvcHMgYXMgYXRvbWljIGlzIGNvdW50
ZXJwcm9kdWN0aXZlLiBNYXliZSBzb21lIGRheSBJJ2xsIGNoYW5nZSBMb2NrQWxnb3JpdGhtIHRv
IHVzZSBvdXIKKyAgICAgICAgb3RoZXIgQXRvbWljcyBBUEksIHdoaWNoIGRvZXMgbm90IHJlcXVp
cmUgQXRvbWljPD4uCisgICAgICAgIAorICAgICAgICBXVEY6OkxvY2sgbm93IHVzZXMgTG9ja0Fs
Z29yaXRobS4gVGhlIHNsb3cgcGF0aHMgYXJlIHN0aWxsIG91dGxpbmVkLiBJIGRvbid0IGZlZWwg
dG9vCisgICAgICAgIGJhZCBhYm91dCB0aGUgTG9ja0FsZ29yaXRobS5oIGhlYWRlciBiZWluZyBp
bmNsdWRlZCBpbiBzbyBtYW55IHBsYWNlcyBiZWNhdXNlIHdlIGNoYW5nZQorICAgICAgICB0aGF0
IGFsZ29yaXRobSBzbyBpbmZyZXF1ZW50bHkuCisgICAgICAgIAorICAgICAgICBBbHNvLCBJIGFk
ZGVkIGEgaGFzRWxhcHNlZCh0aW1lKSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBtYWtlcyBpdCBz
byBtdWNoIG1vcmUgbmF0dXJhbAorICAgICAgICB0byB3cml0ZSB0aW1lc2xpY2luZyBjb2RlLCB3
aGljaCB0aGUgY29uY3VycmVudCBHQyBoYXMgdG8gZG8gYSBsb3Qgb2YuCisKKyAgICAgICAgKiBX
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogd3RmL0xpc3REdW1wLmg6CisgICAgICAgICogd3RmL0xvY2suY3BwOgor
ICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQmFz
ZTo6dW5sb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tGYWlybHlTbG93
KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3dJbXBsKTogRGVsZXRlZC4KKyAg
ICAgICAgKiB3dGYvTG9jay5oOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6bG9jayk6CisgICAg
ICAgIChXVEY6OkxvY2tCYXNlOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVu
bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAo
V1RGOjpMb2NrQmFzZTo6aXNIZWxkKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL0xvY2tBbGdvcml0aG0uaDogQWRkZWQuCisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06
OmxvY2tGYXN0QXNzdW1pbmdaZXJvKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9j
a0Zhc3QpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrKToKKyAgICAgICAgKFdU
Rjo6TG9ja0FsZ29yaXRobTo6dHJ5TG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06
OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1
bmxvY2tGYXN0KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrKToKKyAgICAg
ICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFpcmx5KToKKyAgICAgICAgKFdURjo6TG9j
a0FsZ29yaXRobTo6aXNMb2NrZWQpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2Nr
U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cpOgorICAgICAg
ICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwOgorICAgICAgICAoV1RGOjpoYXNF
bGFwc2VkKToKKyAgICAgICAgKiB3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmg6CisKIDIw
MTYtMTEtMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBBbGxvdyBtdXRhYmxlIGxhbWJkYXMgaW4gSGFzaE1hcDo6ZW5zdXJlCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwODY1MykK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIyLDYgKzIyLDcgQEAKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8K
IAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8q
IE5vTG9jay5oICovOyB9OworCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29y
aXRobS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
RkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLzsgfTsKIAkJMEYyQjY2
QTYxN0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FF
M0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAw
QTdBRTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9
OwogCQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAwRjBB
MkEzIC8qIFdlYWtSYW5kb20uaCAqLzsgfTsKQEAgLTM3NCw2ICszNzUsNyBAQAogCiAvKiBCZWdp
biBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEw
IC8qIE5vTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYwRkNEREQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja0FsZ29yaXRobS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8q
IEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTUzLDYgKzk1NSw3IEBACiAJCQkJQThBNDcyQzExNTFBODI1QTAwNDEyM0ZGIC8qIExpc3RI
YXNoU2V0LmggKi8sCiAJCQkJMEZFMTY0NjgxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICov
LAogCQkJCTBGRTE2NDY5MUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmggKi8sCisJCQkJMEYwRkNE
REQxREQxNjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCAqLywKIAkJCQlBOEE0NzJDMzE1
MUE4MjVBMDA0MTIzRkYgLyogTG9ja2VyLmggKi8sCiAJCQkJNTEzRTE3MEExQ0Q3RDVCRjAwRTM2
NTBCIC8qIExvZ2dpbmdBY2N1bXVsYXRvci5oICovLAogCQkJCUE4QTQ3MkM2MTUxQTgyNUEwMDQx
MjNGRiAvKiBNYWluVGhyZWFkLmNwcCAqLywKQEAgLTEzMjMsNiArMTMyNiw3IEBACiAJCQkJQThB
NDczOUIxNTFBODI1QjAwNDEyM0ZGIC8qIENyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMTU1NTZGNjE4QTBDQzE4MDA2RjQ4RkIgLyogQ3J5cHRvZ3Jh
cGhpY1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0M0ExNTFBODI1QjAwNDEy
M0ZGIC8qIENTdHJpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMEZDRERFMUREMTY3RjkwMEND
QUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RDE1MUE4
MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlG
MTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRhTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNB
MTE1MUE4MjVCMDA0MTIzRkYgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0F0b21p
Y3MuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvQXRvbWljcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDM2IEBAIHN0cnVjdCBBdG9taWMgewogICAgIEFMV0FZ
U19JTkxJTkUgVCBleGNoYW5nZVhvcihVIG9wZXJhbmQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1cm4gdmFsdWUuZmV0Y2hfeG9yKG9w
ZXJhbmQsIG9yZGVyKTsgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgVCBleGNoYW5nZShUIG5l
d1ZhbHVlLCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9j
c3QpIHsgcmV0dXJuIHZhbHVlLmV4Y2hhbmdlKG5ld1ZhbHVlLCBvcmRlcik7IH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEFMV0FZU19JTkxJTkUgYm9vbCB0cnlUcmFu
c2FjdGlvblJlbGF4ZWQoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIFQgb2xkVmFs
dWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBUIG5ld1ZhbHVl
ID0gb2xkVmFsdWU7CisgICAgICAgIGZ1bmMobmV3VmFsdWUpOworICAgICAgICByZXR1cm4gY29t
cGFyZUV4Y2hhbmdlV2Vha1JlbGF4ZWQob2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEFMV0FZU19JTkxJTkUgdm9pZCB0cmFuc2Fj
dGlvblJlbGF4ZWQoY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHdoaWxlICghdHJ5
VHJhbnNhdGlvblJlbGF4ZWQoZnVuYykpIHsgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uKGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxheGVkKTsKKyAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAgICBm
dW5jKG5ld1ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFs
dWUsIG5ld1ZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCB0cmFuc2FjdGlvbihjb25zdCBGdW5jJiBmdW5jKQorICAgIHsK
KyAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2FjdGlvbihmdW5jKSkgeyB9CisgICAgfQogCiAgICAg
c3RkOjphdG9taWM8VD4gdmFsdWU7CiB9OwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwODY1MykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEl0ZXJhdG9yUmFuZ2Uu
aAogICAgIExpc3RIYXNoU2V0LmgKICAgICBMb2NrLmgKKyAgICBMb2NrQWxnb3JpdGhtLmgKICAg
ICBMb2NrZXIuaAogICAgIE1ENS5oCiAgICAgTWFpblRocmVhZC5oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJ
KHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NywxMCArMTc3LDExIEBAIExpc3REdW1wSW5Db250ZXh0PFQsIFU+IGxpc3RE
dW1wSW5Db250ZXgKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Omxpc3REdW1wOwot
dXNpbmcgV1RGOjpzb3J0ZWRMaXN0RHVtcDsKK3VzaW5nIFdURjo6bGlzdER1bXBJbkNvbnRleHQ7
CiB1c2luZyBXVEY6Om1hcER1bXA7Cit1c2luZyBXVEY6OnBvaW50ZXJMaXN0RHVtcDsKK3VzaW5n
IFdURjo6c29ydGVkTGlzdER1bXA7CiB1c2luZyBXVEY6OnNvcnRlZE1hcER1bXA7Ci11c2luZyBX
VEY6Omxpc3REdW1wSW5Db250ZXh0OwogCiAjZW5kaWYgLy8gTGlzdER1bXBfaAogCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2Nr
LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvTG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDEyMCArMjYsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJMb2NrLmgiCiAKLSNpbmNsdWRlICJEYXRhTG9nLmgiCi0jaW5jbHVkZSAiUGFya2luZ0xv
dC5oIgotI2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCi0jaW5jbHVkZSAiVGhyZWFkaW5n
UHJpbWl0aXZlcy5oIgotI2luY2x1ZGUgPHRocmVhZD4KLQogbmFtZXNwYWNlIFdURiB7CiAKLXN0
YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKLQotTkVWRVJfSU5MSU5FIHZvaWQgTG9j
a0Jhc2U6OmxvY2tTbG93KCkKK3ZvaWQgTG9ja0Jhc2U6OmxvY2tTbG93KCkKIHsKLSAgICB1bnNp
Z25lZCBzcGluQ291bnQgPSAwOwotCi0gICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0
IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KLSAgICBj
b25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKLSAgICAKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0gICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7Ci0KLSAgICAgICAg
Ly8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgotICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBh
cmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3Bp
biBhcm91bmQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQp
ICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewotICAgICAgICAgICAgc3BpbkNvdW50Kys7Ci0g
ICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkg
c2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBh
cm91bmQKLSAgICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFp
bGVkIGF0IHNldHRpbmcgaXQuCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQ
YXJrZWRCaXQpCi0gICAgICAgICAgICAmJiAhbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3Vy
cmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBi
ZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBh
cmsuCi0gICAgICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9Ci0gICAgICAg
ICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQ
YXJrZWRCaXQpOwotICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkgewotICAgICAg
ICAgICAgc3dpdGNoIChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKLSAg
ICAgICAgICAgIGNhc2UgRGlyZWN0SGFuZG9mZjoKLSAgICAgICAgICAgICAgICAvLyBUaGUgbG9j
ayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5kZWQgdG8gdXMgZGlyZWN0bHkgYnkgdGhl
IHRocmVhZCB0aGF0IGRpZAotICAgICAgICAgICAgICAgIC8vIHVubG9jaygpLiBUaGlzIG1lYW5z
IHdlJ3JlIGRvbmUhCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNIZWxkKCkpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgQmFyZ2luZ09wcG9ydHVu
aXR5OgotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBjYXNlLiBUaGUgdGhy
ZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9jaywKLSAgICAgICAg
ICAgICAgICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBh
biBvcHBvcnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKLSAgICAgICAgICAgICAgICAvLyBv
dGhlciB0aHJlYWRzIG1heSBiYXJnZSwgc28gdGhlIGJlc3QgdGhhdCB3ZSBjYW4gZG8gaXMgbG9v
cCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZl
ciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBs
b29wCi0gICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgotICAgIH0KKyAgICBEZWZhdWx0
TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cobV9ieXRlKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5s
b2NrU2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoVW5mYWlyKTsKKyAgICBEZWZhdWx0TG9j
a0FsZ29yaXRobTo6dW5sb2NrU2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpVbmZh
aXIpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tGYWlybHlTbG93KCkKIHsKLSAgICB1bmxv
Y2tTbG93SW1wbChGYWlyKTsKLX0KLQotTkVWRVJfSU5MSU5FIHZvaWQgTG9ja0Jhc2U6OnVubG9j
a1Nsb3dJbXBsKEZhaXJuZXNzIGZhaXJuZXNzKQotewotICAgIC8vIFdlIGNvdWxkIGdldCBoZXJl
IGJlY2F1c2UgdGhlIHdlYWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBi
ZWNhdXNlIHRoZXJlIGlzCi0gICAgLy8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FT
IGxvb3A6IGV2ZW4gaWYgcmlnaHQgbm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQK
LSAgICAvLyBiZSBoZWxkIGFuZCBwYXJrZWQgaWYgc29tZW9uZSBhdHRlbXB0cyB0byBsb2NrIGp1
c3QgYXMgd2UgYXJlIHVubG9ja2luZy4KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVpbnQ4X3Qg
b2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2xk
Qnl0ZVZhbHVlID09IGlzSGVsZEJpdCB8fCBvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhh
c1BhcmtlZEJpdCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG9sZEJ5dGVWYWx1ZSA9PSBpc0hl
bGRCaXQpIHsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hl
bGRCaXQsIDApKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQuIFVucGFyayBleGFj
dGx5IG9uZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQgdGhyZWFkCi0gICAg
ICAgIC8vIGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0
aW1lIGFzIHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFyZ2luZy4KLSAgICAgICAgLy8gV2hlbiB3
ZSB1bmxvY2ssIHdlIG1heSBsZWF2ZSB0aGUgcGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBj
aGFuY2UgdGhhdCB0aGVyZSBhcmUgc3RpbGwKLSAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBwYXJr
ZWQuCi0gICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUgPT0gKGlzSGVsZEJpdCB8IGhhc1Bhcmtl
ZEJpdCkpOwotICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCi0gICAgICAgICAgICAmbV9i
eXRlLAotICAgICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAt
PiBpbnRwdHJfdCB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhh
dCBjYW4gY2xlYXIgZWl0aGVyIHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKLSAg
ICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmln
aHQgbm93LgotICAgICAgICAgICAgICAgIEFTU0VSVChtX2J5dGUubG9hZCgpID09IChpc0hlbGRC
aXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQu
dGltZVRvQmVGYWlyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sg
YW55dGhpbmcuIEluc3RlYWQsIHdlIGhhbmQgdGhlIGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdh
cwotICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRGlyZWN0SGFuZG9mZjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0Lm1heUhhdmVNb3JlVGhyZWFkcykKLSAgICAgICAgICAgICAgICAgICAgbV9i
eXRlLnN0b3JlKGhhc1BhcmtlZEJpdCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBtX2J5dGUuc3RvcmUoMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJhcmdp
bmdPcHBvcnR1bml0eTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tTbG93KG1fYnl0ZSwgRGVmYXVsdExvY2tB
bGdvcml0aG06OkZhaXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlz
aW9uIDIwODY1MykKKysrIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsNyBAQAogI2lmbmRlZiBXVEZfTG9ja19oCiAjZGVmaW5lIFdURl9Mb2NrX2gKIAot
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5j
bHVkZSA8d3RmL0xvY2tBbGdvcml0aG0uaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTM3LDYgKzM2LDggQEAgc3RydWN0IExvY2tJ
bnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXVEYgewogCit0eXBlZGVmIExvY2tBbGdvcml0aG08dWlu
dDhfdCwgMSwgMj4gRGVmYXVsdExvY2tBbGdvcml0aG07CisKIC8vIFRoaXMgaXMgYSBmdWxseSBh
ZGFwdGl2ZSBtdXRleCB0aGF0IG9ubHkgcmVxdWlyZXMgMSBieXRlIG9mIHN0b3JhZ2UuIEl0IGhh
cyBmYXN0IHBhdGhzIHRoYXQgYXJlCiAvLyBjb21wZXRldGl2ZSB0byBhIHNwaW5sb2NrICh1bmNv
bnRlbmRlZCBsb2NraW5nIGlzIGlubGluZWQgYW5kIGlzIGp1c3QgYSBDQVMsIG1pY3JvY29udGVu
dGlvbiBpcwogLy8gaGFuZGxlZCBieSBzcGlubmluZyBhbmQgeWllbGRpbmcpLCBhbmQgYSBzbG93
IHBhdGggdGhhdCBpcyBjb21wZXRldGl2ZSB0byBzdGQ6Om11dGV4IChpZiBhIGxvY2sKQEAgLTUz
LDIzICs1NCwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKIHN0cnVjdCBMb2NrQmFzZSB7CiAgICAgdm9p
ZCBsb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5n
ZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKLSAgICAg
ICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBsb2NrU2xvdygpOworICAgICAgICBpZiAoVU5MSUtFTFkoIURlZmF1bHRMb2Nr
QWxnb3JpdGhtOjpsb2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIGxv
Y2tTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCB0cnlMb2NrKCkKICAgICB7Ci0gICAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5s
b2FkKCk7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobV9ieXRlLmNvbXBh
cmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVs
ZEJpdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIERlZmF1bHRMb2NrQWxnb3JpdGhtOjp0cnlMb2NrKG1fYnl0ZSk7CiAgICAgfQogCiAg
ICAgLy8gTmVlZCB0aGlzIHZlcnNpb24gZm9yIHN0ZDo6dW5pcXVlX2xvY2suCkBAIC04OCwxMiAr
NzksOCBAQCBzdHJ1Y3QgTG9ja0Jhc2UgewogICAgIC8vIGd1YXJhbnRlZXMgdGhhdCBsb25nIGNy
aXRpY2FsIHNlY3Rpb25zIGFsd2F5cyBnZXQgYSBmYWlyIGxvY2suCiAgICAgdm9pZCB1bmxvY2so
KQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhp
c0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgewotICAgICAgICAgICAg
Ly8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5sb2NrU2xvdygpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIURlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0
ZSkpKQorICAgICAgICAgICAgdW5sb2NrU2xvdygpOwogICAgIH0KIAogICAgIC8vIFRoaXMgaXMg
bGlrZSB1bmxvY2soKSBidXQgaXQgZ3VhcmFudGVlcyB0aGF0IHdlIHVubG9jayB0aGUgbG9jayBm
YWlybHkuIEZvciBzaG9ydCBjcml0aWNhbApAQCAtMTAzLDE3ICs5MCwxMyBAQCBzdHJ1Y3QgTG9j
a0Jhc2UgewogICAgIC8vIHdhbnQuCiAgICAgdm9pZCB1bmxvY2tGYWlybHkoKQogICAgIHsKLSAg
ICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAs
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgewotICAgICAgICAgICAgLy8gTG9jayByZWxl
YXNlZCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdW5sb2NrRmFpcmx5U2xvdygpOworICAgICAgICBpZiAoVU5MSUtFTFko
IURlZmF1bHRMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQor
ICAgICAgICAgICAgdW5sb2NrRmFpcmx5U2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgaXNIZWxk
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J5dGUubG9hZChzdGQ6Om1lbW9yeV9v
cmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICAgICAgcmV0dXJuIERlZmF1bHRMb2NrQWxn
b3JpdGhtOjppc0xvY2tlZChtX2J5dGUpOwogICAgIH0KIAogICAgIGJvb2wgaXNMb2NrZWQoKSBj
b25zdApAQCAtMTI2LDIxICsxMDksMTAgQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHN0YXRpYyBj
b25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaGFz
UGFya2VkQml0ID0gMjsKLQorICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGxvY2tT
bG93KCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xvdygpOwogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja0ZhaXJseVNsb3coKTsKLSAgICAKLSAgICBlbnVt
IEZhaXJuZXNzIHsKLSAgICAgICAgRmFpciwKLSAgICAgICAgVW5mYWlyCi0gICAgfTsKLSAgICB2
b2lkIHVubG9ja1Nsb3dJbXBsKEZhaXJuZXNzKTsKLSAgICAKLSAgICBlbnVtIFRva2VuIHsKLSAg
ICAgICAgQmFyZ2luZ09wcG9ydHVuaXR5LAotICAgICAgICBEaXJlY3RIYW5kb2ZmCi0gICAgfTsK
IAogICAgIC8vIE1ldGhvZCB1c2VkIGZvciB0ZXN0aW5nIG9ubHkuCiAgICAgYm9vbCBpc0Z1bGx5
UmVzZXQoKSBjb25zdApJbmRleDogU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2tBbGdvcml0aG0uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFdURl9Mb2NrQWxnb3JpdGhtX2gKKyNkZWZpbmUgV1RGX0xvY2tBbGdvcml0
aG1faAorCisjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5j
bHVkZSA8d3RmL0NvbXBpbGVyLmg+CisjaW5jbHVkZSA8d3RmL1BhcmtpbmdMb3QuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgdGhlIGFsZ29yaXRobSB1c2VkIGJ5IFdURjo6TG9j
ay4KKwordGVtcGxhdGU8dHlwZW5hbWUgTG9ja1R5cGUsIExvY2tUeXBlIGlzSGVsZEJpdCwgTG9j
a1R5cGUgaGFzUGFya2VkQml0PgorY2xhc3MgTG9ja0FsZ29yaXRobSB7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdCBMb2NrVHlwZSBtYXNr
ID0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0OworCitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
bG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAg
ICAgIHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1l
bW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgbG9ja0Zh
c3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBlIG9sZFZh
bHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBpZiAo
b2xkVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlIHwgaXNI
ZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHZvaWQgbG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKCFsb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAgICBsb2NrU2xvdyhsb2NrKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgdHJ5TG9jayhBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQorICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdWludDhfdCBjdXJy
ZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAg
ICAgICAgICAgaWYgKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vh
ayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0LCBzdGQ6Om1l
bW9yeV9vcmRlcl9hY3F1aXJlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIHVubG9ja0Zhc3RBc3N1bWluZ1plcm8oQXRv
bWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NrLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdChBdG9taWM8TG9ja1R5cGU+JiBs
b2NrKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2NrLmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmICgob2xkVmFsdWUgJiBtYXNrKSAhPSBp
c0hlbGRCaXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBsb2Nr
LmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkVmFsdWUsIG9sZFZhbHVlICYgfmlzSGVsZEJpdCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHVu
bG9jayhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9jaywgVW5mYWly
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrRmFpcmx5KEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zhc3QobG9j
aykpKQorICAgICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBGYWlyKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIGJvb2wgaXNMb2NrZWQoY29uc3QgQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAg
ICB7CisgICAgICAgIHJldHVybiBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkg
JiBpc0hlbGRCaXQ7CisgICAgfQorICAgIAorICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCBs
b2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c3BpbkNvdW50ID0gMDsKKworICAgICAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQg
dG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbG9jay5sb2FkKCk7CisK
KyAgICAgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAgICAgICAg
ICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAgICAg
JiYgbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBt
dWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAgICAgICBpZiAoIShj
dXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQp
IHsKKyAgICAgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgICAgICBzdGQ6OnRo
aXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGlu
ZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQK
KyAgICAgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxl
ZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhh
c1BhcmtlZEJpdCkKKyAgICAgICAgICAgICAgICAmJiAhbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFr
KGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRo
ZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2Fz
ZSwgd2UgY2FuIHBhcmsuCisgICAgICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVzdWx0IHBhcmtS
ZXN1bHQgPQorICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsb2Nr
LCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKyAgICAgICAg
ICAgIGlmIChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChzdGF0aWNfY2FzdDxUb2tlbj4ocGFya1Jlc3VsdC50b2tlbikpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIERpcmVjdEhhbmRvZmY6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdh
cyBuZXZlciByZWxlYXNlZC4gSXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhy
ZWFkIHRoYXQgZGlkCisgICAgICAgICAgICAgICAgICAgIC8vIHVubG9jaygpLiBUaGlzIG1lYW5z
IHdlJ3JlIGRvbmUhCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTG9ja2Vk
KGxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNh
c2UgQmFyZ2luZ09wcG9ydHVuaXR5OgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVsZWFz
ZWQgdGhlIGxvY2ssCisgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIGJlZW4gd29r
ZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVuaXR5IHRvIGdyYWIgdGhlIGxvY2su
IEJ1dAorICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIG1heSBiYXJnZSwgc28g
dGhlIGJlc3QgdGhhdCB3ZSBjYW4gZG8gaXMgbG9vcCBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBXZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJl
Y2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAg
ICAgICAgLy8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgZW51bSBGYWlybmVzcyB7CisgICAgICAgIEZhaXIsCisgICAgICAgIFVuZmFpcgorICAgIH07
CisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHVubG9ja1Nsb3coQXRvbWljPExvY2tUeXBl
PiYgbG9jaywgRmFpcm5lc3MgZmFpcm5lc3MpCisgICAgeworICAgICAgICAvLyBXZSBjb3VsZCBn
ZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2soKSBmYWlsZWQgc3B1cmlvdXNs
eSwgb3IgYmVjYXVzZSB0aGVyZSBpcworICAgICAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdl
IG5lZWQgYSBDQVMgbG9vcDogZXZlbiBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxk
LCBpdCBjb3VsZAorICAgICAgICAvLyBiZSBoZWxkIGFuZCBwYXJrZWQgaWYgc29tZW9uZSBhdHRl
bXB0cyB0byBsb2NrIGp1c3QgYXMgd2UgYXJlIHVubG9ja2luZy4KKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgdWludDhfdCBvbGRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKAorICAgICAgICAgICAgICAgIChvbGRCeXRlVmFsdWUgJiBt
YXNrKSA9PSBpc0hlbGRCaXQKKyAgICAgICAgICAgICAgICB8fCAob2xkQnl0ZVZhbHVlICYgbWFz
aykgPT0gKGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmICgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUsIG9sZEJ5dGVWYWx1
ZSAmIH5pc0hlbGRCaXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNvbWVvbmUg
aXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUgbG9j
ayB0byB0aGF0IHRocmVhZAorICAgICAgICAgICAgLy8gZGlyZWN0bHksIG9yIHdlIHdpbGwgdW5s
b2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgdW5wYXJrIHRvIGFsbG93IGZvciBi
YXJnaW5nLgorICAgICAgICAgICAgLy8gV2hlbiB3ZSB1bmxvY2ssIHdlIG1heSBsZWF2ZSB0aGUg
cGFya2VkIGJpdCBzZXQgaWYgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGVyZSBhcmUgc3RpbGwK
KyAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgorICAgICAgICAgICAgQVNTRVJU
KChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Cisg
ICAgICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoCisgICAgICAgICAgICAgICAgJmxvY2ss
CisgICAgICAgICAgICAgICAgWyZdIChQYXJraW5nTG90OjpVbnBhcmtSZXN1bHQgcmVzdWx0KSAt
PiBpbnRwdHJfdCB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0aGUgb25seSBvbmVz
IHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0IG9yIHRoZSBoYXNQYXJrZWRCaXQs
CisgICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRz
IHNldCByaWdodCBub3cuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgobG9jay5sb2FkKCkg
JiBtYXNrKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGlkVW5wYXJrVGhyZWFkICYmIChmYWly
bmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZhaXIpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBkb24ndCB1bmxvY2sgYW55dGhpbmcuIEluc3RlYWQsIHdlIGhhbmQgdGhl
IGxvY2sgdG8gdGhlIHRocmVhZCB0aGF0IHdhcworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
d2FpdGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJlY3RIYW5kb2ZmOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBsb2NrLnRyYW5zYWN0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChM
b2NrVHlwZSYgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSAmPSB+
bWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm1heUhhdmVNb3Jl
VGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgfD0gaGFzUGFy
a2VkQml0OworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGVudW0g
VG9rZW4geworICAgICAgICBCYXJnaW5nT3Bwb3J0dW5pdHksCisgICAgICAgIERpcmVjdEhhbmRv
ZmYKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6TG9ja0Fs
Z29yaXRobTsKKworI2VuZGlmIC8vIFdURl9Mb2NrQWxnb3JpdGhtX2gKKwpJbmRleDogU291cmNl
L1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCShyZXZpc2lvbiAyMDg2NTMp
CisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaW5jbHVkZSAiQ29uZGl0aW9uLmgiCiAjaW5jbHVk
ZSAiTG9jay5oIgogI2luY2x1ZGUgIlByaW50U3RyZWFtLmgiCisjaW5jbHVkZSA8Y2Zsb2F0Pgor
I2luY2x1ZGUgPGNtYXRoPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBX
VEYgewogCkBAIC0xMjgsNiArMTMxLDE3IEBAIHZvaWQgc2xlZXAoY29uc3QgVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXAKICAgICBmYWtlQ29uZGl0aW9uLndhaXRVbnRpbChmYWtlTG9jaywgdGltZSk7
CiB9CiAKK2Jvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUmIHRp
bWUpCit7CisgICAgLy8gQXZvaWQgZG9pbmcgbm93KCkuCisgICAgaWYgKCEodGltZSA+IHRpbWUu
d2l0aFNhbWVDbG9ja0FuZFJhd1NlY29uZHMoMCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoc3RkOjppc2luZih0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdGltZSA8PSB0aW1lLm5vd1dpdGhT
YW1lQ2xvY2soKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIApJbmRleDogU291cmNlL1dU
Ri93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsOCArMTM0LDEyIEBAIHByaXZhdGU6CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNs
ZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOwogCitXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYpOworCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpUaW1lV2l0aER5bmFtaWNDbG9ja1R5cGU7
Cit1c2luZyBXVEY6Omhhc0VsYXBzZWQ7Cit1c2luZyBXVEY6OnNsZWVwOwogCiAjZW5kaWYgLy8g
V1RGX1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294739</attachid>
            <date>2016-11-14 14:07:05 -0800</date>
            <delta_ts>2016-11-14 14:14:52 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>282605</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODY1MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA5OCw3ICsxMDA5OCw2IEBACiAJ
CQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUxRDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFy
c2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAv
KiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVE
QUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgSW5saW5l
QWNjZXNzOjpkdW1wQ2FjaGVTaXplc0FuZENyYXMKICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0pOwogCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gdmFsdWU7Ci0gICAgICAgIGppdC5s
b2FkOChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZz
ZXQoKSksIHZhbHVlKTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhi
YXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHZhbHVlKTsKICAgICAg
ICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGlu
Z1NoYXBlTWFzayksIHZhbHVlKTsKICAgICAgICAgaml0LnBhdGNoYWJsZUJyYW5jaDMyKAogICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgdmFsdWUsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3VzU2hhcGUpKTsKQEAgLTE1OCw3ICsxNTgsNyBA
QCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGxpbmtDb2RlSW5saW5lCiBib29sIElubGluZUFj
Y2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBY2Nlc3MoVk0mIHZtLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOwotCisgICAgCiAgICAgR1BSUmVnIGJhc2Ug
PSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmJhc2VHUFIpOwogICAgIEpTVmFs
dWVSZWdzIHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBA
QCBib29sIElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlBCiAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCB2YWx1ZS5wYXlsb2FkR1BSKCkpOwogICAgICAgICBzdG9yYWdlID0gdmFsdWUucGF5
bG9hZEdQUigpOwogICAgIH0KLQorICAgIAogICAgIGppdC5sb2FkVmFsdWUoCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNl
dCkpLCB2YWx1ZSk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBib29sIElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVBcnJheUxlbmd0aChWCiAgICAgSlNWYWx1ZVJlZ3MgdmFsdWUgPSBzdHViSW5mby52YWx1
ZVJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRjaCA9IGdldFNjcmF0Y2hSZWdpc3RlcihzdHViSW5m
byk7CiAKLSAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBqaXQubG9hZDgoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwg
c2NyYXRjaCk7CiAgICAgaml0LmFuZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJy
YXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHNjcmF0Y2gpOwogICAgIGF1dG8gYnJhbmNoVG9TbG93
UGF0aCA9IGppdC5wYXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgc2NyYXRjaCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYXJyYXktPmluZGV4aW5n
VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDExIEBAIGNsYXNzIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX2FsbG9j
YXRvcik7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3RydWN0dXJlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRpb25Qcm9maWxlLCBtX3N0cnVjdHVyZSk7
IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUsIG1faW5saW5lQ2FwYWNp
dHkpOyB9CiAKICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpCiAgICAgICAgIDogbV9hbGxv
Y2F0b3IoMCkKKyAgICAgICAgLCBtX2lubGluZUNhcGFjaXR5KDApCiAgICAgewogICAgIH0KIApA
QCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIW1fYWxsb2Nh
dG9yKTsKICAgICAgICAgQVNTRVJUKCFtX3N0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghbV9p
bmxpbmVDYXBhY2l0eSk7CiAKICAgICAgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAwOwog
ICAgICAgICBpZiAoaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA8IEpTRmluYWxPYmplY3Q6OmRlZmF1
bHRJbmxpbmVDYXBhY2l0eSgpKSB7CkBAIC05Niw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgICAg
ICBtX2FsbG9jYXRvciA9IGFsbG9jYXRvcjsKICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IGlubGluZUNhcGFj
aXR5OwogICAgIH0KIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkKQEAgLTEwNSwxMiArMTA5
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmU7CiAgICAgfQotICAgIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KCkgeyBy
ZXR1cm4gc3RydWN0dXJlKCktPmlubGluZUNhcGFjaXR5KCk7IH0KKyAgICB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSgpIHsgcmV0dXJuIG1faW5saW5lQ2FwYWNpdHk7IH0KIAogICAgIHZvaWQgY2xl
YXIoKQogICAgIHsKICAgICAgICAgbV9hbGxvY2F0b3IgPSAwOwogICAgICAgICBtX3N0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0gMDsKICAgICAgICAgQVNTRVJU
KGlzTnVsbCgpKTsKICAgICB9CiAKQEAgLTE0NSw2ICsxNTAsNyBAQCBwcml2YXRlOgogCiAgICAg
TWFya2VkQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsgLy8gUHJlY29tcHV0ZWQgdG8gbWFrZSB0aGlu
Z3MgZWFzaWVyIGZvciBnZW5lcmF0ZWQgY29kZS4KICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PiBtX3N0cnVjdHVyZTsKKyAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwNyw3ICs2MDcsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1
YXJkKAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBBcnJheUxlbmd0aDogewogICAg
ICAgICBBU1NFUlQoIXZpYVByb3h5KCkpOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKKyAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDMyKAogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6WmVybywgc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKQEAgLTEyNTcsMTIgKzEyNTcsMTMgQEAgdm9pZCBB
Y2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAgICAgICAgICAgIGppdC5l
bWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQ
UjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBz
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOworICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChyZWFsbG9jYXRpbmcpIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSByZWFsbG9jYXRpbmcgKGkuZS4gdGhlIG9s
ZCBzdHJ1Y3R1cmUvYnV0dGVyZmx5CiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGFk
IG91dC1vZi1saW5lIHByb3BlcnR5IHN0b3JhZ2UpLgotICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgb2xkU2l6ZSA9IHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwot
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaEdQUjMpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSID0gbmV3IHN0b3JhZ2UsIHNjcmF0
Y2hHUFIzID0gb2xkIHN0b3JhZ2UsCkBAIC0xMjgxLDYgKzEyODIsOSBAQCB2b2lkIEFjY2Vzc0Nh
c2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNp
emVvZih2b2lkKikpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0g
b2xkU2l6ZTsgb2Zmc2V0IDwgbmV3U2l6ZTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCisgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
MCksIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCAtc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUg
d2UgYXJlIGFsbG9jYXRpbmcgb3V0LW9mLWxpbmUgdXNpbmcgYW4gb3BlcmF0aW9uLgogICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGV4dHJhUmVnaXN0ZXJzVG9QcmVzZXJ2ZTsKQEAgLTEzNTMs
OCArMTM1Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAg
ICAgICAgICAgIC8vIFdlIHNldCB0aGUgbmV3IGJ1dHRlcmZseSBhbmQgdGhlIHN0cnVjdHVyZSBs
YXN0LiBEb2luZyBpdCB0aGlzIHdheSBlbnN1cmVzIHRoYXQKICAgICAgICAgICAgIC8vIHdoYXRl
dmVyIHdlIGhhZCBkb25lIHVwIHRvIHRoaXMgcG9pbnQgaXMgZm9yZ290dGVuIGlmIHdlIGNob29z
ZSB0byBicmFuY2ggdG8gc2xvdwogICAgICAgICAgICAgLy8gcGF0aC4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BSLCBiYXNlR1BSKTsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgdWludDMyX3Qgc3RydWN0dXJlQml0cyA9IGJpdHdpc2VfY2FzdDx1aW50MzJf
dD4obmV3U3RydWN0dXJlKCktPmlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDggQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgLy8gYnl0ZWNvZGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhp
cyBhcnJheWlmaWNhdGlvbiBiZWluZyByZWV4ZWN1dGVkLgogICAgICAgICAgICAgLy8gVGhhdCdz
IGZpbmUsIHNpbmNlIGFycmF5aWZpY2F0aW9uIGlzIG5vdCB1c2VyLXZpc2libGUuCiAgICAgICAg
ICAgICBqaXQtPm1faml0LmxvYWQ4KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG1fYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIG1fc3RydWN0
dXJlR1BSKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VH
UFIsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBtX3N0cnVjdHVyZUdQUik7CiAgICAgICAgICAgICBtX2JhZEluZGV4aW5nVHlwZUp1bXAuZmls
bCgKICAgICAgICAgICAgICAgICBqaXQsIGppdC0+anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9k
ZShtX3N0cnVjdHVyZUdQUiwgbV9hcnJheU1vZGUpKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04ODksNiArODg5LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAg
cmVhZChKU09iamVjdF9idXR0ZXJmbHkpOyAvLyBUaGlzIGlzIGEgc3RvcmUtc3RvcmUgZmVuY2Uu
CiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHdyaXRlKEpTQ2Vs
bF90eXBlSW5mb1R5cGUpOwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9GbGFncyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3
ICsxMTgsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2gx
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoMSwgYXJyYXlQcm9maWxl
LT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ4KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoMSwgU3RydWN0dXJlOjppbmRl
eGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
OChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdU
eXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihzY3JhdGNoMSwgc2NyYXRjaDIpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm9yMzIoc2NyYXRjaDIsIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1
dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2RlcygpKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNw
cAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1
ZSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaDEpOwogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNl
ZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhl
bHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3Jh
dGNoMSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gx
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoc2NyYXRj
aDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gyLCBBc3Nl
bWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5
TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsOSArNTA2LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIGlmIChMSUtFTFkoYmFzZVZh
bHVlLmlzQ2VsbCgpKSkgewogICAgICAgICBKU0NlbGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7CiAKLSAgICAgICAgaWYgKHByb3BlcnR5LmlzVUludDMyKCkpIHsKKyAgICAgICAgaWYgKHBy
b3BlcnR5LmlzVUludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZ2V0QnlWYWwoZXhlYywgYmFz
ZSwgcHJvcGVydHkuYXNVSW50MzIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkuaXNE
b3VibGUoKSkgeworICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pc0RvdWJsZSgpKSB7CiAgICAg
ICAgICAgICBkb3VibGUgcHJvcGVydHlBc0RvdWJsZSA9IHByb3BlcnR5LmFzRG91YmxlKCk7CiAg
ICAgICAgICAgICB1aW50MzJfdCBwcm9wZXJ0eUFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHByb3BlcnR5QXNEb3VibGUpOwogICAgICAgICAgICAgaWYgKHByb3BlcnR5QXNVSW50MzIg
PT0gcHJvcGVydHlBc0RvdWJsZSAmJiBpc0luZGV4KHByb3BlcnR5QXNVSW50MzIpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MTAsMTYgKzYxMCwzNCBAQCBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQogICAgIHJldHVybiBD
b21waWxhdGlvbktleShjb2RlQmxvY2stPmFsdGVybmF0aXZlKCksIG1vZGUpOwogfQogCi12b2lk
IFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcygpCit2b2lkIFBsYW46Om1hcmtDb2RlQmxvY2tzKFNs
b3RWaXNpdG9yJiBzbG90VmlzaXRvcikKIHsKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmlu
Z0dDKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMg
bG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCisgICAgLy8g
YW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFz
c3VtZSB0aGF0CisgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJp
bmcgR0MuCisKKyAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihjb2RlQmxvY2spOworICAgIHNsb3RWaXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQ
b2ludGVyKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgaWYgKHByb2ZpbGVkREZHQ29k
ZUJsb2NrKQorICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9p
bnRlcihwcm9maWxlZERGR0NvZGVCbG9jayk7Cit9CisKK3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJiB2bSkKK3sKKyAgICBpZiAoIWlzS25vd25Ub0JlTGl2ZUR1cmluZ0dDKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKICAgICAvLyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2
YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCiAgICAgLy8gYW4gZXhwbGlj
aXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0
CiAgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCiAK
LSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOwotICAg
IEhlYXA6OmhlYXAoY29kZUJsb2NrKS0+d3JpdGVCYXJyaWVyKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKKyAgICB2bS5oZWFw
LndyaXRlQmFycmllcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIGlmIChwcm9maWxl
ZERGR0NvZGVCbG9jaykKLSAgICAgICAgSGVhcDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jaykt
PndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CisgICAgICAgIHZtLmhlYXAud3Jp
dGVCYXJyaWVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBQbGFuOjpjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOCBA
QCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgQ29t
cGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsK
KyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCByZW1lbWJl
ckNvZGVCbG9ja3MoVk0mKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogICAg
IHZvaWQgY2FuY2VsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxMDIsNiArNDEwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgLy8gUmFyZSBkYXRhIGlzIG9ubHkgdXNlZCB0byBhY2Nlc3MgdGhlIGFsbG9j
YXRvciAmIHN0cnVjdHVyZQogICAgICAgICAvLyBXZSBjYW4gYXZvaWQgdXNpbmcgYW4gYWRkaXRp
b25hbCBHUFIgdGhpcyB3YXkKICAgICAgICAgR1BSUmVnIHJhcmVEYXRhR1BSID0gc3RydWN0dXJl
R1BSOworICAgICAgICBHUFJSZWcgaW5saW5lQ2FwYWNpdHlHUFIgPSByYXJlRGF0YUdQUjsKIAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKQEAgLTQxMTMsNiAr
NDExNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0
aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlR1BSKTsKICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIGFsbG9jYXRvckdQUikpOwogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRHUFIsIG51bGxwdHIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBUcnVzdGVkSW1tUHRy
KDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZS
YXJlRGF0YSgpKSwgcmFyZURhdGFHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmFyZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZklu
bGluZUNhcGFjaXR5KCkpLCBpbmxpbmVDYXBhY2l0eUdQUik7CisgICAgICAgIG1faml0LmVtaXRJ
bml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIGlubGluZUNhcGFjaXR5R1BSKTsKKyAg
ICAgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CiAKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1
bHRHUFIsIGNhbGxlZUdQUiwgbm9kZS0+aW5saW5lQ2FwYWNpdHkoKSkpOwogICAgICAgICAKQEAg
LTQxMzcsNiArNDE0Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxs
b2NhdG9yR1BSKTsKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxv
Y2F0b3JQdHIsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVk
SW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CisgICAgICAgIG1faml0LmVtaXRJbml0
aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogCiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0
LCByZXN1bHRHUFIsIHN0cnVjdHVyZSkpOwogICAgICAgICAKQEAgLTU5NjEsMTEgKzU5NjksMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QQogICAgIG1faml0LnN0
b3JlNjQoc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
Y3JhdGNoMkdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKICAgICBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKS5saW5rVG8obG9v
cCwgJm1faml0KTsKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIAorICAgIAog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAg
IAorICAgIAogICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0PEpTQXJyYXk+KHJlc3VsdEdQUiwgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQ
Uiwgc2xvd0Nhc2VzKTsKICAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzdGQ6Om1ha2VfdW5pcXVlPENhbGxBcnJheUFsbG9jYXRv
cldpdGhWYXJpYWJsZVNpemVTbG93UGF0aEdlbmVyYXRvcj4oCiAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgcmVzdWx0R1BSLAogICAgICAgICBzdHJ1
Y3R1cmUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QWxsb2NhdGVSYXdPYmplCiAgICAgaWYgKGFsbG9j
YXRvclB0cikgewogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRy
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwg
YWxsb2NhdG9yUHRyLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHN0b3Jh
Z2VHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBtX2ppdC5lbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgIH0gZWxzZQogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAK
QEAgLTE2Miw2ICsxNjMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRlUmF3
T2JqZQogICAgIAogICAgIGlmIChoYXNJbmRleGluZ0hlYWRlcikKICAgICAgICAgbV9qaXQuc3Rv
cmUzMihUcnVzdGVkSW1tMzIobnVtRWxlbWVudHMpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKKyAgICAKKyAg
ICBtX2ppdC5lbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2Uoc3RvcmFnZUdQUiwgc3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2Uo
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEdldExlbmd0aChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSwgR1BSUmVnIGxlbmd0aEdQUiwgYm9vbCBpbmNsdWRlVGhpcykK
QEAgLTgzOCw3ICs4NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5vZGUq
IG5vCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigp
OwotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgdGVtcEdQUik7CisgICAgICAgIG1faml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQ2VsbDo6aW5kZXhpbmdUeXBl
QW5kTWlzY09mZnNldCgpKSwgdGVtcEdQUik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAg
ICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCAwLAogICAgICAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1w
R1BSLCBub2RlLT5hcnJheU1vZGUoKSkpOwpAQCAtOTAyLDcgKzkwNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUqIG5vZGUKICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVy
ZSgpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9qaXQubG9hZDgoCi0gICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNl
dCgpKSwgdGVtcEdQUik7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAg
ICAgICAKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1v
ZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKICAgICB9CkBAIC0zOTMwLDYgKzM5MzUs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWFrZVJvcGUoTm9kCiAgICAgfQogICAg
IG1faml0LnN0b3JlMzIoYWxsb2NhdG9yR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSk7CiAgICAgCisgICAgbV9qaXQubXV0YXRv
ckZlbmNlKCk7CisgICAgCiAgICAgc3dpdGNoIChudW1PcEdQUnMpIHsKICAgICBjYXNlIDI6CiAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKQEAgLTM5NDMsNyArMzk1
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYWtlUm9wZShOb2QKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
ICAgICAKKyAgICAKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTYz
NTUsNiArNjM2Miw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgU3BlY3UK
ICAgICBtX2ppdC5zdG9yZVB0cihzY29wZUdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBvZmZzZXRPZlNjb3BlQ2hhaW4pKTsKICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1t
UHRyKGV4ZWN1dGFibGUpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldE9m
RXhlY3V0YWJsZSkpOwogICAgIG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0T2ZSYXJlRGF0YSkpOworICAgIAorICAg
IG1faml0Lm11dGF0b3JGZW5jZSgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TmV3RnVuY3Rpb24oTm9kZSogbm9kZSkKQEAgLTY1NDYsNiArNjU1NSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVBY3RpdmEKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKAogICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGUoU2NvcGVPZmZzZXQoaSkpKSk7CiAgICAgfQorICAgIAorICAgIG1f
aml0Lm11dGF0b3JGZW5jZSgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKQEAgLTY2MjUsNyArNjYzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKERp
cmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkpKSwgc2NyYXRjaDFHUFIp
OwogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KLSAgICAgICAgICAg
IAorICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZEpTT2JqZWN0PERp
cmVjdEFyZ3VtZW50cz4oCiAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMkdQUiwKICAgICAgICAg
ICAgIHNsb3dQYXRoKTsKQEAgLTY2NDAsNyArNjY1MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAgICAgCiAgICAgbV9qaXQuc3RvcmVQdHIoCiAgICAg
ICAgIFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgRGly
ZWN0QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyaWRlcygpKSk7Ci0gICAgICAgIAorICAgIAogICAg
IGlmIChsZW5ndGhJc0tub3duKSB7CiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKApAQCAtNjcwNSw2ICs2NzE2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZURpcmVjdAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAgICAgfQogICAgICAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAgICAg
CiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkBAIC02OTEzLDcgKzY5MjYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5vZGUqCiAKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0gICAgICAgIG1faml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgc2NyYXRjaDFHUFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBzY3JhdGNoMUdQUik7CiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKEludDMyU2hhcGUpLCBzY3JhdGNoMUdQUik7CiAKQEAgLTY5MzMsNyArNjk0Niw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTcHJlYWQoTm9kZSoKIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKIAotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhhcmd1bWVudCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNj
cmF0Y2gyR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDJH
UFIpOwogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2sp
LCBzY3JhdGNoMkdQUik7CiAgICAgICAgIGF1dG8gaXNEb3VibGVBcnJheSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgc2NyYXRjaDJHUFIsIFRydXN0ZWRJbW0zMihEb3Vi
bGVTaGFwZSkpOwogCkBAIC02OTY3LDYgKzY5ODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3ByZWFkKE5vZGUqCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGxlbmd0aEdQUikubGlua1RvKGxvb3BTdGFydCwgJm1faml0KTsK
ICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogCiAgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKG1f
aml0Lmp1bXAoKSwgdGhpcywgb3BlcmF0aW9uU3ByZWFkRmFzdEFycmF5LCByZXN1bHRHUFIsIGFy
Z3VtZW50KSk7CkBAIC03Mzg1LDExICs3NDAwLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBbGxvY2F0ZVByb3AKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAg
ICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0b3IsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwogICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6
VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEp
OworICAgIAorICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRpY19j
YXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKQorICAgICAgICBt
X2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwor
ICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIx
KSk7CiAKICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCk7CiAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0K
QEAgLTc0MzUsNiArNzQ1Niw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHIKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihu
ZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAg
CisgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0IDwgc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihuZXdTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpCisgICAgICAg
IG1faml0LnN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoMCksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNj
cmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSk7
CisKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjEs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKIApAQCAtNzQ0Myw3ICs3NDY3LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9m
KEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7CiAgICAgICAgIG1faml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAg
ICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgIAorICAgIG1faml0LnN0
b3JlQnV0dGVyZmx5KHNjcmF0Y2hHUFIxLCBiYXNlR1BSKTsKIAogICAgIHN0b3JhZ2VSZXN1bHQo
c2NyYXRjaEdQUjEsIG5vZGUpOwogfQpAQCAtNzczMSw2ICs3NzU2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU5ld1N0cmluZ09iagogICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRHUFIsIEpTV3JhcHBlck9iamVjdDo6aW50ZXJuYWxWYWx1ZU9mZnNldCgpICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7CiAjZW5kaWYKICAgICAK
KyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cihzbG93UGF0aENhbGwoCiAgICAgICAgIHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25OZXdTdHJp
bmdPYmplY3QsIHJlc3VsdEdQUiwgb3BlcmFuZEdQUiwgbm9kZS0+c3RydWN0dXJlKCkpKTsKICAg
ICAKQEAgLTc4MDgsNiArNzgzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdU
eXBlZEFycmEKICAgICAgICAgVHJ1c3RlZEltbTMyKEZhc3RUeXBlZEFycmF5KSwKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zm
c2V0T2ZNb2RlKCkpKTsKICAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKKyAgICAKICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoCiAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSh0eXBlKSwKICAgICAg
ICAgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUsIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKQEAgLTg4NzYs
NyArODkwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIKICAg
ICBpZiAoaXNGZW5jZWQpIHsKICAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2go
YmFzZUdQUiwgc2NyYXRjaDFHUFIpKTsKICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vRmVuY2UgPSBtX2ppdC5qdW1wSWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQo
KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm9GZW5jZSA9IG1faml0Lmp1bXBJZk11dGF0
b3JGZW5jZU5vdE5lZWRlZCgpOwogICAgICAgICBtX2ppdC5tZW1vcnlGZW5jZSgpOwogICAgICAg
ICBvay5hcHBlbmQobV9qaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CiAg
ICAgICAgIG5vRmVuY2UubGluaygmbV9qaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgp
KQogICAgICAgICAgICAgbGV2ZWwgPSBGVEw6OkNhbkNvbXBpbGU7Ci0KKyAgICAgICAgCiAgICAg
ICAgIG1fZ3JhcGguZW5zdXJlTmF0dXJhbExvb3BzKCk7CiAgICAgICAgIE5hdHVyYWxMb29wcyYg
bmF0dXJhbExvb3BzID0gKm1fZ3JhcGgubV9uYXR1cmFsTG9vcHM7CiAgICAgICAgIEhhc2hNYXA8
Y29uc3QgTmF0dXJhbExvb3AqLCB1bnNpZ25lZD4gbmF0dXJhbExvb3BUb0xvb3BIaW50ID0gYnVp
bGROYXR1cmFsTG9vcFRvTG9vcEhpbnRNYXAobmF0dXJhbExvb3BzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRGR1dvcmts
aXN0LmgiCiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLQogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkRGR0xvbmdMaXZlZFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHU2FmZXBvaW50Lmgi
CkBAIC0zOCw2ICszNiw4IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAor
I2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdDo6VGhyZWFkQm9keSA6IHB1Ymxp
YyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgogICAgIFRocmVhZEJvZHkoY29uc3QgTG9ja0hv
bGRlciYgbG9ja2VyLCBXb3JrbGlzdCYgd29ya2xpc3QsIFRocmVhZERhdGEmIGRhdGEsIEJveDxM
b2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24sIGlu
dCByZWxhdGl2ZVByaW9yaXR5KQpAQCAtMzQ5LDYgKzM0OSwxNyBAQCB2b2lkIFdvcmtsaXN0Ojpj
b21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mCiAgICAgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0o
dm0pOwogfQogCit2b2lkIFdvcmtsaXN0OjptYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNp
dG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKKyAg
ICBmb3IgKFBsYW5NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3BsYW5zLmJlZ2luKCk7IGl0ZXIgIT0g
bV9wbGFucy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgaWYgKHBsYW4tPnZtICE9ICZ2bSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBwbGFuLT5tYXJrQ29kZUJsb2NrcyhzbG90VmlzaXRvcik7CisgICAgfQor
fQorCiB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCptX2xvY2spOwpAQCAtMzU2LDcgKzM2Nyw3IEBAIHZvaWQgV29ya2xp
c3Q6OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0KICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXIt
PnZhbHVlLmdldCgpOwogICAgICAgICBpZiAocGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHBsYW4tPnJlbWVtYmVyQ29kZUJsb2NrcygpOworICAgICAgICBw
bGFuLT5yZW1lbWJlckNvZGVCbG9ja3Modm0pOwogICAgIH0KIH0KIApAQCAtNTUzLDYgKzU2NCwx
NCBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQogCit2b2lk
IG1hcmtDb2RlQmxvY2tzKFZNJiB2bSwgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAg
IGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgeworICAg
ICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OmV4aXN0aW5nV29ya2xpc3RG
b3JJbmRleE9yTnVsbChpKSkKKyAgICAgICAgICAgIHdvcmtsaXN0LT5tYXJrQ29kZUJsb2Nrcyh2
bSwgc2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0m
IHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsg
aS0tOykgewpAQCAtNTYxLDcgKzU4MCwyMiBAQCB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYg
dm0pCiAgICAgfQogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisjZWxzZSAvLyBFTkFC
TEUoREZHX0pJVCkKKwordm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mKQoreworfQorCit2
b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZpc2l0b3ImKQoreworfQorCit2b2lkIHJlbWVt
YmVyQ29kZUJsb2NrcyhWTSYpCit7Cit9CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsNiBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2lmIEVOQUJMRShERkdfSklUKQotCiAjaW5jbHVkZSAiREZHUGxh
bi5oIgogI2luY2x1ZGUgIkRGR1RocmVhZERhdGEuaCIKICNpbmNsdWRlIDx3dGYvQXV0b21hdGlj
VGhyZWFkLmg+CkBAIC00Miw2ICs0MCw4IEBAIGNsYXNzIFNsb3RWaXNpdG9yOwogCiBuYW1lc3Bh
Y2UgREZHIHsKIAorI2lmIEVOQUJMRShERkdfSklUKQorCiBjbGFzcyBXb3JrbGlzdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdvcmtsaXN0PiB7CiBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7IE5vdEtu
b3duLCBDb21waWxpbmcsIENvbXBpbGVkIH07CkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAg
ICAvLyB3b3JrbGlzdC0+Y29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0odm0pOwogICAgIHZvaWQg
Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7CiAKKyAgICB2b2lkIG1hcmtDb2RlQmxvY2tzKFZN
JiwgU2xvdFZpc2l0b3ImKTsKICAgICB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhWTSYpOwogCiAg
ICAgdm9pZCB3YWl0VW50aWxBbGxQbGFuc0ZvclZNQXJlUmVhZHkoVk0mKTsKQEAgLTE2Myw5ICsx
NjQsMTEgQEAgaW5saW5lIFdvcmtsaXN0JiBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZQogICAgIHJl
dHVybiAqcmVzdWx0OwogfQogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKIHZvaWQgY29t
cGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Cit2b2lkIG1hcmtDb2RlQmxvY2tzKFZNJiwgU2xvdFZp
c2l0b3ImKTsKIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
Y3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNCArNzMsMTQg
QEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwbwogICAgICwgYWJzb2x1
dGUoJnJvb3QsICJhYnNvbHV0ZSIpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxp
Y2l0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBTdHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4K
LSAgICBSRUxFQVNFX0FTU0VSVCghKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6
ZW9mKGludDMyX3QpIC0gMSkpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdU
eXBlLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgpKTsKLSAgICBS
RUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlLm9mZnNldCgpICsgMiA9PSBKU0NlbGxf
dHlwZUluZm9GbGFncy5vZmZzZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4
aW5nVHlwZS5vZmZzZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSAmIChz
aXplb2YoaW50MzJfdCkgLSAxKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKEpTQ2VsbF9pbmRleGlu
Z1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMSA9PSBKU0NlbGxfdHlwZUluZm9UeXBlLm9mZnNldCgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQo
KSArIDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNT
RVJUKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLm9mZnNldCgpICsgMyA9PSBKU0NlbGxfY2Vs
bFN0YXRlLm9mZnNldCgpKTsKIAogICAgIEpTQ2VsbF9zdHJ1Y3R1cmVJRC5jaGFuZ2VQYXJlbnQo
JkpTQ2VsbF9oZWFkZXIpOwogICAgIEpTQ2VsbF91c2VmdWxCeXRlcy5jaGFuZ2VQYXJlbnQoJkpT
Q2VsbF9oZWFkZXIpOwotICAgIEpTQ2VsbF9pbmRleGluZ1R5cGUuY2hhbmdlUGFyZW50KCZKU0Nl
bGxfdXNlZnVsQnl0ZXMpOworICAgIEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLmNoYW5nZVBh
cmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9UeXBlLmNoYW5n
ZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5j
aGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5j
aGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CkBAIC0xMzUsMjEgKzEzNSwyNyBAQCB2
b2lkIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OmNvbXB1dGVSYW5nCiAgICAgICAgIGRhdGFMb2co
IkFic3RyYWN0IEhlYXAgUmVwb3NpdG9yeTpcbiIpOwogICAgICAgICByb290LmRlZXBEdW1wKFdU
Rjo6ZGF0YUZpbGUoKSk7CiAgICAgfQorICAgIAorICAgIGF1dG8gcmFuZ2VGb3IgPSBbJl0gKGNv
bnN0IEFic3RyYWN0SGVhcCogaGVhcCkgLT4gSGVhcFJhbmdlIHsKKyAgICAgICAgaWYgKGhlYXAp
CisgICAgICAgICAgICByZXR1cm4gaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIEhlYXBS
YW5nZSgpOworICAgIH07CiAKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZv
ck1lbW9yeSkKLSAgICAgICAgZW50cnkudmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5zZXRSYW5n
ZShlbnRyeS5oZWFwLT5yYW5nZSgpKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5zZXRSYW5nZShyYW5nZUZvcihlbnRyeS5oZWFwKSk7CiAgICAgZm9yIChIZWFwRm9y
VmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2FsbFJlYWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5h
czxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAg
ICAgICAgZW50cnkudmFsdWUtPmFzPENDYWxsVmFsdWU+KCktPmVmZmVjdHMucmVhZHMgPSByYW5n
ZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZv
ckNDYWxsV3JpdGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigpLT5lZmZl
Y3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5h
czxDQ2FsbFZhbHVlPigpLT5lZmZlY3RzLndyaXRlcyA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwog
ICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0Y2hwb2ludFJlYWQpCi0g
ICAgICAgIGVudHJ5LnZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMucmVhZHMg
PSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2lu
dFZhbHVlPigpLT5lZmZlY3RzLnJlYWRzID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7CiAgICAgZm9y
IChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JQYXRjaHBvaW50V3JpdGUpCi0gICAgICAg
IGVudHJ5LnZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gZW50
cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1
ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhl
YXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVhcEZvckZlbmNlUmVhZCkKLSAgICAgICAgZW50cnkudmFs
dWUtPmFzPEZlbmNlVmFsdWU+KCktPnJlYWQgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOworICAgICAg
ICBlbnRyeS52YWx1ZS0+YXM8RmVuY2VWYWx1ZT4oKS0+cmVhZCA9IHJhbmdlRm9yKGVudHJ5Lmhl
YXApOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yRmVuY2VXcml0ZSkK
LSAgICAgICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRlID0gZW50cnkuaGVh
cC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPndyaXRl
ID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
MTEgKzU5LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhK
U0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSBcCiAgICAgbWFjcm8oSlNDZWxsX2NlbGxTdGF0ZSwgSlNDZWxsOjpjZWxsU3RhdGVPZmZz
ZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9oZWFkZXIsIDApIFwKLSAgICBtYWNybyhKU0NlbGxf
aW5kZXhpbmdUeXBlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8o
SlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3N0cnVjdHVyZUlELCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9GbGFncywgSlNDZWxsOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfdHlwZUluZm9UeXBlLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSBcCi0gICAgbWFjcm8oSlNDZWxsX3VzZWZ1bEJ5
dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNDZWxsX3Vz
ZWZ1bEJ5dGVzLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1h
Y3JvKEpTRnVuY3Rpb25fZXhlY3V0YWJsZSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxl
KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX3Njb3BlLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSkgXAogICAgIG1hY3JvKEpTRnVuY3Rpb25fcmFyZURhdGEsIEpTRnVuY3Rpb246
Om9mZnNldE9mUmFyZURhdGEoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVENvZGUuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIEpJVENv
ZGU6On5KSVRDb2RlKCkKICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOwogICAgICAgICBkYXRh
TG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAgICAgICAgIGRhdGFMb2coY29tbWEsIG1fYXJpdHlDaGVj
a0VudHJ5cG9pbnQpOworICAgICAgICBkYXRhTG9nKCJcbiIpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzg2LDcgKzI3ODYsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1fZ3JhcGgubV9w
bGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKLQorICAgICAgICAKICAgICAgICAgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CiAgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwpAQCAtMzk0NSw2ICszOTQ1
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW2ldKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgbXV0YXRvckZlbmNlKCk7CisgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtNDAwMSw2ICs0MDAzLDggQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZhc3RPYmplY3Qs
IG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3JhcmVEYXRh
KTsKICAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgpOworICAgICAgICAKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTQxMjksNiArNDEz
Myw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhlbmQsIGxhc3ROZXh0
KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbXV0YXRvckZlbmNlKCk7CisgICAgICAg
IAogICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIApAQCAtNDE4Miw2ICs0
MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChj
dXJyZW50T2Zmc2V0LCBtX291dC5jb25zdEludDMyKDApKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShsb29wU3RhcnQpKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAg
ICAgIHNldEpTVmFsdWUoYXJyYXkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC00MjE2LDYgKzQyMjMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgp
CiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0
dXJlKCkpKTsKKyAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZU5ld0FycmF5KCkKQEAgLTQyNjgsNiArNDI3Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMu
YXJyYXkpOworICAgICAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00Mzc2LDYgKzQzODUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgbXV0YXRvckZlbmNl
KCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTQ0MTcsNyArNDQyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCi0gICAgICAgICAgICBM
VmFsdWUgaW5kZXhpbmdTaGFwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGFyZ3VtZW50LCBtX2hl
YXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nU2hh
cGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhp
bmdUeXBlQW5kTWlzYyk7CiAgICAgICAgICAgICBpbmRleGluZ1NoYXBlID0gbV9vdXQuYml0QW5k
KGluZGV4aW5nU2hhcGUsIG1fb3V0LmNvbnN0SW50MzIoSW5kZXhpbmdTaGFwZU1hc2spKTsKICAg
ICAgICAgICAgIExWYWx1ZSBpc09LSW5kZXhpbmdUeXBlID0gbV9vdXQuYmVsb3dPckVxdWFsKAog
ICAgICAgICAgICAgICAgIG1fb3V0LnN1YihpbmRleGluZ1NoYXBlLCBtX291dC5jb25zdEludDMy
KEludDMyU2hhcGUpKSwKQEAgLTQ0ODYsNiArNDQ5Niw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAg
cmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICAg
ICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3Vs
dCA9IHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNwcmVhZEdlbmVyaWMp
LCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpOwogCkBAIC00NTE4LDYgKzQ1MjksNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmZvckluZGV4aW5nVHlwZShtX25vZGUtPmlu
ZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAor
ICAgICAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGFycmF5
VmFsdWVzLmFycmF5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDU0Miw2
ICs0NTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcHVibGljTGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhp
bmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpKS5hcnJheSk7CisgICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ2MDksNiArNDYyMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHNpemUsIGZhc3RSZXN1bHRW
YWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwogICAgICAgICAgICAgbV9v
dXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSwgZmFzdFJlc3VsdFZh
bHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwogICAgICAgICAgICAgCisgICAg
ICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RS
ZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIApAQCAtNDg1MSw2ICs0ODY1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19mbGFncyk7CiAgICAgICAgIG1fb3V0
LnN0b3JlMzIobGVuZ3RoLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKICAgICAg
ICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgCkBAIC01MjI5LDYgKzUyNDQsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgdmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwogICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgICAgICAgICAgICAg
Y29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAog
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CkBAIC01MjM2LDcgKzUyNTIsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCiAgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQub2Zmc2V0KCksCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKTsKLQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVBy
b3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlh
bnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJl
Rm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7CkBAIC01MjQ0LDcgKzUyNjQsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTgxMDMsNiArODEy
MiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGhh
dmVCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdEJ1dHRlcmZseVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzcGxhdFdvcmRzKAorICAgICAgICAgICAgICAgICAg
ICBmYXN0QnV0dGVyZmx5VmFsdWUsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoLXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAtIDEpLAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKC0xKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50
NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSk7CiAKICAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwgZmFzdEJ1dHRlcmZseVZhbHVlLCBtX2hl
YXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwogICAgICAgICAgICAgICAgIApAQCAtODI1Nyw3
ICs4MjgyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9i
amVjdChzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8v
IERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAorCisgICAgICAgICAgICBCaXRWZWN0b3Igc2V0SW5saW5lT2Zmc2V0czsKICAgICAgICAg
ICAgIGZvciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGll
c0NvbmN1cnJlbnRseSgpKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0
YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIFByb21v
dGVkTG9jYXRpb25EZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsK
QEAgLTgyNjYsMTEgKzgyOTIsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaWRlbnRpZmllcnMoKVtkZXNjcmlwdG9yLmluZm8oKV0gIT0gZW50cnkua2V5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGlzSW5saW5lT2Zmc2V0KGVudHJ5Lm9m
ZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBi
YXNlOworICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoZW50cnkub2Zmc2V0
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5saW5lT2Zmc2V0cy5zZXQoZW50cnku
b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBvYmplY3Q7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJ1dHRl
cmZseTsKICAgICAgICAgICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2Us
IGRlc2NyaXB0b3IuaW5mbygpLCBlbnRyeS5vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNldElubGluZU9mZnNldHMuZ2V0KGkpKQorICAgICAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgbV9vdXQuYWRkcmVzcyhtX2hlYXBz
LnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShp
KSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKG91dGVy
Q29udGludWF0aW9uKTsKQEAgLTgyODEsNiArODMxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7
CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIHJlc3VsdHMpKTsK
KyAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlTWF0ZXJp
YWxpemVDcmVhdGVBY3RpdmF0aW9uKCkKQEAgLTgzNTYsNiArODM5Miw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAg
ICAgc2V0SlNWYWx1ZShhY3RpdmF0aW9uKTsKICAgICB9CiAKQEAgLTg5MzQsNyArODk3MSw4IEBA
IHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGluaXRMb29wKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG9yaWdpbmFsSW5kZXggPSBtX291dC5hbmNob3IoZW5kKTsKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgb3JpZ2luYWxQb2ludGVyID0gbV9vdXQuYW5jaG9yKGJhc2UpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBvcmlnaW5hbFBvaW50ZXIgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291
dC5hZGQoYmFzZSwgbV9vdXQuc2hsKG1fb3V0LnNpZ25FeHQzMlRvUHRyKGJlZ2luKSwgbV9vdXQu
Y29uc3RJbnQzMigzKSkpKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGVu
ZCwgYmVnaW4pLCB1bnN1cmUoaW5pdExvb3ApLCB1bnN1cmUoaW5pdERvbmUpKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluaXRMb29wLCBpbml0RG9uZSk7CkBAIC04OTYzLDcg
KzkwMDEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAg
ICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLWluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSAtIDEpLCBtX291dC5jb25zdEludDMyKC0xKSwKKyAgICAgICAgICAgIG1f
b3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCkpOworICAgICAg
ICAKKyAgICAgICAgc2V0QnV0dGVyZmx5KHJlc3VsdCwgb2JqZWN0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC04OTkxLDcgKzkwMzUsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnBy
b3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVj
dCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgc3BsYXRXb3JkcygKKyAg
ICAgICAgICAgIHJlc3VsdCwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoLW5ld1NpemUg
LSAxKSwgbV9vdXQuY29uc3RJbnQzMigtb2xkU2l6ZSAtIDEpLAorICAgICAgICAgICAgbV9vdXQu
aW50NjRaZXJvLCBtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSk7CisgICAgICAgIAor
ICAgICAgICBzZXRCdXR0ZXJmbHkocmVzdWx0LCBvYmplY3QpOwogICAgICAgICAKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC05ODYxLDYgKzk5MTAsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgTFZhbHVlIGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0
ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgc2xvd1BhdGgpOworICAgICAg
ICBzcGxhdFdvcmRzKAorICAgICAgICAgICAgcmVzdWx0LAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihKU0ZpbmFsT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSAvIDgpLAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihKU0ZpbmFsT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSAvIDggKyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpLAorICAgICAgICAgICAg
bV9vdXQuaW50NjRaZXJvLAorICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVt
YmVyKCkpOwogICAgICAgICBtX291dC5zdG9yZVB0cihidXR0ZXJmbHksIHJlc3VsdCwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAg
LTExOTQzLDcgKzExOTk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBM
VmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYyk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3
aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6
T3JpZ2luYWxBcnJheToKQEAgLTEyNDM2LDcgKzEyNDkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCiAgICAgICAgICAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGZW5jZWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5j
ZSA9IGppdC5qdW1wSWZCYXJyaWVyU3RvcmVMb2FkRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbm9GZW5jZSA9IGppdC5qdW1w
SWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
aXQubWVtb3J5RmVuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9u
ZUp1bXBzLmFwcGVuZChqaXQuYmFycmllckJyYW5jaFdpdGhvdXRGZW5jZShiYXNlR1BSKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9GZW5jZS5saW5rKCZqaXQpOwpAQCAtMTI0OTcs
NiArMTI1NTIsNjQgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNlKCZt
X2hlYXBzLnJvb3QsIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAu
YWRkcmVzc09mTXV0YXRvclNob3VsZEJlRmVuY2VkKCkpKSwKKyAgICAgICAgICAgIHJhcmVseShz
bG93UGF0aCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBtX291dC5mZW5jZSgmbV9o
ZWFwcy5yb290LCBudWxscHRyKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QnV0dGVyZmx5KExWYWx1ZSBidXR0ZXJmbHksIExW
YWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICBpZiAoaXNYODYoKSkgeworICAgICAgICAgICAg
bV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgICAgICBtX291dC5z
dG9yZVB0cihidXR0ZXJmbHksIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwor
ICAgICAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGZh
c3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGgg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoZmFzdFBhdGgpOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQu
YWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSksCisg
ICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3Rv
cmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuZmVuY2UoJm1faGVh
cHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgb2Jq
ZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIG1fb3V0LmZlbmNlKCZt
X2hlYXBzLnJvb3QsIG51bGxwdHIpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgogICAgIExWYWx1ZSB2
bUNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmls
ZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxl
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBqaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKLSAgICAgICAgICAgICAgICBqaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSks
IEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAgICAgaml0
LmxzaGlmdDMyKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAgICAgICAg
ICAgaml0Lm9yMzIoR1BSSW5mbzo6cmVnVDIsIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJl
c3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3
LDYgKzM2NywxMSBAQCBMVmFsdWUgT3V0cHV0OjpzaWduRXh0MzJUbzY0KExWYWx1ZSB2YWx1CiAg
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNFeHQz
Miwgb3JpZ2luKCksIHZhbHVlKTsKIH0KIAorTFZhbHVlIE91dHB1dDo6c2lnbkV4dDMyVG9QdHIo
TFZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBzaWduRXh0MzJUbzY0KHZhbHVlKTsKK30KKwog
TFZhbHVlIE91dHB1dDo6emVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpCiB7CiAgICAg
aWYgKHZhbHVlLT50eXBlKCkgPT0gdHlwZSkKQEAgLTQ0Niw5ICs0NTEsMTIgQEAgdm9pZCBPdXRw
dXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQbwogICAgIG1faGVhcHMtPmRlY29yYXRlTWVt
b3J5KHBvaW50ZXIuaGVhcCgpLCBzdG9yZSk7CiB9CiAKLUZlbmNlVmFsdWUqIE91dHB1dDo6ZmVu
Y2UoKQorRmVuY2VWYWx1ZSogT3V0cHV0OjpmZW5jZShjb25zdCBBYnN0cmFjdEhlYXAqIHJlYWQs
IGNvbnN0IEFic3RyYWN0SGVhcCogd3JpdGUpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxGZW5jZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpKTsKKyAgICBGZW5jZVZhbHVlKiByZXN1
bHQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7Cisg
ICAgbV9oZWFwcy0+ZGVjb3JhdGVGZW5jZVJlYWQocmVhZCwgcmVzdWx0KTsKKyAgICBtX2hlYXBz
LT5kZWNvcmF0ZUZlbmNlV3JpdGUod3JpdGUsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIg
cG9pbnRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc3LDYgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgZG91Ymxl
VG9VSW50KExWYWx1ZSk7CiAKICAgICBMVmFsdWUgc2lnbkV4dDMyVG82NChMVmFsdWUpOworICAg
IExWYWx1ZSBzaWduRXh0MzJUb1B0cihMVmFsdWUpOwogICAgIExWYWx1ZSB6ZXJvRXh0KExWYWx1
ZSwgTFR5cGUpOwogICAgIExWYWx1ZSB6ZXJvRXh0UHRyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
emVyb0V4dCh2YWx1ZSwgQjM6OkludDY0KTsgfQogICAgIExWYWx1ZSBpbnRUb0RvdWJsZShMVmFs
dWUpOwpAQCAtMTg5LDcgKzE5MCw3IEBAIHB1YmxpYzoKIAogICAgIExWYWx1ZSBsb2FkKFR5cGVk
UG9pbnRlciwgTFR5cGUpOwogICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIpOwot
ICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZSgpOworICAgIEIzOjpGZW5jZVZhbHVlKiBmZW5jZShj
b25zdCBBYnN0cmFjdEhlYXAqIHJlYWQsIGNvbnN0IEFic3RyYWN0SGVhcCogd3JpdGUpOwogCiAg
ICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7CiAgICAgTFZhbHVlIGxvYWQ4
WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
ZWxsU3RhdGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ2VsbFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE0ICs0MCw4IEBAIGVudW0gY2xh
c3MgQ2VsbFN0YXRlIDogdWludDhfdCB7CiAgICAgLy8gVGhlIG9iamVjdCBpcyBpbiBlZGVuLiBE
dXJpbmcgR0MsIHRoaXMgbWVhbnMgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbiBtYXJrZWQg
eWV0LgogICAgIE5ld1doaXRlID0gMSwKIAotICAgIC8vIFRoZSBvYmplY3QgaXMgZ3JleSAtIGku
ZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4gdGhp
cyBHQyB0aGF0IHdlIGFyZQotICAgIC8vIGdvaW5nIHRvIHNjYW4gaXQuIElmIHRoaXMgaXMgYW4g
ZWRlbiBHQywgdGhpcyBhbHNvIG1lYW5zIHRoYXQgdGhlIG9iamVjdCBpcyBpbiBlZGVuLgotICAg
IE5ld0dyZXkgPSAyLAotCi0gICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxs
IGJlIHNjYW5uZWQgLSBidXQgaXQgZWl0aGVyIGJlbG9uZ3MgdG8gb2xkIGdlbiAoaWYgdGhpcyBp
cyBlZGVuCi0gICAgLy8gR0MpIG9yIGl0IGlzIGdyZXkgYSBzZWNvbmQgdGltZSBpbiB0aGlzIGN1
cnJlbnQgR0MgKGJlY2F1c2UgYSBjb25jdXJyZW50IHN0b3JlIGJhcnJpZXIgcmVxdWVzdGVkCi0g
ICAgLy8gcmUtZ3JleWluZykuCi0gICAgT2xkR3JleSA9IDMKKyAgICAvLyBUaGUgb2JqZWN0IGlz
IGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZC4KKyAgICBHcmV5ID0gMiwKIH07CiAKIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBibGFja1RocmVzaG9sZCA9IDA7IC8vIHggPD0gYmxhY2tUaHJl
c2hvbGQgbWVhbnMgeCBpcyBBbnRocmFjaXRlT3JCbGFjay4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw4IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Eb3VibHlM
aW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
QEAgLTE2MiwzICsxNjQsNCBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzgsNiArNzgsMzUgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NsYXNzIEhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGUgeworcHVibGljOgorICAgIFJlc3VtZVRo
ZVdvcmxkU2NvcGUoSGVhcCYgaGVhcCkKKyAgICAgICAgOiBtX2hlYXAoaGVhcCkKKyAgICB7Cisg
ICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEdDKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9oZWFwLm1fc3RvcFRpbWUpLm1pbGxp
c2Vjb25kcygpLCAiIG1zLi4uXVxuIik7CisgICAgICAgIAorICAgICAgICBtX2hlYXAucmVzdW1l
VGhlV29ybGQoKTsKKyAgICB9CisgICAgCisgICAgflJlc3VtZVRoZVdvcmxkU2NvcGUoKQorICAg
IHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjp1c2VDb25jdXJyZW50R0MoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1faGVhcC5zdG9wVGhlV29ybGQoKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygi
W0dDOiAiKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVhcDsKK307CisK
IG5hbWVzcGFjZSB7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VIZWFwU2l6ZSA9IDMyICog
TUI7IC8vIEFib3V0IDEuNVggdGhlIGF2ZXJhZ2Ugd2VicGFnZS4KQEAgLTI0NCw3ICsyNzMsOCBA
QCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2V4dHJhTWVt
b3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBt
X21hY2hpbmVUaHJlYWRzKHRoaXMpCi0gICAgLCBtX3Nsb3RWaXNpdG9yKCp0aGlzKQorICAgICwg
bV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhp
cykpCisgICAgLCBtX211dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tB
cnJheT4oKSkKICAgICAsIG1faGFuZGxlU2V0KHZtKQogICAgICwgbV9jb2RlQmxvY2tzKHN0ZDo6
bWFrZV91bmlxdWU8Q29kZUJsb2NrU2V0PigpKQogICAgICwgbV9qaXRTdHViUm91dGluZXMoc3Rk
OjptYWtlX3VuaXF1ZTxKSVRTdHViUm91dGluZVNldD4oKSkKQEAgLTI2Niw2ICsyOTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKEZPVU5EQVRJT04p
CiAgICAgLCBtX2RlbGF5ZWRSZWxlYXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwg
bV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJh
eT4oKSkKKyAgICAsIG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1h
cmtTdGFja0FycmF5PigpKQogICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBIZWxwZXJQb29sKCkp
CiAgICAgLCBtX3RocmVhZExvY2soQm94PExvY2s+OjpjcmVhdGUoKSkKICAgICAsIG1fdGhyZWFk
Q29uZGl0aW9uKEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6Y3JlYXRlKCkpCkBAIC0yODEsNiAr
MzEzLDExIEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKIAogSGVhcDo6
fkhlYXAoKQogeworICAgIGZvciAoYXV0byYgc2xvdFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzKQorICAgICAgICBzbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAgbV9tdXRhdG9yTWFy
a1N0YWNrLT5jbGVhcigpOworICAgIAogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9jayA6IG1fbG9n
aWNhbGx5RW1wdHlXZWFrQmxvY2tzKQogICAgICAgICBXZWFrQmxvY2s6OmRlc3Ryb3koKnRoaXMs
IGJsb2NrKTsKIH0KQEAgLTQxNiwxMiArNDUzLDEyIEBAIHZvaWQgSGVhcDo6YWRkUmVmZXJlbmNl
KEpTQ2VsbCogY2VsbCwgQXIKIAogdm9pZCBIZWFwOjpoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKQog
ewotICAgIG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgbV9jb2xs
ZWN0b3JTbG90VmlzaXRvci0+aGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiB9CiAKIHZvaWQgSGVh
cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpCiB7Ci0gICAgbV9zbG90VmlzaXRv
ci5maW5hbGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CisgICAgbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+ZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygpOwogfQogCiB2b2lkIEhl
YXA6OndpbGxTdGFydEl0ZXJhdGluZygpCkBAIC00MzksMTE3ICs0NzYsMTY0IEBAIHZvaWQgSGVh
cDo6Y29tcGxldGVBbGxKSVRQbGFucygpCiAjaWYgRU5BQkxFKEpJVCkKICAgICBKSVRXb3JrbGlz
dDo6aW5zdGFuY2UoKS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSk7CiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBERkc6OmNvbXBsZXRlQWxsUGxhbnNGb3JW
TSgqbV92bSk7Ci0jZW5kaWYKIH0KIAotdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3Rh
cnRUaW1lKQordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCiB7
Ci0gICAgVGltaW5nU2NvcGUgbWFya1Jvb3RzVGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjptYXJr
Um9vdHMiKTsKKyAgICBUaW1pbmdTY29wZSBtYXJrVG9GaXhwb2ludFRpbWluZ1Njb3BlKCp0aGlz
LCAiSGVhcDo6bWFya1RvRml4cG9pbnQiKTsKICAgICAKLSAgICBIZWFwUm9vdFZpc2l0b3IgaGVh
cFJvb3RWaXNpdG9yKG1fc2xvdFZpc2l0b3IpOworICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9v
dFZpc2l0b3IoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogICAgIAotICAgIHsKLSAgICAgICAg
VGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtS
b290cyBiZWZvcmUgY29udmVyZ2VuY2UiKTsKKyAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKSB7CisgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsK
KyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Y2xlYXJNYXJrU3RhY2tzKCk7CisgICAg
ICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOwotI2VuZGlmCisg
ICAgYmVnaW5NYXJraW5nKCk7CiAKLSNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCi0gICAg
ICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92bS0+c2FtcGxp
bmdQcm9maWxlcigpKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBvd24g
dGhlIGxvY2sgZnJvbSBub3cgdW50aWwgd2UncmUgZG9uZQotICAgICAgICAgICAgLy8gbWFya2lu
ZyB0aGUgU2FtcGxpbmdQcm9maWxlcidzIGRhdGEgYmVjYXVzZSBvbmNlIHdlIHZlcmlmeSB0aGUK
LSAgICAgICAgICAgIC8vIFNhbXBsaW5nUHJvZmlsZXIncyBzdGFjayB0cmFjZXMsIHdlIGRvbid0
IHdhbnQgaXQgdG8gYWNjdW11bGF0ZQotICAgICAgICAgICAgLy8gbW9yZSBzdGFjayB0cmFjZXMg
YmVmb3JlIHdlIGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgaXQuCi0gICAgICAgICAgICAvLyBUaGlz
IGxvY2sgaXMgcmVsZWFzZWQgaW5zaWRlIHZpc2l0U2FtcGxpbmdQcm9maWxlcigpLgotICAgICAg
ICAgICAgc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmxvY2soKTsKLSAgICAgICAgICAgIHNh
bXBsaW5nUHJvZmlsZXItPnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMoKTsKLSAgICAgICAg
fQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICBtX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKIAotICAgICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUg
PT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKSB7Ci0gICAgICAgICAgICBtX29wYXF1ZVJvb3RzLmNs
ZWFyKCk7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBiZWdpbk1hcmtpbmcoKTsKLQotICAgICAgICBtX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKLQotICAgICAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5j
dGlvbigKLSAgICAgICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICAgICAgU2xvdFZpc2l0
b3IqIHNsb3RWaXNpdG9yOwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBu
ZXdWaXNpdG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVl
PFNsb3RWaXNpdG9yPigqdGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRv
ciA9IG5ld1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVs
U2xvdFZpc2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3IpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZh
aWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7Cisg
ICAgICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7
CisgICAgICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRv
cj4gbmV3VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVl
PFNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0g
bmV3VmlzaXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNp
dG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNs
b3RWaXNpdG9ycy50YWtlTGFzdCgpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
V1RGOjpyZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsKKyAgICAgICAgICAg
IFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6OkhlbHBlcik7CiAKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxs
ZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgICAgICBzbG90Vmlz
aXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
LT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90
VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3It
PmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBtX2F2
YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChzbG90VmlzaXRvcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAg
ICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKIAotICAgICAgICBtX3Nsb3RWaXNpdG9y
LmRpZFN0YXJ0TWFya2luZygpOwotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAgICAgVGltaW5nU2NvcGUg
Y29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBjb252ZXJnZW5j
ZSIpOwotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7
Ci0gICAgICAgIAotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAg
bV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZGlkU3RhcnRNYXJraW5nKCk7CiAKKyAgICBTZWNvbmRz
IGNvbmN1cnJlbnRUaW1lOworICAgIGRvdWJsZSBzdG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbyA9
IDAuMTsKKyAgICBjb25zdCBkb3VibGUgcmF0aW9TdGVwID0gMS4zOworICAgIE1vbm90b25pY1Rp
bWUgaW5pdGlhbFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICBNb25vdG9uaWNUaW1l
IHRvcE9mTG9vcFRpbWUgPSBpbml0aWFsVGltZTsKKyAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlv
biA9IDE7IDsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCisg
ICAgICAgICAgICBkYXRhTG9nKCJpIyIsIGl0ZXJhdGlvbiwgIiAiKTsKKyAgICAgICAgTW9ub3Rv
bmljVGltZSB0aW1lVG9SZXN1bWUgPSB0b3BPZkxvb3BUaW1lICsgY29uY3VycmVudFRpbWUgKiBz
dG9wcGVkT3ZlckNvbmN1cnJlbnRSYXRpbzsKKyAgICAgICAgc3RvcHBlZE92ZXJDb25jdXJyZW50
UmF0aW8gKj0gcmF0aW9TdGVwOwogICAgICAgICB7Ci0gICAgICAgICAgICBUaW1pbmdTY29wZSBw
cmVDb252ZXJnZW5jZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIGNvbnNlcnZh
dGl2ZSBzY2FuIik7CisgICAgICAgICAgICBUaW1pbmdTY29wZSBwcmVDb252ZXJnZW5jZVRpbWlu
Z1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgY29uc2VydmF0aXZlIHNjYW4iKTsK
ICAgICAgICAgICAgIENvbnNlcnZhdGl2ZVJvb3RzIGNvbnNlcnZhdGl2ZVJvb3RzKCp0aGlzKTsK
ICAgICAgICAgICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
ICAgICAgICAgICAgIGdhdGhlclN0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwogICAgICAg
ICAgICAgZ2F0aGVySlNTdGFja1Jvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAg
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAgICAgICAgICAg
ICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSB2aXNpdCByb290cyB0aGF0IGRvbid0IGdl
dCBiYXJyaWVyZWQsIHNvIGVhY2ggZml4cG9pbnQgaXRlcmF0aW9uIGp1c3QgcmV2aXNpdHMKKyAg
ICAgICAgLy8gYWxsIG9mIHRoZW0uCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKyAgICAgICAg
c2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgqbV92bSwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3Ip
OworI2VuZGlmCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZG8gdGhp
cyB0byBjb25zZXJ2YXRpdmVseSBlbnN1cmUgdGhhdCB3ZSByZXNjYW4gYW55IGNvZGUgYmxvY2tz
IHRoYXQgYXJlCi0gICAgICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93ZXZlciwgd2Ug
bmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29kZSBibG9jawot
ICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVk
cyBhIGJhcnJpZXIuCi0gICAgICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJl
bnRseUV4ZWN1dGluZyh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpc2l0RXh0ZXJuYWxS
ZW1lbWJlcmVkU2V0KCk7Ci0gICAgICAgIHZpc2l0U21hbGxTdHJpbmdzKCk7Ci0gICAgICAgIHZp
c2l0UHJvdGVjdGVkT2JqZWN0cyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdEFyZ3Vt
ZW50QnVmZmVycyhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdEV4Y2VwdGlvbihoZWFw
Um9vdFZpc2l0b3IpOwotICAgICAgICB2aXNpdFN0cm9uZ0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9y
KTsKLSAgICAgICAgdmlzaXRIYW5kbGVTdGFjayhoZWFwUm9vdFZpc2l0b3IpOwotICAgICAgICB2
aXNpdFNhbXBsaW5nUHJvZmlsZXIoKTsKLSAgICAgICAgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAg
ICAgICAgdmlzaXRTaGFkb3dDaGlja2VuKCk7Ci0gICAgICAgIHRyYWNlQ29kZUJsb2Nrc0FuZEpJ
VFN0dWJSb3V0aW5lcygpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwotICAgIH0KLSAgICAKLSAgICBUaW1pbmdTY29wZSBw
b3N0Q29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtSb290cyBhZnRlciBj
b252ZXJnZW5jZSIpOwotCi0gICAgLy8gV2VhayByZWZlcmVuY2VzIG11c3QgYmUgbWFya2VkIGxh
c3QgYmVjYXVzZSB0aGVpciBsaXZlbmVzcyBkZXBlbmRzIG9uCi0gICAgLy8gdGhlIGxpdmVuZXNz
IG9mIHRoZSByZXN0IG9mIHRoZSBvYmplY3QgZ3JhcGguCi0gICAgdmlzaXRXZWFrSGFuZGxlcyho
ZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBpZiAobV92bS0+c21hbGxTdHJpbmdzLm5lZWRzVG9C
ZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKKyAgICAgICAgICAgIG1fdm0tPnNtYWxsU3Ry
aW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXMoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAg
ICAgICAgICAgCisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fcHJvdGVjdGVkVmFsdWVzKQor
ICAgICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgaWYgKG1fbWFya0xpc3RTZXQgJiYgbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQor
ICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyhoZWFwUm9vdFZpc2l0
b3IsICptX21hcmtMaXN0U2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAobV92bS0+ZXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVz
c09mRXhjZXB0aW9uKCkpOworICAgICAgICBpZiAobV92bS0+bGFzdEV4Y2VwdGlvbigpKQorICAg
ICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRp
b24oKSk7CisgICAgICAgICAgICAKKyAgICAgICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5k
bGVzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJv
b3RWaXNpdG9yKTsKKworI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgaWYg
KFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJvZmlsZXIgPSBtX3ZtLT5zYW1wbGluZ1Byb2Zp
bGVyKCkpIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKHNhbXBsaW5nUHJvZmlsZXIt
PmdldExvY2soKSk7CisgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJp
ZmllZFN0YWNrVHJhY2VzKCk7CisgICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT52aXNpdCgq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiU2FtcGxp
bmcgUHJvZmlsZXIgZGF0YTpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKKyAgICAgICAgCisgICAgICAg
IGlmIChtX3ZtLT50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgICAgIG1fdm0tPnR5cGVQcm9maWxl
ckxvZygpLT52aXNpdCgqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAg
CisgICAgICAgIG1fdm0tPnNoYWRvd0NoaWNrZW4oKS52aXNpdENoaWxkcmVuKCptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgbV9qaXRTdHViUm91dGlu
ZXMtPnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKwor
ICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKKyAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xv
dFZpc2l0b3JzKQorICAgICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5tZXJnZU9wYXF1ZVJvb3Rz
SWZOZWNlc3NhcnkoKTsKKworICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMoaGVh
cFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAg
IHZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIERGRzo6bWFy
a0NvZGVCbG9ja3MoKm1fdm0sICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgYm9v
bCBzaG91bGRUZXJtaW5hdGUgPSBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5pc0VtcHR5KCkgJiYg
bV9tdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3
YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2UgcmVzY2FuIGFu
eSBjb2RlIGJsb2NrcyB0aGF0IGFyZQorICAgICAgICAvLyBydW5uaW5nIHJpZ2h0IG5vdy4gSG93
ZXZlciwgd2UgbmVlZCB0byBiZSBzdXJlIHRvIGRvIGl0ICphZnRlciogd2UgbWFyayB0aGUgY29k
ZSBibG9jaworICAgICAgICAvLyBzbyB0aGF0IHdlIGtub3cgZm9yIHN1cmUgaWYgaXQgcmVhbGx5
IG5lZWRzIGEgYmFycmllci4gQWxzbywgdGhpcyBoYXMgdG8gaGFwcGVuIGFmdGVyIHRoZQorICAg
ICAgICAvLyBmaXhwb2ludCBjaGVjayAtIG90aGVyd2lzZSB3ZSBtaWdodCBsb29wIGZvcmV2ZXIu
IEluY2lkZW50YWxseSwgd2UgYWxzbyB3YW50IHRvIGRvIHRoaXMKKyAgICAgICAgLy8gYXQgdGhl
IGVuZCBvZiBHQyBzbyB0aGF0IGFueXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgR0MgZ2V0
cyBiYXJyaWVyZWQgaW4gdGhlIG5leHQKKyAgICAgICAgLy8gR0MuCisgICAgICAgIG1fY29kZUJs
b2Nrcy0+d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nKHRoaXMpOworICAgICAgICBERkc6
OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxk
VGVybWluYXRlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICAvLyBUaGUg
U2xvdFZpc2l0b3IncyBtYXJrIHN0YWNrcyBhcmUgYWNjZXNzZWQgYnkgdGhlIGNvbGxlY3RvciB0
aHJlYWQgKGkuZS4gdGhpcyB0aHJlYWQpCisgICAgICAgIC8vIHdpdGhvdXQgbG9ja3MuIFRoYXQn
cyB3aHkgd2UgZG91YmxlLWJ1ZmZlci4KKyAgICAgICAgbV9tdXRhdG9yTWFya1N0YWNrLT50cmFu
c2ZlclRvKG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIFdlYWsgSGFuZGxlczpcbiIsICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQor
ICAgICAgICAgICAgZGF0YUxvZyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jb2xsZWN0b3JNYXJr
U3RhY2soKS5zaXplKCksICIrIiwgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bXV0YXRvck1hcmtT
dGFjaygpLnNpemUoKSwgIiAiKTsKKworICAgICAgICB7CisgICAgICAgICAgICBUaW1pbmdTY29w
ZSB0cmFjZVRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6bWFya1RvRml4cG9pbnQgdHJhY2luZyIp
OworICAgICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX2NvbGxlY3RvclNs
b3RWaXNpdG9yKTsKKyAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRvbmF0ZUFu
ZERyYWluKHRpbWVUb1Jlc3VtZSk7CisgICAgICAgICAgICBTbG90VmlzaXRvcjo6U2hhcmVkRHJh
aW5SZXN1bHQgZHJhaW5SZXN1bHQgPQorICAgICAgICAgICAgICAgIG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4sIHRpbWVUb1Jl
c3VtZSk7CisgICAgICAgICAgICBpZiAoZHJhaW5SZXN1bHQgIT0gU2xvdFZpc2l0b3I6OlNoYXJl
ZERyYWluUmVzdWx0OjpEb25lKSB7CisgICAgICAgICAgICAgICAgUmVzdW1lVGhlV29ybGRTY29w
ZSByZXN1bWVUaGVXb3JsZFNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbigpOworICAgICAgICAgICAgICAgIG1fY29sbGVj
dG9yU2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNb25vdG9uaWNU
aW1lIHRpbWVPZlN0b3AgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAgICAgY29uY3VycmVu
dFRpbWUgPSB0aW1lT2ZTdG9wIC0gdGltZVRvUmVzdW1lOworICAgICAgICB0b3BPZkxvb3BUaW1l
ID0gdGltZU9mU3RvcDsKKyAgICB9CiAKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsKQEAgLTU2Myw3ICs2NDcsNiBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUpCiAKIHZvaWQgSGVhcDo6Z2F0aGVyU3RhY2tS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9qaXRTdHViUm91dGluZXMt
PmNsZWFyTWFya3MoKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJv
b3RzKHJvb3RzLCAqbV9qaXRTdHViUm91dGluZXMsICptX2NvZGVCbG9ja3MpOwogfQogCkBAIC01
OTAsNDkgKzY3MywyOCBAQCB2b2lkIEhlYXA6OmJlZ2luTWFya2luZygpCiAgICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjpiZWdpbk1hcmtpbmciKTsKICAgICBpZiAobV9j
b2xsZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX2NvZGVC
bG9ja3MtPmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOwotICAgIAotICAgIHsKLSAgICAg
ICAgVGltaW5nU2NvcGUgY2xlYXJNYXJrc1RpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFj
ZS5iZWdpbk1hcmtpbmciKTsKLSAgICAgICAgbV9vYmplY3RTcGFjZS5iZWdpbk1hcmtpbmcoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRFeHRlcm5hbFJlbWVtYmVyZWRTZXQoKQotewot
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECi0gICAgc2NhbkV4dGVybmFsUmVtZW1iZXJlZFNldCgq
bV92bSwgbV9zbG90VmlzaXRvcik7Ci0jZW5kaWYKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNtYWxs
U3RyaW5ncygpCi17Ci0gICAgaWYgKCFtX3ZtLT5zbWFsbFN0cmluZ3MubmVlZHNUb0JlVmlzaXRl
ZCgqbV9jb2xsZWN0aW9uU2NvcGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZtLT5zbWFs
bFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKG1fc2xvdFZpc2l0b3IpOwotICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
U21hbGwgc3RyaW5nczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgIG1fc2xvdFZpc2l0b3IuZG9u
YXRlQW5kRHJhaW4oKTsKKyAgICBtX2ppdFN0dWJSb3V0aW5lcy0+Y2xlYXJNYXJrcygpOworICAg
IG1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nKCk7CisgICAgbV9tdXRhdG9yU2hvdWxkQmVGZW5j
ZWQgPSB0cnVlOworICAgIG1fYmFycmllclRocmVzaG9sZCA9IHRhdXRvbG9naWNhbFRocmVzaG9s
ZDsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJv
b3RzJiByb290cykKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZChyb290cyk7CisgICAgbV9j
b2xsZWN0b3JTbG90VmlzaXRvci0+YXBwZW5kKHJvb3RzKTsKIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiQ29uc2VydmF0
aXZlIFJvb3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7CisgICAgICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsICpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIH0KIAogdm9pZCBIZWFwOjp2aXNpdENvbXBpbGVyV29y
a2xpc3RXZWFrUmVmZXJlbmNlcygpCiB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KQotICAgICAgICBERkc6
OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdlYWtSZWZlcmVuY2VzKG1fc2xvdFZp
c2l0b3IpOworICAgICAgICBERkc6OmV4aXN0aW5nV29ya2xpc3RGb3JJbmRleChpKS52aXNpdFdl
YWtSZWZlcmVuY2VzKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiREZHIFdv
cmtsaXN0czpcbiIsIG1fc2xvdFZpc2l0b3IpOworICAgICAgICBkYXRhTG9nKCJERkcgV29ya2xp
c3RzOlxuIiwgKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOwogI2VuZGlmCiB9CiAKQEAgLTcwNSwx
MzIgKzc2NywxMCBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyhICiAg
ICAgfQogfQogCi12b2lkIEhlYXA6OnZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0
b3ImIGhlYXBSb290VmlzaXRvcikKLXsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3Rl
ZFZhbHVlcykKLSAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZwYWlyLmtleSk7Ci0KLSAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIlByb3RlY3RlZCBPYmplY3RzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICBtX3Ns
b3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlzaXRBcmd1bWVu
dEJ1ZmZlcnMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGlmICghbV9tYXJrTGlz
dFNldCB8fCAhbV9tYXJrTGlzdFNldC0+c2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlcjo6bWFya0xpc3RzKHZpc2l0b3IsICptX21hcmtMaXN0U2V0KTsK
LQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAg
ICAgZGF0YUxvZygiQXJndW1lbnQgQnVmZmVyczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAg
bV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0RXhj
ZXB0aW9uKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBpZiAoIW1fdm0tPmV4Y2Vw
dGlvbigpICYmICFtX3ZtLT5sYXN0RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHZpc2l0b3IudmlzaXQobV92bS0+YWRkcmVzc09mRXhjZXB0aW9uKCkpOwotICAgIHZpc2l0b3Iu
dmlzaXQobV92bS0+YWRkcmVzc09mTGFzdEV4Y2VwdGlvbigpKTsKLQotICAgIGlmIChPcHRpb25z
Ojpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiRXhjZXB0
aW9uczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmRE
cmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyhIZWFwUm9vdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgbV9oYW5kbGVTZXQudmlzaXRTdHJvbmdIYW5kbGVzKHZpc2l0
b3IpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQot
ICAgICAgICBkYXRhTG9nKCJTdHJvbmcgSGFuZGxlczpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0g
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lkIEhlYXA6OnZpc2l0
SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU3Rh
Y2sudmlzaXQodmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkhhbmRsZSBTdGFjazpcbiIsIG1fc2xvdFZp
c2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12b2lk
IEhlYXA6OnZpc2l0U2FtcGxpbmdQcm9maWxlcigpCi17Ci0jaWYgRU5BQkxFKFNBTVBMSU5HX1BS
T0ZJTEVSKQotICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVyID0gbV92
bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7Ci0gICAgICAgIEFTU0VSVChzYW1wbGluZ1Byb2ZpbGVy
LT5nZXRMb2NrKCkuaXNMb2NrZWQoKSk7Ci0gICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPnZpc2l0
KG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJTYW1wbGluZyBQcm9maWxlciBkYXRh
OlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmRE
cmFpbigpOwotICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkudW5sb2NrKCk7Ci0g
ICAgfQotI2VuZGlmIC8vIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLX0KLQotdm9pZCBIZWFw
Ojp2aXNpdFR5cGVQcm9maWxlcigpCi17Ci0gICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKSB7
Ci0gICAgICAgIHZtKCktPnR5cGVQcm9maWxlckxvZygpLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsK
LSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAg
ICAgICAgICAgZGF0YUxvZygiVHlwZSBQcm9maWxlciB2aXNpdCBkYXRhOlxuIiwgbV9zbG90Vmlz
aXRvcik7Ci0gICAgICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSGVhcDo6dmlzaXRTaGFkb3dDaGlja2VuKCkKLXsKLSAgICBtX3ZtLT5zaGFkb3dD
aGlja2VuKCkudmlzaXRDaGlsZHJlbihtX3Nsb3RWaXNpdG9yKTsKLX0KLQotdm9pZCBIZWFwOjp0
cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKQotewotICAgIG1faml0U3R1YlJvdXRp
bmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhtX3Nsb3RWaXNpdG9yKTsKLQotICAgIGlmIChP
cHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygi
Q29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0K
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7Ci19Ci0KLXZvaWQgSGVhcDo6dmlz
aXRXZWFrSGFuZGxlcyhIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgVGltaW5nU2Nv
cGUgdGltaW5nU2NvcGUoKnRoaXMsICJIZWFwOjp2aXNpdFdlYWtIYW5kbGVzIik7Ci0gICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgewotICAgICAgICAgICAgVGltaW5nU2NvcGUgdGltaW5nU2Nv
cGUoKnRoaXMsICJtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHMiKTsKLSAgICAgICAgICAgIG1f
b2JqZWN0U3BhY2UudmlzaXRXZWFrU2V0cyh2aXNpdG9yKTsKLSAgICAgICAgfQotICAgICAgICBo
YXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKLSAgICAgICAgdmlzaXRDb21waWxlcldvcmtsaXN0V2Vh
a1JlZmVyZW5jZXMoKTsKLSAgICAgICAgaWYgKG1fc2xvdFZpc2l0b3IuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dn
aW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhhbmRsZXM6XG4i
LCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9y
LmRvbmF0ZUFuZERyYWluKCk7Ci0gICAgICAgICAgICBtX3Nsb3RWaXNpdG9yLmRyYWluRnJvbVNo
YXJlZChTbG90VmlzaXRvcjo6TWFzdGVyRHJhaW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCiB2
b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTdGFydFRpbWUpCiB7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKSB7Ci0gICAgICAgIHNp
emVfdCB2aXNpdENvdW50ID0gbV9zbG90VmlzaXRvci52aXNpdENvdW50KCk7CisgICAgICAgIHNp
emVfdCB2aXNpdENvdW50ID0gbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+dmlzaXRDb3VudCgpOwog
ICAgICAgICB2aXNpdENvdW50ICs9IHRocmVhZFZpc2l0Q291bnQoKTsKICAgICAgICAgZGF0YUxv
Z0YoIlxuTnVtYmVyIG9mIGxpdmUgT2JqZWN0cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNz
XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPih2aXNpdENvdW50KSwgV1RGOjptb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKSAtIGdjU3RhcnRUaW1lKTsKICAgICB9CkBAIC04MzgsMjIg
Kzc3OCwyNyBAQCB2b2lkIEhlYXA6OnVwZGF0ZU9iamVjdENvdW50cyhkb3VibGUgZ2NTCiAgICAg
aWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkKICAgICAgICAg
bV90b3RhbEJ5dGVzVmlzaXRlZCA9IDA7CiAKLSAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5
Y2xlID0gbV9zbG90VmlzaXRvci5ieXRlc1Zpc2l0ZWQoKSArIHRocmVhZEJ5dGVzVmlzaXRlZCgp
OworICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGUgPQorICAgICAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQoKSArCisgICAgICAgIHRocmVhZEJ5dGVzVmlzaXRl
ZCgpOwogICAgIAogICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgKz0gbV90b3RhbEJ5dGVzVmlzaXRl
ZFRoaXNDeWNsZTsKIH0KIAogdm9pZCBIZWFwOjplbmRNYXJraW5nKCkKIHsKLSAgICBtX3Nsb3RW
aXNpdG9yLnJlc2V0KCk7CisgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+cmVzZXQoKTsKIAog
ICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
ICAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCi0gICAgQVNTRVJUKG1fc2hhcmVk
TWFya1N0YWNrLmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRDb2xsZWN0
b3JNYXJrU3RhY2stPmlzRW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9zaGFyZWRNdXRh
dG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMu
cmVtb3ZlQWxsKCk7CiAgICAgCiAgICAgbV9vYmplY3RTcGFjZS5lbmRNYXJraW5nKCk7CisgICAg
bV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQgPSBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKTsK
KyAgICBtX2JhcnJpZXJUaHJlc2hvbGQgPSBPcHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/
IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJsYWNrVGhyZXNob2xkOwogfQogCiBzaXplX3QgSGVh
cDo6b2JqZWN0Q291bnQoKQpAQCAtOTg4LDE0ICs5MzMsMjAgQEAgdm9pZCBIZWFwOjphZGRUb1Jl
bWVtYmVyZWRTZXQoY29uc3QgSlNDZQogewogICAgIEFTU0VSVChjZWxsKTsKICAgICBBU1NFUlQo
IU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRKSVQoKSB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsK
LSAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2VsbFN0YXRlOjpBbnRocmFjaXRlT3JC
bGFjayk7Ci0gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIG9iamVjdCBpcyBncmV5IGFuZCB0aGF0
IGl0J3Mgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgLy8gLSBBIHJlLWdyZXllZCBvYmplY3Qg
ZHVyaW5nIGEgY29uY3VycmVudCBjb2xsZWN0aW9uLgotICAgIC8vIC0gQW4gb2xkIHJlbWVtYmVy
ZWQgb2JqZWN0LgotICAgIC8vICJPbGRHcmV5IiBkb2Vzbid0IHRlbGwgdXMgd2hpY2ggb2YgdGhl
c2UgdGhpbmdzIGlzIHRydWUsIGJ1dCB3ZSB1c3VhbGx5IHRyZWF0IHRoZSB0d28gY2FzZXMgdGhl
Ci0gICAgLy8gc2FtZS4KLSAgICBjZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRHcmV5
KTsKLSAgICBtX3Nsb3RWaXNpdG9yLmFwcGVuZFRvTWFya1N0YWNrKGNvbnN0X2Nhc3Q8SlNDZWxs
Kj4oY2VsbCkpOworICAgIGlmICghSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpIHsK
KyAgICAgICAgLy8gRHVyaW5nIGEgZnVsbCBjb2xsZWN0aW9uIGEgc3RvcmUgaW50byBhbiB1bm1h
cmtlZCBvYmplY3QgdGhhdCBoYWQgc3VyaXZpdmVkIHBhc3QKKyAgICAgICAgLy8gY29sbGVjdGlv
bnMgd2lsbCBtYW5pZmVzdCBhcyBhIHN0b3JlIHRvIGFuIHVubWFya2VkIGJsYWNrIG9iamVjdC4g
SWYgdGhlIG9iamVjdCBnZXRzCisgICAgICAgIC8vIG1hcmtlZCBhdCBzb21lIHRpbWUgYWZ0ZXIg
dGhpcyB0aGVuIGl0IHdpbGwgZ28gZG93biB0aGUgbm9ybWFsIG1hcmtpbmcgcGF0aC4gV2UgY2Fu
CisgICAgICAgIC8vIHNhZmVseSBpZ25vcmUgdGhlc2Ugc3RvcmVzLgorICAgICAgICByZXR1cm47
CisgICAgfQorICAgIC8vIEl0IGNvdWxkIGJlIHRoYXQgdGhlIG9iamVjdCB3YXMgKmp1c3QqIG1h
cmtlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBjb2xsZWN0b3IgbWF5IHNldCB0aGUKKyAgICAvLyBz
dGF0ZSB0byBHcmV5IGFuZCB0aGVuIHRvIEFudGhyYWNpdGVPckJsYWNrIGF0IGFueSB0aW1lLiBJ
dCdzIE9LIGZvciB1cyB0byByYWNlIHdpdGggdGhlCisgICAgLy8gY29sbGVjdG9yIGhlcmUuIElm
IHdlIHdpbiB0aGVuIHRoaXMgaXMgYWNjdXJhdGUgYmVjYXVzZSB0aGUgb2JqZWN0IF93aWxsXyBn
ZXQgc2Nhbm5lZCBhZ2Fpbi4KKyAgICAvLyBJZiB3ZSBsb3NlIHRoZW4gc29tZW9uZSBlbHNlIHdp
bGwgYmFycmllciB0aGUgb2JqZWN0IGFnYWluLiBUaGF0IHdvdWxkIGJlIHVuZm9ydHVuYXRlIGJ1
dCBub3QKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSB3b3JsZC4KKyAgICBjZWxsLT5zZXRDZWxsU3Rh
dGUoQ2VsbFN0YXRlOjpHcmV5KTsKKyAgICBtX211dGF0b3JNYXJrU3RhY2stPmFwcGVuZChjZWxs
KTsKIH0KIAogdm9pZCBIZWFwOjpjb2xsZWN0QWxsR2FyYmFnZSgpCkBAIC0xMDk0LDI0ICsxMDQ1
LDE0IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKICAgICAKICAgICBzdG9wVGhlV29y
bGQoKTsKIAotICAgIGRvdWJsZSBiZWZvcmUgPSAwOworICAgIE1vbm90b25pY1RpbWUgYmVmb3Jl
OwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7Ci0gICAgICAgIGRhdGFMb2coIltHQzogIiwg
Y2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7Ci0gICAgICAgIGJlZm9yZSA9IGN1cnJlbnRUaW1l
TVMoKTsKKyAgICAgICAgZGF0YUxvZygiW0dDOiBTVEFSVCAiLCBjYXBhY2l0eSgpIC8gMTAyNCwg
IiBrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAgICAgfQog
ICAgIAogICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsKICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAg
IHsKLSAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOwotICAgICAgICBpZiAo
SklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1fdm0pKQotICAgICAg
ICAgICAgc2V0R0NEaWRKSVQoKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAK
LSAgICB2bSgpLT5zaGFkb3dDaGlja2VuKCkudXBkYXRlKCp2bSgpLCB2bSgpLT50b3BDYWxsRnJh
bWUpOwotICAgIAogICAgIEFTU0VSVChtX2lzU2FmZVRvQ29sbGVjdCk7CiAgICAgaWYgKG1fY29s
bGVjdGlvblNjb3BlKSB7CiAgICAgICAgIGRhdGFMb2coIkNvbGxlY3Rpb24gc2NvcGUgYWxyZWFk
eSBzZXQgZHVyaW5nIEdDOiAiLCBtX2NvbGxlY3Rpb25TY29wZSwgIlxuIik7CkBAIC0xMTMxLDEy
ICsxMDcyLDkgQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgICAgICBtX3Zlcmlm
aWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpCZWZvcmVNYXJraW5n
KTsKICAgICB9CiAgICAgICAgIAotICAgIGZsdXNoT2xkU3RydWN0dXJlSURUYWJsZXMoKTsKLSAg
ICBzdG9wQWxsb2NhdGlvbigpOwogICAgIHByZXBhcmVGb3JNYXJraW5nKCk7Ci0gICAgZmx1c2hX
cml0ZUJhcnJpZXJCdWZmZXIoKTsKICAgICAgICAgCi0gICAgbWFya1Jvb3RzKGdjU3RhcnRUaW1l
KTsKKyAgICBtYXJrVG9GaXhwb2ludChnY1N0YXJ0VGltZSk7CiAgICAgICAgIAogICAgIGlmICht
X3ZlcmlmaWVyKSB7CiAgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBW
ZXJpZmllcjo6UGhhc2U6OkFmdGVyTWFya2luZyk7CkBAIC0xMTczLDggKzExMTEsOCBAQCB2b2lk
IEhlYXA6OmNvbGxlY3RJblRocmVhZCgpCiAgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjps
b2dHQygpKSB7Ci0gICAgICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAg
ICAgZGF0YUxvZyhhZnRlciAtIGJlZm9yZSwgIiBtc11cbiIpOworICAgICAgICBNb25vdG9uaWNU
aW1lIGFmdGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRhdGFMb2coKGFmdGVy
IC0gbV9zdG9wVGltZSkubWlsbGlzZWNvbmRzKCksICIgbXMsIGN5Y2xlICIsIChhZnRlciAtIGJl
Zm9yZSkubWlsbGlzZWNvbmRzKCksICIgbXMgRU5EXVxuIik7CiAgICAgfQogICAgIAogICAgIHsK
QEAgLTExOTYsMTAgKzExMzQsMzMgQEAgdm9pZCBIZWFwOjpzdG9wVGhlV29ybGQoKQogICAgIHN0
b3BUaGVNdXRhdG9yKCk7CiAgICAgc3VzcGVuZENvbXBpbGVyVGhyZWFkcygpOwogICAgIG1fY29s
bGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgPSB0cnVlOworCisjaWYgRU5BQkxF
KEpJVCkKKyAgICB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKKyAg
ICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFsbEZvclZNKCptX3Zt
KSkKKyAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShK
SVQpCisgICAgCisgICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgqdm0oKSwgdm0oKS0+
dG9wQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOworICAg
IG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOworICAgIG1fb2JqZWN0U3BhY2Uu
c3RvcEFsbG9jYXRpbmcoKTsKKyAgICAKKyAgICBtX3N0b3BUaW1lID0gTW9ub3RvbmljVGltZTo6
bm93KCk7CiB9CiAKIHZvaWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogeworICAgIC8vIENhbGxp
bmcgcmVzdW1lQWxsb2NhdGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hl
dGhlciB0aGlzIGlzIHRoZSBlbmQgb2YgYQorICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhp
cyBpcyBqdXN0IGEgY29uY3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgor
ICAgIC8vIC0gQXQgZW5kIG9mIGNvbGxlY3Rpb24gY3ljbGU6IGl0J3MgYSBuby1vcCBiZWNhdXNl
IHByZXBhcmVGb3JBbGxvY2F0aW9uIGFscmVhZHkgY2xlYXJlZCB0aGUKKyAgICAvLyAgIGxhc3Qg
YWN0aXZlIGJsb2NrLgorICAgIC8vIC0gRHVyaW5nIGNvbGxlY3Rpb24gY3ljbGU6IGl0IHJlaW5z
dGF0ZXMgdGhlIGxhc3QgYWN0aXZlIGJsb2NrLgorICAgIG1fb2JqZWN0U3BhY2UucmVzdW1lQWxs
b2NhdGluZygpOworICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKG1fY29sbGVjdG9yQmVsaWV2ZXNU
aGF0VGhlV29ybGRJc1N0b3BwZWQpOwogICAgIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29y
bGRJc1N0b3BwZWQgPSBmYWxzZTsKICAgICByZXN1bWVDb21waWxlclRocmVhZHMoKTsKQEAgLTE0
MDgsMjMgKzEzNjksMTggQEAgdm9pZCBIZWFwOjpoYW5kbGVOZWVkRmluYWxpemUoKQogCiB2b2lk
IEhlYXA6OnNldEdDRGlkSklUKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVk
IG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b2xkU3RhdGUgJiBzdG9wcGVkQml0KTsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSB8IGdjRGlkSklUQml0KSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgbV93b3JsZFN0YXRlLnRyYW5zYWN0aW9uKAorICAgICAg
ICBbJl0gKHVuc2lnbmVkJiBzdGF0ZSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
dGUgJiBzdG9wcGVkQml0KTsKKyAgICAgICAgICAgIHN0YXRlIHw9IGdjRGlkSklUQml0OworICAg
ICAgICB9KTsKIH0KIAogdm9pZCBIZWFwOjpzZXROZWVkRmluYWxpemUoKQogewotICAgIGZvciAo
OzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwot
ICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9s
ZFN0YXRlIHwgbmVlZEZpbmFsaXplQml0KSkgewotICAgICAgICAgICAgbV9zdG9wSWZOZWNlc3Nh
cnlUaW1lci0+c2NoZWR1bGVTb29uKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9CisgICAgbV93b3JsZFN0YXRlLmV4Y2hhbmdlT3IobmVlZEZpbmFsaXplQml0KTsKKyAg
ICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAgbV9zdG9wSWZOZWNl
c3NhcnlUaW1lci0+c2NoZWR1bGVTb29uKCk7CiB9CiAKIHZvaWQgSGVhcDo6d2FpdFdoaWxlTmVl
ZEZpbmFsaXplKCkKQEAgLTE0NDEsMjMgKzEzOTcsMTQgQEAgdm9pZCBIZWFwOjp3YWl0V2hpbGVO
ZWVkRmluYWxpemUoKQogICAgIH0KIH0KIAotdW5zaWduZWQgSGVhcDo6c2V0TXV0YXRvcldhaXRp
bmcoKQordm9pZCBIZWFwOjpzZXRNdXRhdG9yV2FpdGluZygpCiB7Ci0gICAgZm9yICg7Oykgewot
ICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0gICAgICAg
IHVuc2lnbmVkIG5ld1N0YXRlID0gb2xkU3RhdGUgfCBtdXRhdG9yV2FpdGluZ0JpdDsKLSAgICAg
ICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBuZXdTdGF0
ZSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgfQorICAgIG1fd29ybGRTdGF0
ZS5leGNoYW5nZU9yKG11dGF0b3JXYWl0aW5nQml0KTsKIH0KIAogdm9pZCBIZWFwOjpjbGVhck11
dGF0b3JXYWl0aW5nKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0
YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5tdXRhdG9yV2FpdGluZ0JpdCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZUFu
ZCh+bXV0YXRvcldhaXRpbmdCaXQpOwogfQogCiB2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3Bw
aW5nKGNvbnN0IExvY2tIb2xkZXImKQpAQCAtMTQ2OSwxMCArMTQxNiwxNSBAQCB2b2lkIEhlYXA6
Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvCiAKIHZvaWQgSGVhcDo6ZmluYWxpemUoKQog
ewotICAgIEhlbHBpbmdHQ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKLSAgICBkZWxldGVV
bm1hcmtlZENvbXBpbGVkQ29kZSgpOwotICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7
Ci0gICAgc3dlZXBMYXJnZUFsbG9jYXRpb25zKCk7CisgICAgeworICAgICAgICBIZWxwaW5nR0NT
Y29wZSBoZWxwaW5nR0NTY29wZSgqdGhpcyk7CisgICAgICAgIGRlbGV0ZVVubWFya2VkQ29tcGls
ZWRDb2RlKCk7CisgICAgICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgICAg
IHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAgIH0KKyAgICAKKyAgICBpZiAoT3B0aW9uczo6
Y29sbGVjdENvbnRpbnVvdXNseSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKICAgICBpZiAo
SGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUgPSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkp
CiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwogfQpAQCAtMTU1NCwyMyArMTUwNiw5IEBAIHZvaWQg
SGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihPcHRpb25hbDwKICAgICAgICAgb2JzZXJ2ZXItPndp
bGxHYXJiYWdlQ29sbGVjdCgpOwogfQogCi12b2lkIEhlYXA6OmZsdXNoT2xkU3RydWN0dXJlSURU
YWJsZXMoKQotewotICAgIG1fc3RydWN0dXJlSURUYWJsZS5mbHVzaE9sZFRhYmxlcygpOwotfQot
CiB2b2lkIEhlYXA6OmZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCkKIHsKLSAgICBpZiAobV9jb2xs
ZWN0aW9uU2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgIG1fd3JpdGVC
YXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X3dyaXRlQmFycmllckJ1ZmZlci5yZXNldCgpOwotfQotCi12b2lkIEhlYXA6OnN0b3BBbGxvY2F0
aW9uKCkKLXsKLSAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgbV93cml0
ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMpOwogfQogCiB2b2lkIEhlYXA6OnByZXBhcmVGb3JN
YXJraW5nKCkKQEAgLTE5MzcsNyArMTg3NSw3IEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9j
a0ltcGwoY29uc3QgU2MKIAogdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBK
U0NlbGwqIGZyb20pCiB7Ci0gICAgaWYgKFVOTElLRUxZKGJhcnJpZXJTaG91bGRCZUZlbmNlZCgp
KSkgeworICAgIGlmIChVTkxJS0VMWShtdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkpIHsKICAgICAg
ICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgYmFycmllclRocmVzaG9sZCBpcyB0aGUgdGF1dG9sb2dp
Y2FsIHRocmVzaG9sZCwgc28gZnJvbSBjb3VsZCBzdGlsbCBiZQogICAgICAgICAvLyBub3QgYmxh
Y2suIEJ1dCB3ZSBjYW4ndCBrbm93IGZvciBzdXJlIHVudGlsIHdlIGZpcmUgb2ZmIGEgZmVuY2Uu
CiAgICAgICAgIFdURjo6c3RvcmVMb2FkRmVuY2UoKTsKQEAgLTE5NTQsNyArMTg5Miw3IEBAIGJv
b2wgSGVhcDo6Y2FuQ29sbGVjdCgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIW1f
aXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGNvbGxlY3Rp
b25TY29wZSgpIHx8IG11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDKQor
ICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTk3NiwxMiArMTkxNCw4
IEBAIGJvb2wgSGVhcDo6aXNDdXJyZW50VGhyZWFkQnVzeSgpCiAgICAgcmV0dXJuIG1heUJlR0NU
aHJlYWQoKSB8fCBtdXRhdG9yU3RhdGUoKSAhPSBNdXRhdG9yU3RhdGU6OlJ1bm5pbmc7CiB9CiAK
LXZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwg
c2l6ZV90IHNpemUpCit2b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3Qg
c2l6ZSkKIHsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0cmEg
bWVtb3J5IHRoYXQgd2FzIHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlm
IChjb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUg
PT0gQ2VsbFN0YXRlOjpPbGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNv
dW50ZXIgPSAmbV9leHRyYU1lbW9yeVNpemU7CiAgICAgCiAgICAgZm9yICg7OykgewpAQCAtMTk5
MiwxMiArMTkyNiw4IEBAIHZvaWQgSGVhcDo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKENlbGwK
IH0KIAogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLXZvaWQgSGVhcDo6cmVwb3J0RXh0ZXJu
YWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90IHNpemUpCit2b2lkIEhl
YXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGRvdWJsZS1jb3VudCB0aGUgZXh0ZXJuYWwgbWVtb3J5IHRoYXQgd2Fz
IHJlcG9ydGVkIGluIHByZXZpb3VzIGNvbGxlY3Rpb25zLgotICAgIGlmIChjb2xsZWN0aW9uU2Nv
cGUoKSA9PSBDb2xsZWN0aW9uU2NvcGU6OkVkZW4gJiYgb2xkU3RhdGUgPT0gQ2VsbFN0YXRlOjpP
bGRHcmV5KQotICAgICAgICByZXR1cm47Ci0KICAgICBzaXplX3QqIGNvdW50ZXIgPSAmbV9leHRl
cm5hbE1lbW9yeVNpemU7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0yMDkxLDQgKzIwMjEsMTEgQEAg
dm9pZCBIZWFwOjpzZXRSdW5Mb29wKENGUnVuTG9vcFJlZiBydW5MbwogfQogI2VuZGlmIC8vIFVT
RShDRikKIAordm9pZCBIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQoreworICAgIG1faXNT
YWZlVG9Db2xsZWN0ID0gdHJ1ZTsKKyAgICBpZiAoT3B0aW9uczo6Y29sbGVjdENvbnRpbnVvdXNs
eSgpKQorICAgICAgICBjb2xsZWN0QXN5bmMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMzUs
NyArMzYsNiBAQAogI2luY2x1ZGUgIk1hcmtlZFNwYWNlLmgiCiAjaW5jbHVkZSAiTXV0YXRvclN0
YXRlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAj
aW5jbHVkZSAiU3RydWN0dXJlSURUYWJsZS5oIgogI2luY2x1ZGUgIlRpbnlCbG9vbUZpbHRlci5o
IgogI2luY2x1ZGUgIlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKQEAgLTcwLDcgKzcwLDkgQEAg
Y2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBKU1ZhbHVlOwog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworY2xhc3MgTWFya1N0YWNrQXJyYXk7CiBjbGFz
cyBNYXJrZWRBcmd1bWVudEJ1ZmZlcjsKK2NsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3RvcElm
TmVjZXNzYXJ5VGltZXI7CiBjbGFzcyBWTTsKIApAQCAtMTI5LDcgKzEzMSw4IEBAIHB1YmxpYzoK
ICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJldHVybiBtX29iamVjdFNwYWNlOyB9
CiAgICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRzKCkgeyByZXR1cm4gbV9tYWNoaW5l
VGhyZWFkczsgfQogCi0gICAgY29uc3QgU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zbG90VmlzaXRvcjsgfQorICAgIFNsb3RWaXNpdG9yJiBjb2xsZWN0b3JTbG90
VmlzaXRvcigpIHsgcmV0dXJuICptX2NvbGxlY3RvclNsb3RWaXNpdG9yOyB9CisgICAgTWFya1N0
YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiAqbV9tdXRhdG9yTWFya1N0YWNr
OyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBHQ0FjdGl2aXR5Q2FsbGJhY2sqIGZ1bGxBY3Rp
dml0eUNhbGxiYWNrKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rpdml0eUNhbGxiYWNr
KiBlZGVuQWN0aXZpdHlDYWxsYmFjaygpOwpAQCAtMTY4LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEZpbmFsaXplcihKU0NlbGwqLCBGaW5hbGl6ZXIp
OwogICAgIHZvaWQgYWRkRXhlY3V0YWJsZShFeGVjdXRhYmxlQmFzZSopOwogCi0gICAgdm9pZCBu
b3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQorICAg
IHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCk7CiAgICAgYm9vbCBpc1NhZmVUb0NvbGxlY3Qo
KSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsKQEAgLTIwMywxMSArMjA2LDEx
IEBAIHB1YmxpYzoKICAgICAvLyBjYWxsIGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zOiBDYWxsaW5n
IG9ubHkgb25lIG1heSB0cmlnZ2VyIGNhdGFzdHJvcGljCiAgICAgLy8gbWVtb3J5IGdyb3d0aC4K
ICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVfdCk7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQoQ2VsbFN0YXRlIG9sZFN0
YXRlLCBzaXplX3QpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKHNpemVfdCk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgLy8g
VXNlIHRoaXMgQVBJIHRvIHJlcG9ydCB0aGUgc3Vic2V0IG9mIGV4dHJhIG1lbW9yeSB0aGF0IGxp
dmVzIG91dHNpZGUgdGhpcyBwcm9jZXNzLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVw
b3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChzaXpl
X3QpOwogICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeVNpemUoKSB7IHJldHVybiBtX2V4dGVybmFs
TWVtb3J5U2l6ZTsgfQogI2VuZGlmCiAKQEAgLTI4Myw4ICsyODYsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRBbGxvY2F0ZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgdm9pZCBkaWRGcmVl
QmxvY2soc2l6ZV90IGNhcGFjaXR5KTsKICAgICAKLSAgICBib29sIGJhcnJpZXJTaG91bGRCZUZl
bmNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9Ci0gICAgY29u
c3QgYm9vbCogYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4g
Jm1fYmFycmllclNob3VsZEJlRmVuY2VkOyB9CisgICAgYm9vbCBtdXRhdG9yU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTaG91bGRCZUZlbmNlZDsgfQorICAgIGNvbnN0
IGJvb2wqIGFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNlZCgpIGNvbnN0IHsgcmV0dXJuICZt
X211dGF0b3JTaG91bGRCZUZlbmNlZDsgfQogICAgIAogICAgIHVuc2lnbmVkIGJhcnJpZXJUaHJl
c2hvbGQoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXJUaHJlc2hvbGQ7IH0KICAgICBjb25zdCB1
bnNpZ25lZCogYWRkcmVzc09mQmFycmllclRocmVzaG9sZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jh
cnJpZXJUaHJlc2hvbGQ7IH0KQEAgLTM5MSw2ICszOTQsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
c3RvcFRoZVdvcmxkKCk7CiAgICAgdm9pZCByZXN1bWVUaGVXb3JsZCgpOwogICAgIAorICAgIGNs
YXNzIFJlc3VtZVRoZVdvcmxkU2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFJlc3VtZVRoZVdvcmxk
U2NvcGU7CisgICAgCiAgICAgdm9pZCBzdG9wVGhlTXV0YXRvcigpOwogICAgIHZvaWQgcmVzdW1l
VGhlTXV0YXRvcigpOwogICAgIApAQCAtNDEyLDcgKzQxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXROZWVkRmluYWxpemUoKTsKICAgICB2b2lkIHdhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpOwog
ICAgIAotICAgIHVuc2lnbmVkIHNldE11dGF0b3JXYWl0aW5nKCk7CisgICAgdm9pZCBzZXRNdXRh
dG9yV2FpdGluZygpOwogICAgIHZvaWQgY2xlYXJNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQg
bm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgTG9ja0hvbGRlciYpOwogICAgIApAQCAtNDIyLDMx
ICs0MjgsMTggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHN1c3BlbmRDb21waWxlclRocmVh
ZHMoKTsKICAgICB2b2lkIHdpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8Q29sbGVjdGlvblNj
b3BlPik7Ci0gICAgdm9pZCBmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCk7CiAgICAgdm9pZCBm
bHVzaFdyaXRlQmFycmllckJ1ZmZlcigpOwotICAgIHZvaWQgc3RvcEFsbG9jYXRpb24oKTsKICAg
ICB2b2lkIHByZXBhcmVGb3JNYXJraW5nKCk7CiAgICAgCi0gICAgdm9pZCBtYXJrUm9vdHMoZG91
YmxlIGdjU3RhcnRUaW1lKTsKKyAgICB2b2lkIG1hcmtUb0ZpeHBvaW50KGRvdWJsZSBnY1N0YXJ0
VGltZSk7CiAgICAgdm9pZCBnYXRoZXJTdGFja1Jvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAg
ICAgdm9pZCBnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lk
IGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQg
YmVnaW5NYXJraW5nKCk7Ci0gICAgdm9pZCB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwot
ICAgIHZvaWQgdmlzaXRTbWFsbFN0cmluZ3MoKTsKICAgICB2b2lkIHZpc2l0Q29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIHZpc2l0Q29tcGlsZXJXb3JrbGlz
dFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVu
dHJpZXMoKTsKLSAgICB2b2lkIHZpc2l0UHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdFZpc2l0b3Im
KTsKLSAgICB2b2lkIHZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYpOwotICAg
IHZvaWQgdmlzaXRFeGNlcHRpb24oSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdFN0
cm9uZ0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEhhbmRsZVN0YWNr
KEhlYXBSb290VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0g
ICAgdm9pZCB2aXNpdFR5cGVQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRTaGFkb3dDaGlja2Vu
KCk7Ci0gICAgdm9pZCB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICB2
b2lkIHZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJik7CisgICAgdm9pZCBtYXJrVG9G
aXhwb2ludChIZWFwUm9vdFZpc2l0b3ImKTsKICAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cyhk
b3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZW5kTWFya2luZygpOwogCkBAIC01MTgsNyAr
NTExLDggQEAgcHJpdmF0ZToKIAogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7
CiAgICAgCi0gICAgU2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2xvdFZpc2l0b3I+IG1fY29sbGVjdG9yU2xvdFZpc2l0b3I7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE1hcmtTdGFja0FycmF5PiBtX211dGF0b3JNYXJrU3RhY2s7CiAKICAgICAvLyBXZSBwb29s
IHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdz
IHVzZWZ1bCB0byBiZSBhYmxlIHRvCiAgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0
J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkg
ZnJvbQpAQCAtNTM3LDcgKzUzMSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU2FmZVRvQ29s
bGVjdDsKIAogICAgIFdyaXRlQmFycmllckJ1ZmZlciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKLSAg
ICBib29sIG1fYmFycmllclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJy
aWVyKCkgfTsKKyAgICBib29sIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkIHsgT3B0aW9uczo6Zm9y
Y2VGZW5jZWRCYXJyaWVyKCkgfTsKICAgICB1bnNpZ25lZCBtX2JhcnJpZXJUaHJlc2hvbGQgeyBP
cHRpb25zOjpmb3JjZUZlbmNlZEJhcnJpZXIoKSA/IHRhdXRvbG9naWNhbFRocmVzaG9sZCA6IGJs
YWNrVGhyZXNob2xkIH07CiAKICAgICBWTSogbV92bTsKQEAgLTU3Miw3ICs1NjYsOCBAQCBwcml2
YXRlOgogCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5n
Q29uZGl0aW9uVmFyaWFibGU7Ci0gICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7
CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtTdGFja0FycmF5PiBtX3NoYXJlZENvbGxlY3Rvck1h
cmtTdGFjazsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TWFya1N0YWNrQXJyYXk+IG1fc2hhcmVkTXV0
YXRvck1hcmtTdGFjazsKICAgICB1bnNpZ25lZCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJz
IHsgMCB9OwogICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IHsgZmFsc2UgfTsK
QEAgLTYwMCw2ICs1OTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
dXRhdG9yV2FpdGluZ0JpdCA9IDF1IDw8IDV1OyAvLyBBbGxvd3MgdGhlIG11dGF0b3IgdG8gdXNl
IHRoaXMgYXMgYSBjb25kaXRpb24gdmFyaWFibGUuCiAgICAgQXRvbWljPHVuc2lnbmVkPiBtX3dv
cmxkU3RhdGU7CiAgICAgYm9vbCBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9w
cGVkIHsgZmFsc2UgfTsKKyAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAg
RGVxdWU8T3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPj4gbV9yZXF1ZXN0czsKICAgICBUaWNrZXQg
bV9sYXN0U2VydmVkVGlja2V0IHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDYgKzM2
LDM0IEBAIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheSgpCiB7CiB9CiAKK3ZvaWQgTWFy
a1N0YWNrQXJyYXk6OnRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKKyAgICAKKyAgICAvLyBSZW1vdmUgb3VyIGhl
YWQgYW5kIHRoZSBoZWFkIG9mIHRoZSBvdGhlciBsaXN0LgorICAgIEdDQXJyYXlTZWdtZW50PGNv
bnN0IEpTQ2VsbCo+KiBteUhlYWQgPSBtX3NlZ21lbnRzLnJlbW92ZUhlYWQoKTsKKyAgICBHQ0Fy
cmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogb3RoZXJIZWFkID0gb3RoZXIubV9zZWdtZW50cy5y
ZW1vdmVIZWFkKCk7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzLS07CisgICAgb3RoZXIubV9udW1i
ZXJPZlNlZ21lbnRzLS07CisgICAgCisgICAgb3RoZXIubV9zZWdtZW50cy5hcHBlbmQobV9zZWdt
ZW50cyk7CisgICAgCisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzICs9IG1fbnVtYmVyT2ZT
ZWdtZW50czsKKyAgICBtX251bWJlck9mU2VnbWVudHMgPSAwOworICAgIAorICAgIC8vIFB1dCB0
aGUgb3JpZ2luYWwgaGVhZHMgYmFjayBpbiB0aGVpciBwbGFjZXMuCisgICAgbV9zZWdtZW50cy5w
dXNoKG15SGVhZCk7CisgICAgb3RoZXIubV9zZWdtZW50cy5wdXNoKG90aGVySGVhZCk7CisgICAg
bV9udW1iZXJPZlNlZ21lbnRzKys7CisgICAgb3RoZXIubV9udW1iZXJPZlNlZ21lbnRzKys7Cisg
ICAgCisgICAgd2hpbGUgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAgcmVmaWxsKCk7CisgICAgICAg
IHdoaWxlIChjYW5SZW1vdmVMYXN0KCkpCisgICAgICAgICAgICBvdGhlci5hcHBlbmQocmVtb3Zl
TGFzdCgpKTsKKyAgICB9Cit9CisKIHZvaWQgTWFya1N0YWNrQXJyYXk6OmRvbmF0ZVNvbWVDZWxs
c1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcikKIHsKICAgICAvLyBUcnkgdG8gZG9uYXRlIGFib3V0
IDEgLyAyIG9mIG91ciBjZWxscy4gVG8gcmVkdWNlIGNvcHlpbmcgY29zdHMsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsOCArMzUsOSBAQCBjbGFzcyBNYXJrU3RhY2tBcnJheSA6IHB1YmxpYyBHQ1NlZ21lbnRlCiBw
dWJsaWM6CiAgICAgTWFya1N0YWNrQXJyYXkoKTsKIAotICAgIHZvaWQgZG9uYXRlU29tZUNlbGxz
VG8oTWFya1N0YWNrQXJyYXkmIG90aGVyKTsKLSAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShN
YXJrU3RhY2tBcnJheSYgb3RoZXIsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOworICAgIHZvaWQg
dHJhbnNmZXJUbyhNYXJrU3RhY2tBcnJheSYpOworICAgIHZvaWQgZG9uYXRlU29tZUNlbGxzVG8o
TWFya1N0YWNrQXJyYXkmKTsKKyAgICB2b2lkIHN0ZWFsU29tZUNlbGxzRnJvbShNYXJrU3RhY2tB
cnJheSYsIHNpemVfdCBpZGxlVGhyZWFkQ291bnQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZEFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNiBAQCB2b2lkKiBN
YXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRlSW4oTWFya2VkCiB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6
OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCiB7CiAgICAgQVNTRVJU
KGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5oYXNBbnlOZXdseUFsbG9jYXRlZCgpKTsKICAg
ICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCiAgICAgRnJlZUxpc3QgZnJl
ZUxpc3QgPSBibG9jay0+c3dlZXAoTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBUb0ZyZWVMaXN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDE0IEBAIE1hcmtlZEJsb2NrOjpNYXJr
ZWRCbG9jayhWTSYgdm0sIEhhbmRsZSYKICAgICAsIG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1f
dm0oJnZtKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRo
aXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRs
ZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3
ZWVwTW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3
bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6
TWFya3NNb2RlIG1hcmtzTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5
TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9k
ZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6TWFya3NNb2RlIG1hcmtzTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEo
ZGVzdHJ1Y3Rpb25Nb2RlID09IERvZXNOb3ROZWVkRGVzdHJ1Y3Rpb24gJiYgc3dlZXBNb2RlID09
IFN3ZWVwT25seSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoZGVzdHJ1Y3Rpb25Nb2RlID09IEJs
b2NrSGFzTm9EZXN0cnVjdG9ycyAmJiBzd2VlcE1vZGUgPT0gU3dlZXBPbmx5KSk7CiAgICAgCiAg
ICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCkBAIC05OSw3
ICsxMDEsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAgICAg
aWYgKE9wdGlvbnM6OnVzZUJ1bXBBbGxvY2F0b3IoKQogICAgICAgICAmJiBlbXB0eU1vZGUgPT0g
SXNFbXB0eQogICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXds
eUFsbG9jYXRlZCkgewotICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUpOwor
ICAgICAgICBBU1NFUlQobWFya3NNb2RlID09IE1hcmtzU3RhbGUgfHwgYmxvY2subV9tYXJrcy5p
c0VtcHR5KCkpOwogICAgICAgICAKICAgICAgICAgY2hhciogc3RhcnRPZkxhc3RDZWxsID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygpICsgbV9lbmRBdG9tIC0gMSkp
OwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxhc3RDZWxsICsgY2VsbFNpemUo
KTsKQEAgLTExMSw2ICsxMTMsOCBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVj
aWFsaXplCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9hbGxvY2F0b3ItPnNldElzRW1wdHkodGhpcywgdHJ1ZSk7CisgICAgICAgIGlm
IChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2so
KTsKICAgICAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6OmJ1bXAocGF5bG9hZEVuZCwg
cGF5bG9hZEVuZCAtIHBheWxvYWRCZWdpbik7CiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIlF1aWNrbHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcih0aGlzKSwgIiB3
aXRoIGNlbGwgc2l6ZSAiLCBjZWxsU2l6ZSgpLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1fYXR0cmli
dXRlcywgIjogIiwgcmVzdWx0LCAiXG4iKTsKQEAgLTEyMywxNyArMTI3LDExIEBAIEZyZWVMaXN0
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICBGcmVlQ2VsbCogaGVhZCA9IDA7
CiAgICAgc2l6ZV90IGNvdW50ID0gMDsKICAgICBib29sIGlzRW1wdHkgPSB0cnVlOwotICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVy
Q2VsbCkgewotICAgICAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5Ci0gICAgICAgICAgICAm
JiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGJsb2NrLm1fbWFya3MuZ2V0KGkpKQot
ICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0
ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgewotICAgICAgICAgICAgaXNFbXB0eSA9
IGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAg
VmVjdG9yPHNpemVfdD4gZGVhZENlbGxzOworICAgIGF1dG8gaGFuZGxlRGVhZENlbGwgPSBbJl0g
KHNpemVfdCBpKSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8SGVhcENlbGwqPigmYmxvY2suYXRvbXMoKVtpXSk7CiAKLSAgICAgICAgaWYgKGRlc3RydWN0
aW9uTW9kZSA9PSBOZWVkc0Rlc3RydWN0aW9uICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKKyAg
ICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgZW1w
dHlNb2RlID09IE5vdEVtcHR5KQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SlNDZWxsKj4oY2Vs
bCktPmNhbGxEZXN0cnVjdG9yKCp2bSgpKTsKIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3
ZWVwVG9GcmVlTGlzdCkgewpAQCAtMTQ0LDEyICsxNDIsMzMgQEAgRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgaGVhZCA9IGZyZWVDZWxsOwogICAg
ICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAg
ICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKKyAgICAgICAgICAgICYmICgobWFya3NNb2Rl
ID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAgICAg
ICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5
QWxsb2NhdGVkLmdldChpKSkpKSB7CisgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGRlc3Ry
dWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKQor
ICAgICAgICAgICAgZGVhZENlbGxzLmFwcGVuZChpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaGFuZGxlRGVhZENlbGwoaSk7CiAgICAgfQotCisgICAgCiAgICAgLy8gV2Ugb25seSB3YW50
IHRvIGRpc2NhcmQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMgaWYgd2UncmUgY3JlYXRpbmcgYSBG
cmVlTGlzdCwKICAgICAvLyBvdGhlcndpc2Ugd2Ugd291bGQgbG9zZSBpbmZvcm1hdGlvbiBvbiB3
aGF0J3MgY3VycmVudGx5IGFsaXZlLgogICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVM
aXN0ICYmIG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKICAgICAgICAg
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CisgICAg
CisgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICBibG9jay5tX2xvY2sudW5s
b2NrKCk7CisgICAgCisgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0
b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgOiBkZWFk
Q2VsbHMpCisgICAgICAgICAgICBoYW5kbGVEZWFkQ2VsbChpKTsKKyAgICB9CiAKICAgICBGcmVl
TGlzdCByZXN1bHQgPSBGcmVlTGlzdDo6bGlzdChoZWFkLCBjb3VudCAqIGNlbGxTaXplKCkpOwog
ICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQpAQCAtMTc3LDEyICsxOTYsMTgg
QEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoU3dlZQogICAgIAogICAgIEFT
U0VSVCghbV9hbGxvY2F0b3ItPmlzQWxsb2NhdGVkKHRoaXMpKTsKICAgICAKLSAgICBpZiAobV9h
dHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24pCi0gICAgICAgIHJldHVy
biBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxOZWVkc0Rlc3RydWN0aW9uPihzd2VlcE1v
ZGUpOwotICAgIHJldHVybiBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxlTW9kZTxEb2VzTm90TmVl
ZERlc3RydWN0aW9uPihzd2VlcE1vZGUpOworICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkK
KyAgICAgICAgYmxvY2soKS5tX2xvY2subG9jaygpOworICAgIAorICAgIGlmIChtX2F0dHJpYnV0
ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikgeworICAgICAgICBpZiAoc3BhY2Uo
KS0+aXNNYXJraW5nKCkpCisgICAgICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3Jp
YmJsZU1vZGU8QmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZz4oc3dlZXBN
b2RlKTsKKyAgICAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2Nr
SGFzRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CisgICAgfQorICAgIHJldHVybiBzd2VlcEhlbHBl
clNlbGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc05vRGVzdHJ1Y3RvcnM+KHN3ZWVwTW9kZSk7CiB9
CiAKLXRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+Cit0ZW1wbGF0ZTxN
YXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGU+
CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxl
TW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChzY3JpYmJsZUZyZWVDZWxscygp
KQpAQCAtMTkwLDcgKzIxNSw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVw
SGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGU8ZGVzdHJ1Y3Rpb25N
b2RlLCBEb250U2NyaWJibGU+KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPERlc3RydWN0aW9u
TW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBz
Y3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9k
ZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBl
clNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIC8vIEl0J3Mgbm90
IG9idmlvdXMsIGJ1dCB0aGlzIGlzIHRoZSBvbmx5IHdheSB0byBrbm93IGlmIHRoZSBibG9jayBp
cyBlbXB0eS4gSXQncyB0aGUgb25seQpAQCAtMjA1LDcgKzIzMCw3IEBAIEZyZWVMaXN0IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RI
YXNOZXdseUFsbG9jYXRlZDxOb3RFbXB0eSwgZGVzdHJ1Y3Rpb25Nb2RlLCBzY3JpYmJsZU1vZGU+
KHN3ZWVwTW9kZSk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9k
ZSBlbXB0eU1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9j
azo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2Vl
cERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNj
cmliYmxlTW9kZSBzY3JpYmJsZU1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
d2VlcEhlbHBlclNlbGVjdEhhc05ld2x5QWxsb2NhdGVkKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7
CiAgICAgaWYgKGhhc0FueU5ld2x5QWxsb2NhdGVkKCkpCkBAIC0yMTMsNyArMjM4LDcgQEAgRnJl
ZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZQogICAgIHJldHVybiBzd2VlcEhl
bHBlclNlbGVjdFN3ZWVwTW9kZTxlbXB0eU1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVN
b2RlLCBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0
ZTxNYXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1v
ZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2Ny
aWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlB
bGxvY2F0ZWRNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVt
cHR5TW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRN
b2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RTd2Vl
cE1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVw
VG9GcmVlTGlzdCkKQEAgLTIyMSwxMCArMjQ2LDE2IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnN3ZWVwSGVscGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGU8
ZW1wdHlNb2RlLCBTd2VlcE9ubHksIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJibGVNb2RlLCBuZXds
eUFsbG9jYXRlZE1vZGU+KCk7CiB9CiAKLXRlbXBsYXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVt
cHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1v
ZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxs
b2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGU+Cit0ZW1wbGF0ZTxNYXJrZWRCbG9jazo6SGFu
ZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcE1vZGUg
c3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0aW9uTW9kZSBkZXN0
cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1v
ZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRl
ZE1vZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlclNlbGVjdE1h
cmtzTW9kZSgpCiB7Ci0gICAgaWYgKGFyZU1hcmtzU3RhbGUoKSkKKyAgICBIZWFwVmVyc2lvbiBt
YXJraW5nVmVyc2lvbiA9IHNwYWNlKCktPm1hcmtpbmdWZXJzaW9uKCk7CisgICAgYm9vbCBtYXJr
c0FyZVVzZWZ1bCA9ICFibG9jaygpLmFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pOworICAg
IAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgbWFya3NBcmVVc2VmdWwg
fD0gYmxvY2soKS5tYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lv
bik7CisgICAgCisgICAgaWYgKCFtYXJrc0FyZVVzZWZ1bCkKICAgICAgICAgcmV0dXJuIHNwZWNp
YWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2NyaWJi
bGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzU3RhbGU+KCk7CiAgICAgcmV0dXJuIHNw
ZWNpYWxpemVkU3dlZXA8ZW1wdHlNb2RlLCBzd2VlcE1vZGUsIGRlc3RydWN0aW9uTW9kZSwgc2Ny
aWJibGVNb2RlLCBuZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtzTm90U3RhbGU+KCk7CiB9CkBAIC0y
NDEsMjQgKzI3Miw2IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUK
ICAgICBtX2lzRnJlZUxpc3RlZCA9IHRydWU7CiB9CiAKLWNsYXNzIFNldE5ld2x5QWxsb2NhdGVk
RnVuY3RvciA6IHB1YmxpYyBNYXJrZWRCbG9jazo6Vm9pZEZ1bmN0b3IgewotcHVibGljOgotICAg
IFNldE5ld2x5QWxsb2NhdGVkRnVuY3RvcihNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaykKLSAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQotICAgIHsKLSAgICB9Ci0KLSAgICBJdGVyYXRpb25TdGF0
dXMgb3BlcmF0b3IoKShIZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIGNvbnN0Ci0gICAg
ewotICAgICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNlbGwpID09ICZtX2Jsb2Nr
LT5ibG9jaygpKTsKLSAgICAgICAgbV9ibG9jay0+c2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0g
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2Jsb2NrOwotfTsKLQogdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7
CiAgICAgaWYgKGZhbHNlKQpAQCAtMjY2LDEyICsyNzksMTcgQEAgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzdG9wQWxsb2NhdGluZwogICAgIEFTU0VSVCghYWxsb2NhdG9yKCktPmlzQWxsb2Nh
dGVkKHRoaXMpKTsKIAogICAgIGlmICghaXNGcmVlTGlzdGVkKCkpIHsKKyAgICAgICAgaWYgKGZh
bHNlKQorICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVk
LlxuIik7CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgZGlkbid0IHVzZSB0
aGlzIGJsb2NrIGF0IGFsbCBmb3IgYWxsb2NhdGlvbiBzaW5jZSBsYXN0IEdDLAogICAgICAgICAv
LyBvciBzb21lb25lIGhhZCBhbHJlYWR5IGRvbmUgc3RvcEFsbG9jYXRpbmcoKSBiZWZvcmUuCiAg
ICAgICAgIEFTU0VSVChmcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCisgICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJGcmVl
IGxpc3Q6ICIsIGZyZWVMaXN0LCAiXG4iKTsKKyAgICAKICAgICAvLyBSb2xsIGJhY2sgdG8gYSBj
b2hlcmVudCBzdGF0ZSBmb3IgSGVhcCBpbnRyb3NwZWN0aW9uLiBDZWxscyBuZXdseQogICAgIC8v
IGFsbG9jYXRlZCBmcm9tIG91ciBmcmVlIGxpc3QgYXJlIG5vdCBjdXJyZW50bHkgbWFya2VkLCBz
byB3ZSBuZWVkIGFub3RoZXIKICAgICAvLyB3YXkgdG8gdGVsbCB3aGF0J3MgbGl2ZSB2cyBkZWFk
LiAKQEAgLTI3OSwxMiArMjk3LDE3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFs
bG9jYXRpbmcKICAgICBtX25ld2x5QWxsb2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJz
aW9uKCk7CiAKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgZnVuY3Rvcih0aGlzKTsKLSAg
ICBmb3JFYWNoQ2VsbChmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ2VsbCgKKyAgICAgICAgWyZdIChI
ZWFwQ2VsbCogY2VsbCwgSGVhcENlbGw6OktpbmQpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CisgICAg
ICAgICAgICBzZXROZXdseUFsbG9jYXRlZChjZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBJdGVy
YXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKIAogICAgIGZvckVhY2hGcmVlQ2Vs
bCgKICAgICAgICAgZnJlZUxpc3QsCiAgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwpIHsKKyAg
ICAgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJGcmVlIGNlbGw6
ICIsIFJhd1BvaW50ZXIoY2VsbCksICJcbiIpOwogICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRl
cy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3RydWN0aW9uKQogICAgICAgICAgICAgICAgIGNlbGwt
PnphcCgpOwogICAgICAgICAgICAgY2xlYXJOZXdseUFsbG9jYXRlZChjZWxsKTsKQEAgLTMwNywx
MCArMzMwLDE0IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIAog
RnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7CisgICAg
aWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJs
b2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmchXG4iKTsKICAgICBBU1NFUlQoIWFsbG9jYXRv
cigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAK
ICAgICBpZiAoIWhhc0FueU5ld2x5QWxsb2NhdGVkKCkpIHsKKyAgICAgICAgaWYgKGZhbHNlKQor
ICAgICAgICAgICAgZGF0YUxvZygiVGhlcmUgYWluJ3Qgbm8gbmV3bHkgYWxsb2NhdGVkLlxuIik7
CiAgICAgICAgIC8vIFRoaXMgbWVhbnMgd2UgaGFkIGFscmVhZHkgZXhoYXVzdGVkIHRoZSBibG9j
ayB3aGVuIHdlIHN0b3BwZWQgYWxsb2NhdGlvbi4KICAgICAgICAgcmV0dXJuIEZyZWVMaXN0KCk7
CiAgICAgfQpAQCAtMzU0LDYgKzM4MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJr
U2xvdyhIZWFwVmUKICAgICAKICAgICBpZiAoaGFuZGxlKCkuYWxsb2NhdG9yKCktPmlzQWxsb2Nh
dGVkKCZoYW5kbGUoKSkKICAgICAgICAgfHwgIW1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJr
aW5nKG1hcmtpbmdWZXJzaW9uKSkgeworICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBk
YXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IENsZWFyaW5nIG1hcmtzIHdpdGhvdXQgZG9pbmcg
YW55dGhpbmcgZWxzZS5cbiIpOwogICAgICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUg
YmxvY2sgaXMgZnVsbCBhbmQgaXMgYWxyZWFkeSByZWNvZ25pemVkIGFzIHN1Y2gsIG9yIHRoYXQg
dGhlCiAgICAgICAgIC8vIGJsb2NrIGRpZCBub3Qgc3Vydml2ZSB0aGUgcHJldmlvdXMgR0MuIFNv
LCB3ZSBjYW4gY2xlYXIgbWFyayBiaXRzIHRoZSBvbGQgZmFzaGlvbmVkCiAgICAgICAgIC8vIHdh
eS4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIHN1Y2ggYSBibG9jayB0byBoYXZlIG5ld2x5
QWxsb2NhdGVkIHdpdGggYW4gdXAtdG8tCkBAIC0zNjIsNiArMzkxLDggQEAgdm9pZCBNYXJrZWRC
bG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3
bHlBbGxvY2F0ZWQuCiAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyks
ICI6IERvaW5nIHRoaW5ncy5cbiIpOwogICAgICAgICBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRl
ZFZlcnNpb24gPSBzcGFjZSgpLT5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKICAgICAgICAgaWYg
KGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVyc2lv
bikgewogICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIG1hcmtlZCBpbnRvIG5l
d2x5QWxsb2NhdGVkLiBJZiB3ZSBnZXQgdGhlIGZ1bGwgc2V0IG9mIGJpdHMKQEAgLTQyOSw3ICs0
NjAsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlCiAgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29u
c3VtZUZyZWVMaXN0IVxuIik7CiAgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKICAgICBtX2lz
RnJlZUxpc3RlZCA9IGZhbHNlOwotICAgIGFsbG9jYXRvcigpLT5zZXRJc0FsbG9jYXRlZCh0aGlz
LCB0cnVlKTsKKyAgICBhbGxvY2F0b3IoKS0+YXRvbWljU2V0QW5kQ2hlY2tJc0FsbG9jYXRlZCh0
aGlzLCB0cnVlKTsKIH0KIAogc2l6ZV90IE1hcmtlZEJsb2NrOjptYXJrQ291bnQoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMDg2NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTAsMzAgKzE5MCwzMiBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAg
SGFuZGxlKEhlYXAmLCB2b2lkKik7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVj
dGlvbk1vZGU+CisgICAgICAgIGVudW0gU3dlZXBEZXN0cnVjdGlvbk1vZGUgeyBCbG9ja0hhc05v
RGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnMsIEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRD
b2xsZWN0b3JJc1J1bm5pbmcgfTsKKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPFN3ZWVwRGVz
dHJ1Y3Rpb25Nb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdFNjcmliYmxl
TW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAgICAgCiAgICAgICAgIGVudW0g
U2NyaWJibGVNb2RlIHsgRG9udFNjcmliYmxlLCBTY3JpYmJsZSB9OwogICAgICAgICAgICAgCi0g
ICAgICAgIHRlbXBsYXRlPERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAgICAgICB0
ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgogICAgICAgICBGcmVl
TGlzdCBzd2VlcEhlbHBlclNlbGVjdEVtcHR5TW9kZShTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwog
ICAgICAgICAgICAgCiAgICAgICAgIGVudW0gRW1wdHlNb2RlIHsgSXNFbXB0eSwgTm90RW1wdHkg
fTsKICAgICAgICAgCi0gICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2Rl
LCBTY3JpYmJsZU1vZGU+CisgICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxl
Y3RIYXNOZXdseUFsbG9jYXRlZChTd2VlcE1vZGUgPSBTd2VlcE9ubHkpOwogICAgICAgICAKICAg
ICAgICAgZW51bSBOZXdseUFsbG9jYXRlZE1vZGUgeyBIYXNOZXdseUFsbG9jYXRlZCwgRG9lc05v
dEhhdmVOZXdseUFsbG9jYXRlZCB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8RW1wdHlN
b2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgor
ICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJs
ZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJT
ZWxlY3RTd2VlcE1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgCi0gICAgICAg
IHRlbXBsYXRlPEVtcHR5TW9kZSwgU3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxl
TW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3
ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0
ZWRNb2RlPgogICAgICAgICBGcmVlTGlzdCBzd2VlcEhlbHBlclNlbGVjdE1hcmtzTW9kZSgpOwog
ICAgICAgICAKICAgICAgICAgZW51bSBNYXJrc01vZGUgeyBNYXJrc1N0YWxlLCBNYXJrc05vdFN0
YWxlIH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwg
RGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZSwgTWFya3NN
b2RlPgorICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0cnVj
dGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGU+CiAg
ICAgICAgIEZyZWVMaXN0IHNwZWNpYWxpemVkU3dlZXAoKTsKICAgICAgICAgICAgIAogICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkU3BhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZFNwYWNlLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsNyArNDEy
LDYgQEAgdm9pZCBNYXJrZWRTcGFjZTo6cHJlcGFyZUZvck1hcmtpbmcoKQogCiB2b2lkIE1hcmtl
ZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBBU1NFUlQoaXNJdGVyYXRpbmcoKSk7
CiAgICAgZm9yRWFjaEFsbG9jYXRvcigKICAgICAgICAgWyZdIChNYXJrZWRBbGxvY2F0b3ImIGFs
bG9jYXRvcikgLT4gSXRlcmF0aW9uU3RhdHVzIHsKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXN1
bWVBbGxvY2F0aW5nKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDcgQEAgc3RhdGlj
IHZvaWQgdmFsaWRhdGUoSlNDZWxsKiBjZWxsKQogI2VuZGlmCiAKIFNsb3RWaXNpdG9yOjpTbG90
VmlzaXRvcihIZWFwJiBoZWFwKQotICAgIDogbV9zdGFjaygpCi0gICAgLCBtX2J5dGVzVmlzaXRl
ZCgwKQotICAgICwgbV9ieXRlc0NvcGllZCgwKQorICAgIDogbV9ieXRlc1Zpc2l0ZWQoMCkKICAg
ICAsIG1fdmlzaXRDb3VudCgwKQogICAgICwgbV9pc0luUGFyYWxsZWxNb2RlKGZhbHNlKQogICAg
ICwgbV9tYXJraW5nVmVyc2lvbihNYXJrZWRTcGFjZTo6aW5pdGlhbFZlcnNpb24pCkBAIC05MSw3
ICs4OSw3IEBAIFNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcihIZWFwJiBoZWFwKQogCiBTbG90Vmlz
aXRvcjo6flNsb3RWaXNpdG9yKCkKIHsKLSAgICBjbGVhck1hcmtTdGFjaygpOworICAgIGNsZWFy
TWFya1N0YWNrcygpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQpA
QCAtMTA5LDE2ICsxMDcsMTcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkK
IAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogeworICAgIFJFTEVBU0VfQVNTRVJUKCFtX29w
YXF1ZVJvb3RzLnNpemUoKSk7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwotICAgIG1fYnl0ZXND
b3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CiAgICAgbV9oZWFwU25hcHNob3RCdWls
ZGVyID0gbnVsbHB0cjsKLSAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJr
U3RhY2soKQordm9pZCBTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKCkKIHsKLSAgICBtX3N0
YWNrLmNsZWFyKCk7CisgICAgbV9jb2xsZWN0b3JTdGFjay5jbGVhcigpOworICAgIG1fbXV0YXRv
clN0YWNrLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChDb25zZXJ2YXRp
dmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMpCkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSlNDZWxsT3JBdXhpbGlhcgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6
Ok5ld0dyZXkpOworICAgICAgICBqc0NlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6OkdyZXkp
OwogCiAgICAgICAgIGFwcGVuZFRvTWFya1N0YWNrKGpzQ2VsbCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTIxMCw3ICsyMDksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnNldE1h
cmtlCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgb2JqZWN0IGlzIGdyZXkgYW5kIHRoYXQ6CiAg
ICAgLy8gSW4gY2FzZSBvZiBjb25jdXJyZW50IEdDOiBpdCdzIHRoZSBmaXJzdCB0aW1lIGl0IGlz
IGdyZXkgaW4gdGhpcyBHQyBjeWNsZS4KICAgICAvLyBJbiBjYXNlIG9mIGVkZW4gY29sbGVjdGlv
bjogaXQncyBhIG5ldyBvYmplY3QgdGhhdCBiZWNhbWUgZ3JleSByYXRoZXIgdGhhbiBhbiBvbGQg
cmVtZW1iZXJlZCBvYmplY3QuCi0gICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3
R3JleSk7CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CiAgICAgCiAg
ICAgYXBwZW5kVG9NYXJrU3RhY2soY29udGFpbmVyLCBjZWxsKTsKIH0KQEAgLTIyOCwxNiArMjI3
LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG8KIHsKICAgICBB
U1NFUlQoSGVhcDo6aXNNYXJrZWRDb25jdXJyZW50bHkoY2VsbCkpOwogICAgIEFTU0VSVCghY2Vs
bC0+aXNaYXBwZWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENlbGxTdGF0
ZTo6TmV3R3JleSB8fCBjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok9sZEdyZXkpOwor
ICAgIEFTU0VSVChjZWxsLT5jZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6OkdyZXkpOwogICAgIAog
ICAgIGNvbnRhaW5lci5ub3RlTWFya2VkKCk7CiAgICAgCi0gICAgLy8gRklYTUU6IFRoZXNlICJq
dXN0IHdvcmsiIGJlY2F1c2UgdGhlIEdDIHJlc2V0cyB0aGVzZSBmaWVsZHMgYmVmb3JlIGRvaW5n
IGFueXRoaW5nIGVsc2UuIEJ1dAotICAgIC8vIHRoYXQgd29uJ3QgYmUgdGhlIGNhc2Ugd2hlbiB3
ZSBkbyBjb25jdXJyZW50IEdDLgogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0ZXNWaXNp
dGVkICs9IGNvbnRhaW5lci5jZWxsU2l6ZSgpOwogICAgIAotICAgIG1fc3RhY2suYXBwZW5kKGNl
bGwpOworICAgIG1fY29sbGVjdG9yU3RhY2suYXBwZW5kKGNlbGwpOworfQorCit2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRUb011dGF0b3JNYXJrU3RhY2soY29uc3QgSlNDZWxsKiBjZWxsKQorewor
ICAgIG1fbXV0YXRvclN0YWNrLmFwcGVuZChjZWxsKTsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6
bWFya0F1eGlsaWFyeShjb25zdCB2b2lkKiBiYXNlKQpAQCAtMjk0LDEyICsyOTYsMTcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaQogICAgIAogICAgIFNldEN1cnJl
bnRDZWxsU2NvcGUgY3VycmVudENlbGxTY29wZSgqdGhpcywgY2VsbCk7CiAgICAgCi0gICAgbV9v
bGRDZWxsU3RhdGUgPSBjZWxsLT5jZWxsU3RhdGUoKTsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAg
ICAgZGF0YUxvZygiVmlzaXRpbmcgIiwgUmF3UG9pbnRlcihjZWxsKSk7CisgICAgICAgIGlmICht
X2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgICAgICBkYXRhTG9nKCIgKG11dGF0b3Ip
Iik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQogICAgIAotICAgIC8vIFRoZXJlIGlz
IG5vIHJhY2UgaGVyZSAtIHRoZSBjZWxsIHN0YXRlIGNhbm5vdCBjaGFuZ2UgcmlnaHQgbm93LiBH
cmV5IG9iamVjdHMgY2FuIG9ubHkgYmUKLSAgICAvLyB2aXNpdGVkIGJ5IG9uZSBtYXJraW5nIHRo
cmVhZC4gTmVpdGhlciB0aGUgYmFycmllciBub3IgbWFya2luZyB3aWxsIGNoYW5nZSB0aGUgc3Rh
dGUgb2YgYW4KLSAgICAvLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IGdyZXkuCi0gICAgQVNTRVJU
KG1fb2xkQ2VsbFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSB8fCBtX29sZENlbGxTdGF0ZSA9
PSBDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIC8vIEZ1bm55IHN0b3J5OiBpdCdzIHBvc3NpYmxl
IGZvciB0aGUgb2JqZWN0IHRvIGJlIGJsYWNrIGFscmVhZHksIGlmIHdlIGJhcnJpZXIgdGhlIG9i
amVjdCBhdAorICAgIC8vIGFib3V0IHRoZSBzYW1lIHRpbWUgdGhhdCBpdCdzIG1hcmtlZC4gVGhh
dCdzIGZpbmUuIEl0J3MgYSBnbmFybHkgYW5kIHN1cGVyLXJhcmUgcmFjZS4gSXQncworICAgIC8v
IG5vdCBjbGVhciB0byBtZSB0aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3Qgb3IgcHJvZml0YWJsZSB0
byBiYWlsIGhlcmUgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5CisgICAgLy8gYmxhY2suCiAgICAg
CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwog
ICAgIApAQCAtMzI2LDIzICszMzMsMjMgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9y
Ojp2aXNpdENoaQogICAgIH0KICAgICAKICAgICBpZiAoVU5MSUtFTFkobV9oZWFwU25hcHNob3RC
dWlsZGVyKSkgewotICAgICAgICBpZiAobV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdH
cmV5KQorICAgICAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKICAgICAgICAgICAg
IG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kTm9kZShjb25zdF9jYXN0PEpTQ2VsbCo+KGNl
bGwpKTsKICAgICB9CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwo
KQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYg
ZnJvbSwgTWFya1N0YWNrQXJyYXkmIHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUt
dHJ5IG9mdGVuLCB3ZSBjYW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCiAgICAgLy8g
YXNzdW1lIHRoYXQgZG9uYXRpbmcgaXMgbm90IHByb2ZpdGFibGUuCiAKICAgICAvLyBBdm9pZCBs
b2NraW5nIHdoZW4gYSB0aHJlYWQgcmVhY2hlcyBhIGRlYWQgZW5kIGluIHRoZSBvYmplY3QgZ3Jh
cGguCi0gICAgaWYgKG1fc3RhY2suc2l6ZSgpIDwgMikKKyAgICBpZiAoZnJvbS5zaXplKCkgPCAy
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgc29tZSBzaGFy
ZWQgd29yayBxdWV1ZWQgdXAsIGJlIGNvbnNlcnZhdGl2ZSBhbmQgYXNzdW1lCiAgICAgLy8gdGhh
dCBkb25hdGluZyBtb3JlIGlzIG5vdCBwcm9maXRhYmxlLgotICAgIGlmIChtX2hlYXAubV9zaGFy
ZWRNYXJrU3RhY2suc2l6ZSgpKQorICAgIGlmICh0by5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIElmIHdlJ3JlIGNvbnRlbmRpbmcgb24gdGhlIGxvY2ssIGJlIGNvbnNlcnZhdGl2
ZSBhbmQgYXNzdW1lIHRoYXQgYW5vdGhlcgpAQCAtMzUyLDI2ICszNTksNDMgQEAgdm9pZCBTbG90
VmlzaXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBk
b25hdGUuCi0gICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2spOworICAgIGZyb20uZG9uYXRlU29tZUNlbGxzVG8odG8pOwogCiAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogfQogCi12b2lkIFNsb3RWaXNp
dG9yOjpkcmFpbigpCit2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkKK3sK
KyAgICBkb25hdGVLbm93blBhcmFsbGVsKG1fY29sbGVjdG9yU3RhY2ssICptX2hlYXAubV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2spOworICAgIGRvbmF0ZUtub3duUGFyYWxsZWwobV9tdXRhdG9y
U3RhY2ssICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrKTsKK30KKwordm9pZCBTbG90
VmlzaXRvcjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIEFTU0VSVChtX2lz
SW5QYXJhbGxlbE1vZGUpOwogICAgCi0gICAgd2hpbGUgKCFtX3N0YWNrLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93
biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0
YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCi0gICAgICAgICAgICB2aXNpdENo
aWxkcmVuKG1fc3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICB3aGlsZSAoKCFtX2NvbGxlY3RvclN0
YWNrLmlzRW1wdHkoKSB8fCAhbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpKSAmJiAhaGFzRWxhcHNl
ZCh0aW1lb3V0KSkgeworICAgICAgICBpZiAoIW1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2NvbGxlY3RvclN0YWNrLnJlZmlsbCgpOworICAgICAgICAgICAgbV9p
c1Zpc2l0aW5nTXV0YXRvclN0YWNrID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZSgpOyBtX2NvbGxlY3RvclN0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24tLTspCisg
ICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX2NvbGxlY3RvclN0YWNrLnJlbW92ZUxhc3Qo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIW1fbXV0YXRvclN0YWNrLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgbV9tdXRhdG9yU3RhY2sucmVmaWxsKCk7CisgICAgICAgICAgICAvLyBXZSBrbm93
IGZvciBzdXJlIHRoYXQgd2UgYXJlIHZpc2l0aW5nIG9iamVjdHMgYmVjYXVzZSBvZiB0aGUgYmFy
cmllciwgbm90IGJlY2F1c2Ugb2YKKyAgICAgICAgICAgIC8vIG1hcmtpbmcuIE1hcmtpbmcgd2ls
bCB2aXNpdCBhbiBvYmplY3QgZXhhY3RseSBvbmNlLiBUaGUgYmFycmllciB3aWxsIHZpc2l0IGl0
CisgICAgICAgICAgICAvLyBwb3NzaWJseSBtYW55IHRpbWVzLCBhbmQgYWx3YXlzIGFmdGVyIGl0
IHdhcyBhbHJlYWR5IG1hcmtlZC4KKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFj
ayA9IHRydWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6
Om1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX211dGF0b3JTdGFjay5j
YW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hp
bGRyZW4obV9tdXRhdG9yU3RhY2sucmVtb3ZlTGFzdCgpKTsKKyAgICAgICAgfQogICAgICAgICBk
b25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgfQogICAgIAogICAgIG1lcmdlT3BhcXVlUm9vdHNJ
Zk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hh
cmVkRHJhaW5Nb2RlIHNoYXJlZERyYWluTW9kZSkKK1Nsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJl
c3VsdCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWRE
cmFpbk1vZGUsIE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFy
YWxsZWxNb2RlKTsKICAgICAKQEAgLTM5Miw0OCArNDE2LDYwIEBAIHZvaWQgU2xvdFZpc2l0b3I6
OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIGVp
dGhlciB0ZXJtaW5hdGlvbiBpcyByZWFjaGVkLCBvciB1bnRpbCB0aGVyZSBpcyBzb21lIHdvcmsK
ICAgICAgICAgICAgICAgICAvLyBmb3IgdXMgdG8gZG8uCiAgICAgICAgICAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0
OworICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkIHdlIHJl
YWNoIHRlcm1pbmF0aW9uPwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX251bWJl
ck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXQgYW55IHNsZWVwaW5nIHNs
YXZlcyBrbm93IGl0J3MgdGltZSBmb3IgdGhlbSB0byByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OkRvbmU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElzIHRoZXJlIHdvcmsg
dG8gYmUgZG9uZT8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW1faGVhcC5tX3NoYXJl
ZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICB8
fCAhbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAvLyBPdGhlcndpc2Ugd2FpdC4KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1f
bWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jayk7CisgICAgICAgICAgICAgICAgICAg
IG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwobG9jaywgdGltZW91
dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoc2hhcmVkRHJhaW5Nb2RlID09IFNsYXZlRHJhaW4pOworCisgICAgICAgICAg
ICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgLy8gRGlkIHdlIGRldGVjdCB0ZXJtaW5hdGlvbj8gSWYgc28sIGxldCB0aGUgbWFz
dGVyIGtub3cuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VycwotICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hlYXAubV9zaGFyZWRD
b2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAgICAgICAgICAgICAgICAgICAmJiBtX2hl
YXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKIAotICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KAotICAg
ICAgICAgICAgICAgICAgICBsb2NrLAorICAgICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdD
b25kaXRpb25WYXJpYWJsZS53YWl0VW50aWwoCisgICAgICAgICAgICAgICAgICAgIGxvY2ssIHRp
bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gIW1faGVhcC5tX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAhbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNr
LT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9oZWFwLm1fc2hh
cmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgbV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdDsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gSXMgdGhlIGN1
cnJlbnQgcGhhc2UgZG9uZT8gSWYgc28sIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgICAg
ICAgICAgICAgICAgaWYgKG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpEb25lOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtX3N0YWNr
LnN0ZWFsU29tZUNlbGxzRnJvbSgKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJr
U3RhY2ssIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycyk7CisgICAgICAg
ICAgICBtX2NvbGxlY3RvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAg
ICAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldh
aXRpbmdQYXJhbGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9tdXRhdG9yU3RhY2suc3RlYWxT
b21lQ2VsbHNGcm9tKAorICAgICAgICAgICAgICAgICptX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFy
a1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAg
ICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mV2FpdGluZ1BhcmFsbGVsTWFya2Vycy0tOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBkcmFpbigpOworICAgICAgICBkcmFpbih0aW1lb3V0KTsKICAg
ICB9CiB9CiAKQEAgLTQ1Myw3ICs0ODksNiBAQCB2b2lkIFNsb3RWaXNpdG9yOjphZGRPcGFxdWVS
b290KHZvaWQqIHJvCiBib29sIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3Qodm9pZCog
cm9vdCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1faXNJblBhcmFsbGVsTW9kZSk7Ci0gICAgQVNT
RVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsKICAgICByZXR1cm4gbV9oZWFwLm1fb3BhcXVl
Um9vdHMuY29udGFpbnMocm9vdCk7CiB9CiAKQEAgLTQ2NywxMyArNTAyLDYgQEAgVHJpU3RhdGUg
U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdAogICAgIHJldHVybiBNaXhlZFRyaVN0YXRl
OwogfQogCi1pbnQgU2xvdFZpc2l0b3I6Om9wYXF1ZVJvb3RDb3VudCgpCi17Ci0gICAgQVNTRVJU
KCFtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHko
KSk7Ci0gICAgcmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLnNpemUoKTsKLX0KLQogdm9pZCBT
bG90VmlzaXRvcjo6bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCkKIHsKICAgICBpZiAobV9v
cGFxdWVSb290cy5pc0VtcHR5KCkpCkBAIC00OTcsMTUgKzUyNSwxNCBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpkb25hdGUoKQogICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKIH0KIAotdm9pZCBTbG90
VmlzaXRvcjo6ZG9uYXRlQW5kRHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQW5kRHJh
aW4oTW9ub3RvbmljVGltZSB0aW1lb3V0KQogewogICAgIGRvbmF0ZSgpOwotICAgIGRyYWluKCk7
CisgICAgZHJhaW4odGltZW91dCk7CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVl
Um9vdHMoKQogewotICAgIEFTU0VSVCghbV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91
bGQgb25seSBiZSBjYWxsZWQgd2hlbiBvcGFxdWUgcm9vdHMgYXJlIG5vbi1lbXB0eS4KICAgICB7
CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX29wYXF1ZVJvb3Rz
TXV0ZXgpOwogICAgICAgICBmb3IgKGF1dG8qIHJvb3QgOiBtX29wYXF1ZVJvb3RzKQpAQCAtNTI2
LDEwICs1NTMsOSBAQCB2b2lkIFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxGCiAg
ICAgICAgIG1faGVhcC5tX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXJzLnJlbW92ZU5leHQoKS0+Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0Cit2b2lkIFNsb3RWaXNpdG9yOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBKU0NlbGwqIGNlbGwgOiBtYXJrU3RhY2soKSkKLSAg
ICAgICAgZGF0YUxvZygqY2VsbCwgIlxuIik7CisgICAgb3V0LnByaW50KCJDb2xsZWN0b3I6IFsi
LCBwb2ludGVyTGlzdER1bXAoY29sbGVjdG9yTWFya1N0YWNrKCkpLCAiXSwgTXV0YXRvcjogWyIs
IHBvaW50ZXJMaXN0RHVtcChtdXRhdG9yTWFya1N0YWNrKCkpLCAiXSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhhbmRs
ZVR5cGVzLmgiCiAjaW5jbHVkZSAiTWFya1N0YWNrLmgiCiAjaW5jbHVkZSAiT3BhcXVlUm9vdFNl
dC5oIgorI2luY2x1ZGUgPHd0Zi9Nb25vdG9uaWNUaW1lLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC01Nyw5ICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgU2xvdFZpc2l0b3IoSGVhcCYpOwogICAg
IH5TbG90VmlzaXRvcigpOwogCi0gICAgTWFya1N0YWNrQXJyYXkmIG1hcmtTdGFjaygpIHsgcmV0
dXJuIG1fc3RhY2s7IH0KLSAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbWFya1N0YWNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGFjazsgfQotCisgICAgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1h
cmtTdGFjaygpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2s7IH0KKyAgICBNYXJrU3RhY2tBcnJh
eSYgbXV0YXRvck1hcmtTdGFjaygpIHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgY29u
c3QgTWFya1N0YWNrQXJyYXkmIGNvbGxlY3Rvck1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sbGVjdG9yU3RhY2s7IH0KKyAgICBjb25zdCBNYXJrU3RhY2tBcnJheSYgbXV0YXRvck1hcmtT
dGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fbXV0YXRvclN0YWNrOyB9CisgICAgCiAgICAgVk0mIHZt
KCk7CiAgICAgY29uc3QgVk0mIHZtKCkgY29uc3Q7CiAgICAgSGVhcCogaGVhcCgpIGNvbnN0OwpA
QCAtODQsMjQgKzg3LDIzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgY29udGFpbnNP
cGFxdWVSb290KHZvaWQqKSBjb25zdDsKICAgICBUcmlTdGF0ZSBjb250YWluc09wYXF1ZVJvb3RU
cmlTdGF0ZSh2b2lkKikgY29uc3Q7Ci0gICAgaW50IG9wYXF1ZVJvb3RDb3VudCgpOwogCi0gICAg
Ym9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9zdGFjay5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrLmlzRW1wdHkoKSAmJiBtX211dGF0b3JT
dGFjay5pc0VtcHR5KCk7IH0KIAogICAgIHZvaWQgZGlkU3RhcnRNYXJraW5nKCk7CiAgICAgdm9p
ZCByZXNldCgpOwotICAgIHZvaWQgY2xlYXJNYXJrU3RhY2soKTsKKyAgICB2b2lkIGNsZWFyTWFy
a1N0YWNrcygpOwogCiAgICAgc2l6ZV90IGJ5dGVzVmlzaXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZXNWaXNpdGVkOyB9Ci0gICAgc2l6ZV90IGJ5dGVzQ29waWVkKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlc0NvcGllZDsgfQogICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4g
bV92aXNpdENvdW50OyB9CiAKICAgICB2b2lkIGRvbmF0ZSgpOwotICAgIHZvaWQgZHJhaW4oKTsK
LSAgICB2b2lkIGRvbmF0ZUFuZERyYWluKCk7CisgICAgdm9pZCBkcmFpbihNb25vdG9uaWNUaW1l
IHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgpKTsKKyAgICB2b2lkIGRvbmF0ZUFu
ZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkp
OwogICAgIAogICAgIGVudW0gU2hhcmVkRHJhaW5Nb2RlIHsgU2xhdmVEcmFpbiwgTWFzdGVyRHJh
aW4gfTsKLSAgICB2b2lkIGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUpOworICAgIGVu
dW0gY2xhc3MgU2hhcmVkRHJhaW5SZXN1bHQgeyBEb25lLCBUaW1lZE91dCB9OworICAgIFNoYXJl
ZERyYWluUmVzdWx0IGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUsIE1vbm90b25pY1Rp
bWUgdGltZW91dCA9IE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOwogCiAgICAgdm9pZCBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoKTsKQEAgLTEyNCw2ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CiAK
KyAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vzc2FyeSgpOworCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIApAQCAtMTQxLDIxICsxNDUs
MjMgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXJUeXBlPgogICAg
IHZvaWQgYXBwZW5kVG9NYXJrU3RhY2soQ29udGFpbmVyVHlwZSYsIEpTQ2VsbCopOwogICAgIAor
ICAgIHZvaWQgYXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNvbnN0IEpTQ2VsbCopOworICAgIAog
ICAgIHZvaWQgbm90ZUxpdmVBdXhpbGlhcnlDZWxsKEhlYXBDZWxsKik7CiAgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7Ci0gICAgdm9pZCBtZXJnZU9w
YXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUoKTsKIAogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKICAgICAK
ICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKKyAgICB2b2lkIGRvbmF0ZUtub3duUGFy
YWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CiAKLSAgICBN
YXJrU3RhY2tBcnJheSBtX3N0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fY29sbGVjdG9yU3Rh
Y2s7CisgICAgTWFya1N0YWNrQXJyYXkgbV9tdXRhdG9yU3RhY2s7CiAgICAgT3BhcXVlUm9vdFNl
dCBtX29wYXF1ZVJvb3RzOyAvLyBIYW5kbGUtb3duaW5nIGRhdGEgc3RydWN0dXJlcyBub3Qgdmlz
aWJsZSB0byB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuCiAgICAgCiAgICAgc2l6ZV90IG1fYnl0ZXNW
aXNpdGVkOwotICAgIHNpemVfdCBtX2J5dGVzQ29waWVkOwogICAgIHNpemVfdCBtX3Zpc2l0Q291
bnQ7CiAgICAgYm9vbCBtX2lzSW5QYXJhbGxlbE1vZGU7CiAgICAgCkBAIC0xNjUsNyArMTcxLDcg
QEAgcHJpdmF0ZToKIAogICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNuYXBzaG90QnVp
bGRlciB7IG51bGxwdHIgfTsKICAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07
Ci0gICAgQ2VsbFN0YXRlIG1fb2xkQ2VsbFN0YXRlOworICAgIGJvb2wgbV9pc1Zpc2l0aW5nTXV0
YXRvclN0YWNrIHsgZmFsc2UgfTsKIAogcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDEzICsxMDUsMTUgQEAgaW5saW5l
IHZvaWQgU2xvdFZpc2l0b3I6OmFkZFVuY29uZGl0aW9uYQogCiBpbmxpbmUgdm9pZCBTbG90Vmlz
aXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewotICAgIGhlYXAo
KS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1fb2xkQ2VsbFN0YXRlLCBzaXplKTsKKyAgICBp
ZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAgICAgICAgaGVhcCgpLT5yZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiBp
bmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKHNpemVf
dCBzaXplKQogewotICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKG1fb2xk
Q2VsbFN0YXRlLCBzaXplKTsKKyAgICBpZiAoIW1faXNWaXNpdGluZ011dGF0b3JTdGFjaykKKyAg
ICAgICAgaGVhcCgpLT5yZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZSk7CiB9CiAjZW5k
aWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAgdm9pZCBB
c3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVyZQogICAgICAgICBqaXQuYWJvcnRXaXRo
UmVhc29uKEFIU3RydWN0dXJlSURJc1ZhbGlkKTsKICAgICAgICAgY29ycmVjdFN0cnVjdHVyZS5s
aW5rKCZqaXQpOwogCi0gICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlwZSA9IGppdC5icmFu
Y2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlKCkp
KTsKKyAgICAgICAgSnVtcCBjb3JyZWN0SW5kZXhpbmdUeXBlID0gaml0LmJyYW5jaDgoRXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlz
Y09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHN0cnVjdHVyZVB0ci0+aW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpKSk7CiAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oQUhJbmRleGluZ1R5
cGVJc1ZhbGlkKTsKICAgICAgICAgY29ycmVjdEluZGV4aW5nVHlwZS5saW5rKCZqaXQpOwogCkBA
IC00MTUsNyArNDE1LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRTdG9yZVN0cnVjdHVy
ZQogICAgIH0KICNlbHNlCiAgICAgLy8gRG8gYSAzMi1iaXQgd2lkZSBzdG9yZSB0byBpbml0aWFs
aXplIHRoZSBjZWxsJ3MgZmllbGRzLgotICAgIGppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihzdHJ1
Y3R1cmVQdHItPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigpKSwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgIGppdC5zdG9y
ZTMyKFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQdHItPm9iamVjdEluaXRpYWxpemF0aW9uQmxvYigp
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpKTsKICAgICBqaXQuc3RvcmVQdHIoc3RydWN0dXJlLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKICNlbmRpZgog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE4LDggKzEzMTgsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHN0b3JlNjQoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CiAjZWxzZQogICAgICAgICAvLyBTdG9yZSBhbGwgdGhl
IGluZm8gZmxhZ3MgdXNpbmcgYSBzaW5nbGUgMzItYml0IHdpZGUgbG9hZCBhbmQgc3RvcmUuCi0g
ICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUsIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgc3RvcmUzMihzY3Jh
dGNoLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSk7CisgICAgICAgIGxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1
cmUsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpKSwgc2Ny
YXRjaCk7CisgICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpKTsKIAogICAgICAgICAv
LyBTdG9yZSB0aGUgU3RydWN0dXJlSUQKICAgICAgICAgc3RvcmVQdHIoc3RydWN0dXJlLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsK
QEAgLTEzNTYsMTQgKzEzNTYsNDAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFPcHRp
b25zOjp1c2VDb25jdXJyZW50QmFycmllcnMoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgSnVtcCBvayA9IGp1bXBJZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5lZWRlZCgpOworICAg
ICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CiAgICAgICAgIG1l
bW9yeUZlbmNlKCk7CiAgICAgICAgIG9rLmxpbmsodGhpcyk7CiAgICAgfQogICAgIAotICAgIEp1
bXAganVtcElmQmFycmllclN0b3JlTG9hZEZlbmNlTm90TmVlZGVkKCkKKyAgICB2b2lkIG11dGF0
b3JGZW5jZSgpCiAgICAgewotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1
dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mQmFycmllclNob3VsZEJlRmVuY2VkKCkpKTsK
KyAgICAgICAgaWYgKGlzWDg2KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEp1bXAg
b2sgPSBqdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgc3RvcmVGZW5jZSgp
OworICAgICAgICBvay5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlQnV0
dGVyZmx5KEdQUlJlZyBidXR0ZXJmbHksIEdQUlJlZyBvYmplY3QpCisgICAgeworICAgICAgICBp
ZiAoaXNYODYoKSkgeworICAgICAgICAgICAgc3RvcmVQdHIoYnV0dGVyZmx5LCBBZGRyZXNzKG9i
amVjdCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEp1bXAgb2sgPSBqdW1wSWZNdXRhdG9yRmVu
Y2VOb3ROZWVkZWQoKTsKKyAgICAgICAgc3RvcmVGZW5jZSgpOworICAgICAgICBzdG9yZVB0cihi
dXR0ZXJmbHksIEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsK
KyAgICAgICAgc3RvcmVGZW5jZSgpOworICAgICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIG9rLmxpbmsodGhpcyk7CisgICAgICAgIHN0b3JlUHRyKGJ1dHRlcmZseSwgQWRkcmVzcyhv
YmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworICAgICAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgfQorICAgIAorICAgIEp1bXAganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVk
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJl
c3Modm0oKS0+aGVhcC5hZGRyZXNzT2ZNdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkpOwogICAgIH0K
ICAgICAKICAgICAvLyBFbWl0cyB0aGUgYnJhbmNoIHN0cnVjdHVyZSBmb3IgdHlwZW9mLiBUaGUg
Y29kZSBlbWl0dGVkIGJ5IHRoaXMgZG9lc24ndCBmYWxsIHRocm91Z2guIFRoZQpAQCAtMTU4OSw3
ICsxNjE1LDI5IEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xhc3NU
eXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigw
KSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJlc3MocmVzdWx0R1BS
LCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICB9CisgICAg
CisgICAgdm9pZCBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UoR1BSUmVnIGJhc2VHUFIsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGlubGluZUNhcGFjaXR5OyArK2kpCisgICAgICAgICAgICBzdG9yZVRydXN0ZWRWYWx1
ZShKU1ZhbHVlKCksIEFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpICsgaSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICB9CiAKKyAgICB2b2lk
IGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGlubGlu
ZUNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3QzMihaZXJv
LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIExhYmVsIGxvb3AgPSBsYWJlbCgpOworICAgICAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgc3RvcmVU
cnVzdGVkVmFsdWUoSlNWYWx1ZSgpLCBCYXNlSW5kZXgoYmFzZUdQUiwgaW5saW5lQ2FwYWNpdHks
IFRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSkpOworICAgICAg
ICBicmFuY2hUZXN0MzIoTm9uWmVybywgaW5saW5lQ2FwYWNpdHkpLmxpbmtUbyhsb29wLCB0aGlz
KTsKKyAgICAgICAgZW1wdHkubGluayh0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRJbml0
aWFsaXplT3V0T2ZMaW5lU3RvcmFnZShHUFJSZWcgYnV0dGVyZmx5R1BSLCB1bnNpZ25lZCBvdXRP
ZkxpbmVDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
dXRPZkxpbmVDYXBhY2l0eTsgKytpKQorICAgICAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoSlNW
YWx1ZSgpLCBBZGRyZXNzKGJ1dHRlcmZseUdQUiwgLXNpemVvZihJbmRleGluZ0hlYWRlcikgLSAo
aSArIDEpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIH0KKyAgICAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIHZvaWQgd2FuZ3NJbnQ2NEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0
LCBHUFJSZWcgc2NyYXRjaCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTk2LDcgKzk5Niw3IEBAIGlubGlu
ZSB2b2lkIEpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVcKICAgICAgICAgc3RvcmUzMihpbmRl
eGluZ1R5cGUsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
ICAgICB9CiAKLSAgICBsb2FkOChBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBpbmRleGluZ1R5cGUpOworICAgIGxvYWQ4KEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBpbmRleGluZ1R5cGUpOwogfQogCiBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwo
UmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwMSw4ICsyMjAxLDEwIEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZUIKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKICAgICBBU1NFUlQoIW9iamVjdC0+c3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gb2JqZWN0
LT5ncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsK
LSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgcmVz
dWx0KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3JlT3V0T2ZM
aW5lU3RvcmFnZSh2bSwgMCwgaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKKyAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1bHQpOwor
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHJlc3VsdCk7CiB9CiAKQEAgLTIyMTEsOCArMjIxMywxMCBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVCCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICBCdXR0ZXJm
bHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIG9iamVjdC0+c3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIG5ld1NpemUpOwotICAgIG9iamVjdC0+c2V0
QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCByZXN1bHQpOworICAgIEJ1dHRl
cmZseSogcmVzdWx0ID0gb2JqZWN0LT5hbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBv
YmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdTaXplKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCByZXN1
bHQpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRM
b2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJl
IGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgICAgICAgICAgCkBAIC0xMDE2LDYgKzEwMTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICBs
b2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CiAgICAgICAgICAgICBuZWdQdHIocmVnVDEpOwog
ICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KSkpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTEwMjQsNyArMTAyNCw2IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBp
ZiAoIWlzSW5pdGlhbGl6YXRpb24oZ2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKSB7CiAgICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBkbyBhIFREWiBjaGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHBy
b3ZlIHdlIG5lZWQgdG8gZW1pdCBURFogY2hlY2tzIHN0YXRpY2FsbHkuCkBAIC0xMDM4LDE0ICsx
MDM3LDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoq
PigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRXcml0
ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUp
KTsKICAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZh
bHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNhc2UgRHlu
YW1pYzoKQEAgLTExNTcsMTEgKzExNTcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2Fy
Z3VtZW50cyhJbnN0cgogICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CiAgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
ICAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVn
VDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBzdG9y
ZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQo
KSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKKworICAgIGVtaXRX
cml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCiAj
ZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDYgKzE3OCwxNSBA
QCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBTVEFUSUNfQVNTRVJU
KEV2YWxDb2RlID09IDEpOwogICAgIFNUQVRJQ19BU1NFUlQoRnVuY3Rpb25Db2RlID09IDIpOwog
ICAgIFNUQVRJQ19BU1NFUlQoTW9kdWxlQ29kZSA9PSAzKTsKKyAgICAKKyAgICBTVEFUSUNfQVNT
RVJUKElzQXJyYXkgPT0gMHgwMSk7CisgICAgU1RBVElDX0FTU0VSVChJbmRleGluZ1NoYXBlTWFz
ayA9PSAweDBFKTsKKyAgICBTVEFUSUNfQVNTRVJUKE5vSW5kZXhpbmdTaGFwZSA9PSAweDAwKTsK
KyAgICBTVEFUSUNfQVNTRVJUKEludDMyU2hhcGUgPT0gMHgwNCk7CisgICAgU1RBVElDX0FTU0VS
VChEb3VibGVTaGFwZSA9PSAweDA2KTsKKyAgICBTVEFUSUNfQVNTRVJUKENvbnRpZ3VvdXNTaGFw
ZSA9PSAweDA4KTsKKyAgICBTVEFUSUNfQVNTRVJUKEFycmF5U3RvcmFnZVNoYXBlID09IDB4MEEp
OworICAgIFNUQVRJQ19BU1NFUlQoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlID09IDB4MEMpOwog
CiAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KChyZWludGVycHJldF9j
YXN0PFdyaXRlQmFycmllcjxKU0NlbGw+Kj4oMHg0MDAwKS0+c2xvdCgpKSkgLSAweDQwMDApKTsK
ICAgICBzdGF0aWNfYXNzZXJ0KFB1dEJ5SWRQcmltYXJ5VHlwZU1hc2sgPT0gMHg2LCAiTExJbnQg
YXNzdW1lcyBQdXRCeUlkUHJpbWFyeVR5cGVNYXNrIGlzID09IDB4NiIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA1LDYgKzE1MDUsNyBA
QCBfbGxpbnRfb3BfZ2V0X2J5X3ZhbDoKIC5vcEdldEJ5VmFsT3V0T2ZCb3VuZHM6CiAgICAgbG9h
ZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDApCiAgICAgc3RvcmViIDEsIEFycmF5UHJvZmlsZTo6bV9v
dXRPZkJvdW5kc1t0MF0KKyAgICBqbXAgLm9wR2V0QnlWYWxTbG93CiAKIC5vcEdldEJ5VmFsTm90
SW5kZXhlZFN0b3JhZ2U6CiAgICAgIyBGaXJzdCBsZXRzIGNoZWNrIGlmIHdlIGV2ZW4gaGF2ZSBh
IHR5cGVkIGFycmF5LiBUaGlzIGxldHMgdXMgZG8gc29tZSBib2lsZXJwbGF0ZSB1cCBmcm9udC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20JKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtMzMzLDE0ICsz
MzMsMTQgQEAgZWxzZQogZW5kCiAKICMgQ29uc3RhbnQgZm9yIHJlYXNvbmluZyBhYm91dCBidXR0
ZXJmbGllcy4KLWNvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDEKLWNvbnN0IEluZGV4
aW5nU2hhcGVNYXNrICAgICAgICA9IDMwCi1jb25zdCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAg
PSAwCi1jb25zdCBJbnQzMlNoYXBlICAgICAgICAgICAgICAgPSAyMAotY29uc3QgRG91YmxlU2hh
cGUgICAgICAgICAgICAgID0gMjIKLWNvbnN0IENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDI2
Ci1jb25zdCBBcnJheVN0b3JhZ2VTaGFwZSAgICAgICAgPSAyOAotY29uc3QgU2xvd1B1dEFycmF5
U3RvcmFnZVNoYXBlID0gMzAKK2NvbnN0IElzQXJyYXkgICAgICAgICAgICAgICAgICA9IDB4MDEK
K2NvbnN0IEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEUKK2NvbnN0IE5vSW5kZXhpbmdT
aGFwZSAgICAgICAgICA9IDB4MDAKK2NvbnN0IEludDMyU2hhcGUgICAgICAgICAgICAgICA9IDB4
MDQKK2NvbnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDB4MDYKK2NvbnN0IENvbnRpZ3Vv
dXNTaGFwZSAgICAgICAgICA9IDB4MDgKK2NvbnN0IEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9
IDB4MEEKK2NvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEMKIAogIyBUeXBlIGNv
bnN0YW50cy4KIGNvbnN0IFN0cmluZ1R5cGUgPSA2CkBAIC04ODcsNyArODg3LDcgQEAgbWFjcm8g
YXJyYXlQcm9maWxlKGNlbGxBbmRJbmRleGluZ1R5cGUsIAogICAgIGNvbnN0IGluZGV4aW5nVHlw
ZSA9IGNlbGxBbmRJbmRleGluZ1R5cGUgCiAgICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlE
W2NlbGxdLCBzY3JhdGNoCiAgICAgc3RvcmVpIHNjcmF0Y2gsIEFycmF5UHJvZmlsZTo6bV9sYXN0
U2VlblN0cnVjdHVyZUlEW3Byb2ZpbGVdCi0gICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlw
ZVtjZWxsXSwgaW5kZXhpbmdUeXBlCisgICAgbG9hZGIgSlNDZWxsOjptX2luZGV4aW5nVHlwZUFu
ZE1pc2NbY2VsbF0sIGluZGV4aW5nVHlwZQogZW5kCiAKIG1hY3JvIHNraXBJZklzUmVtZW1iZXJl
ZE9ySW5FZGVuKGNlbGwsIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NCw2ICs3NCw3IEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRl
KFZNJiAKICAgICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogICAgIGlmIChoYXNJ
bmRleGluZ0hlYWRlcikKICAgICAgICAgKnJlc3VsdC0+aW5kZXhpbmdIZWFkZXIoKSA9IGluZGV4
aW5nSGVhZGVyOworICAgIG1lbXNldChyZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVy
dHlDYXBhY2l0eSwgMCwgcHJvcGVydHlDYXBhY2l0eSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkp
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwNSw2ICsxMDYsMTAgQEAgaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVPckdybwogICAgICAgICByZXN1bHQtPnByb3BlcnR5
U3RvcmFnZSgpIC0gb2xkUHJvcGVydHlDYXBhY2l0eSwKICAgICAgICAgb2xkQnV0dGVyZmx5LT5w
cm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCiAgICAgICAgIHRvdGFsU2l6
ZSgwLCBvbGRQcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXls
b2FkU2l6ZUluQnl0ZXMpKTsKKyAgICBtZW1zZXQoCisgICAgICAgIHJlc3VsdC0+cHJvcGVydHlT
dG9yYWdlKCkgLSBuZXdQcm9wZXJ0eUNhcGFjaXR5LAorICAgICAgICAwLAorICAgICAgICAobmV3
UHJvcGVydHlDYXBhY2l0eSAtIG9sZFByb3BlcnR5Q2FwYWNpdHkpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC05NCwxNSArOTQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2
YXRlOgotI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKICAgICBEZWZlckdDIG1fZGVmZXJHQzsK
LSNlbHNlCi0gICAgc3RydWN0IE5vRGVmZXIgewotICAgICAgICBOb0RlZmVyKEhlYXAmIGhlYXAp
IDogbV9oZWFwKGhlYXApIHsgfQotICAgICAgICBIZWFwJiBtX2hlYXA7Ci0gICAgfTsKLSAgICBO
b0RlZmVyIG1fZGVmZXJHQzsKLSNlbmRpZgogfTsKIAogY2xhc3MgQ29uY3VycmVudEpJVExvY2tl
ciA6IHB1YmxpYyBDb25jdXJyZW50SklUTG9ja2VyQmFzZSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgJ
KHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDExICs2NiwxMyBAQCBi
b29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93blByb3BlCiAgICAgVHlwZSogdGhpc09i
amVjdCA9IGpzQ2FzdDxUeXBlKj4ob2JqZWN0KTsKICAgICAKICAgICBpZiAodGhpc09iamVjdC0+
Y2FuQWNjZXNzSW5kZXhRdWlja2x5KGluZGV4KSkgewotICAgICAgICBzbG90LnNldFZhbHVlKHRo
aXNPYmplY3QsIE5vbmUsIHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCkpOworICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpbmRleCk7
CisgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgTm9uZSwgcmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIHJldHVybiBCYXNlOjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgaW5kZXgsIHNsb3QpOworICAgIGJvb2wgcmVz
dWx0ID0gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4
LCBzbG90KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBl
PgpAQCAtMTI5LDcgKzEzMSw3IEBAIGJvb2wgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJ
bmRleCgKIHsKICAgICBUeXBlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFR5cGUqPihjZWxsKTsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotCisgICAgCiAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFj
Y2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKICAgICAgICAgdGhpc09iamVjdC0+c2V0SW5kZXhR
dWlja2x5KHZtLCBpbmRleCwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nVHlwZS5oCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGluZ1R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJTcGVjdWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTUyLDIxICs1
MywyNSBAQCB0eXBlZGVmIHVpbnQ4X3QgSW5kZXhpbmdUeXBlOwogc3RhdGljIGNvbnN0IEluZGV4
aW5nVHlwZSBJc0FycmF5ICAgICAgICAgICAgICAgICAgPSAweDAxOwogCiAvLyBUaGUgc2hhcGUg
b2YgdGhlIGluZGV4ZWQgcHJvcGVydHkgc3RvcmFnZS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgSW5kZXhpbmdTaGFwZU1hc2sgICAgICAgID0gMHgwRTsKLXN0YXRpYyBjb25zdCBJbmRleGlu
Z1R5cGUgTm9JbmRleGluZ1NoYXBlICAgICAgICAgID0gMHgwMDsKLXN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAgICAgICAgID0gMHgwMjsgLy8gT25seSB1c2VmdWwg
Zm9yIGFycmF5cy4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50MzJTaGFwZSAgICAgICAg
ICAgICAgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgRG91YmxlU2hhcGUgICAg
ICAgICAgICAgID0gMHgwNjsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1No
YXBlICAgICAgICAgID0gMHgwODsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9y
YWdlU2hhcGUgICAgICAgID0gMHgwQTsKLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgU2xvd1B1
dEFycmF5U3RvcmFnZVNoYXBlID0gMHgwQzsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW5k
ZXhpbmdTaGFwZU1hc2sgICAgICAgICAgICAgICA9IDB4MEU7CitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICAgICAgICAgPSAweDAwOworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBVbmRlY2lkZWRTaGFwZSAgICAgICAgICAgICAgICAgID0gMHgwMjsg
Ly8gT25seSB1c2VmdWwgZm9yIGFycmF5cy4KK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSW50
MzJTaGFwZSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIERvdWJsZVNoYXBlICAgICAgICAgICAgICAgICAgICAgPSAweDA2Oworc3RhdGljIGNv
bnN0IEluZGV4aW5nVHlwZSBDb250aWd1b3VzU2hhcGUgICAgICAgICAgICAgICAgID0gMHgwODsK
K3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgICAgICAg
ICA9IDB4MEE7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VT
aGFwZSAgICAgICAgPSAweDBDOwogCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5n
U2hhcGVTaGlmdCAgICAgICA9IDE7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE51bWJlck9m
SW5kZXhpbmdTaGFwZXMgICA9IDc7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5n
U2hhcGVTaGlmdCAgICAgICAgICAgICAgPSAxOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBO
dW1iZXJPZkluZGV4aW5nU2hhcGVzICAgICAgICAgID0gNzsKIAogLy8gQWRkaXRpb25hbCBmbGFn
cyBmb3IgdHJhY2tpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHR5cGUuIFRoZXNlIGFyZSB1c3VhbGx5
CiAvLyBtYXNrZWQgb2ZmIHVubGVzcyB5b3UgYXNrIGZvciB0aGVtIGRpcmVjdGx5Lgotc3RhdGlj
IGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgPSAweDEwOworc3Rh
dGljIGNvbnN0IEluZGV4aW5nVHlwZSBNYXlIYXZlSW5kZXhlZEFjY2Vzc29ycyAgICAgICAgID0g
MHgxMDsKKworLy8gVGhlIEluZGV4aW5nVHlwZSBmaWVsZCBvZiBKU0NlbGxzIGlzIHN0b2xlbiBm
b3IgbG9ja3MuCitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nVHlwZUxvY2tJc0hl
bGQgICAgICAgICAgPSAweDIwOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBJbmRleGluZ1R5
cGVMb2NrSGFzUGFya2VkICAgICAgID0gMHg0MDsKIAogLy8gTGlzdCBvZiBhY2NlcHRhYmxlIGFy
cmF5IHR5cGVzLgogc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb25BcnJheSAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwOwpAQCAtMTc3LDQgKzE4Miw2IEBAIHN0YXRpYyBjb25zdCBJbmRl
eGluZ1R5cGUgQWxsQXJyYXlUeXBlcyAKIC8vIE1hc2sgb2YgYWxsIHBvc3NpYmxlIHR5cGVzIGlu
Y2x1ZGluZyB0aGUgaGlzdG9yeS4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQWxsQXJyYXlU
eXBlc0FuZEhpc3RvcnkgID0gQWxsQXJyYXlUeXBlcyB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3Jz
OwogCit0eXBlZGVmIExvY2tBbGdvcml0aG08SW5kZXhpbmdUeXBlLCBJbmRleGluZ1R5cGVMb2Nr
SXNIZWxkLCBJbmRleGluZ1R5cGVMb2NrSGFzUGFya2VkPiBJbmRleGluZ1R5cGVMb2NrQWxnb3Jp
dGhtOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw5
IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoVk0mIHYKICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsK
ICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX2luZGV4QmlhcyA9IG5ld0luZGV4
QmlhczsKICAgICAKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0s
IG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAKKyAgICBz
ZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAg
LTEwNjMsMTMgKzEwNjUsMTUgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRoQXJyYXlT
dG9yYQogICAgIC8vIE5lZWQgdG8gaGF2ZSBHQyBkZWZlcnJlZCBhcm91bmQgdGhlIHVuc2hpZnRD
b3VudFNsb3dDYXNlKCksIHNpbmNlIHRoYXQgbGVhdmVzIHRoZSBidXR0ZXJmbHkgaW4KICAgICAv
LyBhIHdlaXJkIHN0YXRlOiBzb21lIHBhcnRzIG9mIGl0IHdpbGwgYmUgbGVmdCB1bmluaXRpYWxp
emVkLCB3aGljaCB3ZSB3aWxsIGZpbGwgaW4gaGVyZS4KICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CisgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhpcyk7CiAgICAgCiAg
ICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5tX2luZGV4QmlhcyA+PSBjb3VudCkgewogICAg
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1dHRlcmZseSgpLT51bnNo
aWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2UgPSBuZXdCdXR0ZXJmbHkt
PmFycmF5U3RvcmFnZSgpOwogICAgICAgICBzdG9yYWdlLT5tX2luZGV4QmlhcyAtPSBjb3VudDsK
ICAgICAgICAgc3RvcmFnZS0+c2V0VmVjdG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsK
LSAgICAgICAgc2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0
ZXJmbHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0
ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgfSBlbHNlIGlmICghbW92ZUZyb250ICYmIHZl
Y3Rvckxlbmd0aCAtIGxlbmd0aCA+PSBjb3VudCkKICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2Ut
PmJ1dHRlcmZseSgpLT5hcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIGlmICh1bnNoaWZ0Q291bnRT
bG93Q2FzZSh2bSwgZGVmZXJHQywgbW92ZUZyb250LCBjb3VudCkpCkBAIC0xMDkwLDYgKzEwOTQs
NyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhCiAKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgdmVjdG9yW2kgKyBzdGFy
dEluZGV4XS5jbGVhcigpOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw4ICsxMDAsMzIgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm94eSgpIGNvbnN0OwogICAgIGJv
b2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CiAgICAgYm9vbCBpc0FQSVZhbHVl
V3JhcHBlcigpIGNvbnN0OworICAgIAorICAgIC8vIEVhY2ggY2VsbCBoYXMgYSBidWlsdC1pbiBs
b2NrLiBDdXJyZW50bHkgaXQncyBzaW1wbHkgYXZhaWxhYmxlIGZvciB1c2UgaWYgeW91IG5lZWQg
aXQuIEl0J3MKKyAgICAvLyBhIGZ1bGwtYmxvd24gV1RGOjpMb2NrLiBOb3RlIHRoYXQgdGhpcyBs
b2NrIGlzIGN1cnJlbnRseSB1c2VkIGluIEpTQXJyYXkgYW5kIHRoYXQgbG9jaydzCisgICAgLy8g
b3JkZXJpbmcgd2l0aCB0aGUgU3RydWN0dXJlIGxvY2sgaXMgdGhhdCB0aGUgU3RydWN0dXJlIGxv
Y2sgbXVzdCBiZSBhY3F1aXJlZCBmaXJzdC4KKyAgICB2b2lkIGxvY2tJbnRlcm5hbExvY2soKTsK
KyAgICB2b2lkIHVubG9ja0ludGVybmFsTG9jaygpOworICAgIAorICAgIGNsYXNzIEludGVybmFs
TG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEludGVybmFsTG9ja2VyKEpTQ2VsbCogY2Vs
bCkKKyAgICAgICAgICAgIDogbV9jZWxsKGNlbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
Y2VsbC0+bG9ja0ludGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+
SW50ZXJuYWxMb2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPnVubG9ja0lu
dGVybmFsTG9jaygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IEpTQ2VsbCogbV9jZWxsOworICAgIH07CiAKICAgICBKU1R5cGUgdHlwZSgpIGNvbnN0OworICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3Q7CiAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0OwogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVJRDsgfQogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KCkgY29uc3Q7CkBAIC0xNjcsNiArMTkxLDE2IEBAIHB1YmxpYzoKICAgICBDZWxsU3RhdGUgY2Vs
bFN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsU3RhdGU7IH0KICAgICAKICAgICB2b2lkIHNl
dENlbGxTdGF0ZShDZWxsU3RhdGUgZGF0YSkgY29uc3QgeyBjb25zdF9jYXN0PEpTQ2VsbCo+KHRo
aXMpLT5tX2NlbGxTdGF0ZSA9IGRhdGE7IH0KKyAgICAKKyAgICBib29sIGF0b21pY0NvbXBhcmVF
eGNoYW5nZUNlbGxTdGF0ZVdlYWtSZWxheGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRl
IG5ld1N0YXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hh
bmdlV2Vha1JlbGF4ZWQoJm1fY2VsbFN0YXRlLCBvbGRTdGF0ZSwgbmV3U3RhdGUpOworICAgIH0K
KworICAgIENlbGxTdGF0ZSBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVTdHJvbmcoQ2Vs
bFN0YXRlIG9sZFN0YXRlLCBDZWxsU3RhdGUgbmV3U3RhdGUpCisgICAgeworICAgICAgICByZXR1
cm4gV1RGOjphdG9taWNDb21wYXJlRXhjaGFuZ2VTdHJvbmcoJm1fY2VsbFN0YXRlLCBvbGRTdGF0
ZSwgbmV3U3RhdGUpOworICAgIH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgc3RydWN0dXJlSURP
ZmZzZXQoKQogICAgIHsKQEAgLTE4Myw5ICsyMTcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV90eXBlKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
cHRyZGlmZl90IGluZGV4aW5nVHlwZU9mZnNldCgpCisgICAgLy8gRE8gTk9UIHN0b3JlIHRvIHRo
aXMgZmllbGQuIEFsd2F5cyB1c2UgYSBDQVMgbG9vcCwgc2luY2Ugc29tZSBiaXRzIGFyZSBmbGlw
cGVkIHVzaW5nIENBUworICAgIC8vIGZyb20gb3RoZXIgdGhyZWFkcyBkdWUgdG8gdGhlIGludGVy
bmFsIGxvY2suIE9uZSBleGNlcHRpb246IHlvdSBkb24ndCBuZWVkIHRoZSBDQVMgaWYgdGhlCisg
ICAgLy8gb2JqZWN0IGhhcyBub3QgZXNjYXBlZCB5ZXQuCisgICAgc3RhdGljIHB0cmRpZmZfdCBp
bmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNDZWxsLCBtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgIH0KIAogICAgIHN0
YXRpYyBwdHJkaWZmX3QgY2VsbFN0YXRlT2Zmc2V0KCkKQEAgLTIyOCw3ICsyNjUsNyBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiAKICAgICBTdHJ1
Y3R1cmVJRCBtX3N0cnVjdHVyZUlEOwotICAgIEluZGV4aW5nVHlwZSBtX2luZGV4aW5nVHlwZTsK
KyAgICBJbmRleGluZ1R5cGUgbV9pbmRleGluZ1R5cGVBbmRNaXNjOyAvLyBETyBOT1Qgc3RvcmUg
dG8gdGhpcyBmaWVsZC4gQWx3YXlzIENBUy4KICAgICBKU1R5cGUgbV90eXBlOwogICAgIFR5cGVJ
bmZvOjpJbmxpbmVUeXBlRmxhZ3MgbV9mbGFnczsKICAgICBDZWxsU3RhdGUgbV9jZWxsU3RhdGU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nl
bGxJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBpbmxp
bmUgSlNDZWxsOjpKU0NlbGwoQ3JlYXRpbmdFYXJseUNlbGxUCiAKIGlubGluZSBKU0NlbGw6OkpT
Q2VsbChWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIDogbV9zdHJ1Y3R1cmVJRChzdHJ1
Y3R1cmUtPmlkKCkpCi0gICAgLCBtX2luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKQorICAgICwgbV9pbmRleGluZ1R5cGVBbmRNaXNjKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
SW5jbHVkaW5nSGlzdG9yeSgpKQogICAgICwgbV90eXBlKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50
eXBlKCkpCiAgICAgLCBtX2ZsYWdzKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSkKICAgICAsIG1fY2VsbFN0YXRlKENlbGxTdGF0ZTo6TmV3V2hpdGUpCkBAIC01Nyw2ICs1
NywxMCBAQCBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0CiAKIGlubGlu
ZSB2b2lkIEpTQ2VsbDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogeworICAgIC8vIFRoaXMgb2Jq
ZWN0IGlzIHJlYWR5IHRvIGJlIGVzY2FwZWQgc28gdGhlIGNvbmN1cnJlbnQgR0MgbWF5IHNlZSBp
dCBhdCBhbnkgdGltZS4gV2UgaGF2ZQorICAgIC8vIHRvIG1ha2Ugc3VyZSB0aGF0IG5vbmUgb2Yg
b3VyIHN0b3JlcyBzaW5rIGJlbG93IGhlcmUuCisgICAgaWYgKGlzWDg2KCkgfHwgVU5MSUtFTFko
dm0uaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkpCisgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCiAgICAgQVNTRVJUKHZtLmlzSW5p
dGlhbGl6aW5nT2JqZWN0KCkpOwogICAgIHZtLnNldEluaXRpYWxpemluZ09iamVjdENsYXNzKDAp
OwpAQCAtNzQsNyArNzgsNyBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiAgICAgaWYgKHN0cnVjdHVyZSkgewogI2VuZGlmCiAgICAgICAgIG1fc3RydWN0dXJlSUQg
PSBzdHJ1Y3R1cmUtPmlkKCk7Ci0gICAgICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKTsKKyAgICAgICAgbV9pbmRleGluZ1R5cGVBbmRNaXNjID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CiAgICAgICAgIG1fdHlwZSA9IHN0cnVj
dHVyZS0+dHlwZUluZm8oKS50eXBlKCk7CiAgICAgICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCk7CiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkBA
IC05MSw5ICs5NSwxNCBAQCBpbmxpbmUgSlNUeXBlIEpTQ2VsbDo6dHlwZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fdHlwZTsKIH0KIAoraW5saW5lIEluZGV4aW5nVHlwZSBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2MoKSBjb25zdAoreworICAgIHJldHVybiBtX2luZGV4aW5nVHlwZUFuZE1pc2M7
Cit9CisKIGlubGluZSBJbmRleGluZ1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2luZGV4aW5nVHlwZTsKKyAgICByZXR1cm4gaW5kZXhpbmdUeXBlQW5k
TWlzYygpICYgQWxsQXJyYXlUeXBlczsKIH0KIAogaW5saW5lIFN0cnVjdHVyZSogSlNDZWxsOjpz
dHJ1Y3R1cmUoKSBjb25zdApAQCAtMTk1LDE3ICsyMDQsMjYgQEAgaW5saW5lIGJvb2wgSlNDZWxs
Ojppc0FQSVZhbHVlV3JhcHBlcigpIAogICAgIHJldHVybiBtX3R5cGUgPT0gQVBJVmFsdWVXcmFw
cGVyVHlwZTsKIH0KIAotaW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU0NlbGw6OnNldFN0cnVj
dHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpID09IHRoaXMtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSk7CiAgICAg
QVNTRVJUKCF0aGlzLT5zdHJ1Y3R1cmUoKQogICAgICAgICB8fCB0aGlzLT5zdHJ1Y3R1cmUoKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKQogICAgICAgICB8fCBI
ZWFwOjpoZWFwKHRoaXMpLT5zdHJ1Y3R1cmVJRFRhYmxlKCkuZ2V0KHN0cnVjdHVyZS0+aWQoKSkg
PT0gc3RydWN0dXJlKTsKLSAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzLCBzdHJ1Y3R1cmUp
OwogICAgIG1fc3RydWN0dXJlSUQgPSBzdHJ1Y3R1cmUtPmlkKCk7CiAgICAgbV9mbGFncyA9IHN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICBtX3R5cGUgPSBzdHJ1
Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwotICAgIG1faW5kZXhpbmdUeXBlID0gc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKTsKKyAgICBJbmRleGluZ1R5cGUgbmV3SW5kZXhpbmdUeXBlID0gc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgaWYgKG1faW5kZXhp
bmdUeXBlQW5kTWlzYyAhPSBuZXdJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgQVNTRVJUKCEobmV3
SW5kZXhpbmdUeXBlICYgfkFsbEFycmF5VHlwZXNBbmRIaXN0b3J5KSk7CisgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBvbGRWYWx1ZSA9IG1faW5kZXhpbmdUeXBl
QW5kTWlzYzsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBuZXdWYWx1ZSA9IChvbGRWYWx1ZSAm
IH5BbGxBcnJheVR5cGVzQW5kSGlzdG9yeSkgfCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKTsKKyAgICAgICAgICAgIGlmIChXVEY6OmF0b21pY0NvbXBhcmVFeGNoYW5n
ZVdlYWtSZWxheGVkKCZtX2luZGV4aW5nVHlwZUFuZE1pc2MsIG9sZFZhbHVlLCBuZXdWYWx1ZSkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgdm0uaGVhcC53
cml0ZUJhcnJpZXIodGhpcywgc3RydWN0dXJlKTsKIH0KIAogaW5saW5lIGNvbnN0IE1ldGhvZFRh
YmxlKiBKU0NlbGw6Om1ldGhvZFRhYmxlKCkgY29uc3QKQEAgLTI4NCwxMSArMzAyLDI2IEBAIGlu
bGluZSB2b2lkIEpTQ2VsbDo6Y2FsbERlc3RydWN0b3IoVk0mIHYKICAgICBpZiAoaXNaYXBwZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVChzdHJ1Y3R1cmVJRCgpKTsKLSAgICBpZiAo
aW5saW5lVHlwZUZsYWdzKCkgJiBTdHJ1Y3R1cmVJc0ltbW9ydGFsKQotICAgICAgICBzdHJ1Y3R1
cmUodm0pLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveSh0aGlzKTsKLSAgICBlbHNl
CisgICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1vcnRhbCkgeworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgICAg
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gc3RydWN0dXJlLT5jbGFzc0luZm8oKTsKKyAg
ICAgICAgTWV0aG9kVGFibGU6OkRlc3Ryb3lGdW5jdGlvblB0ciBkZXN0cm95ID0gY2xhc3NJbmZv
LT5tZXRob2RUYWJsZS5kZXN0cm95OworICAgICAgICBkZXN0cm95KHRoaXMpOworICAgIH0gZWxz
ZQogICAgICAgICBqc0Nhc3Q8SlNEZXN0cnVjdGlibGVPYmplY3QqPih0aGlzKS0+Y2xhc3NJbmZv
KCktPm1ldGhvZFRhYmxlLmRlc3Ryb3kodGhpcyk7CiAgICAgemFwKCk7CiB9CiAKK2lubGluZSB2
b2lkIEpTQ2VsbDo6bG9ja0ludGVybmFsTG9jaygpCit7CisgICAgQXRvbWljPEluZGV4aW5nVHlw
ZT4qIGxvY2sgPSBiaXR3aXNlX2Nhc3Q8QXRvbWljPEluZGV4aW5nVHlwZT4qPigmbV9pbmRleGlu
Z1R5cGVBbmRNaXNjKTsKKyAgICBJbmRleGluZ1R5cGVMb2NrQWxnb3JpdGhtOjpsb2NrKCpsb2Nr
KTsKK30KKworaW5saW5lIHZvaWQgSlNDZWxsOjp1bmxvY2tJbnRlcm5hbExvY2soKQoreworICAg
IEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRleGlu
Z1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9ja0Fs
Z29yaXRobTo6dW5sb2NrKCpsb2NrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMiwxNyArMTEyLDI4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVj
dDo6dmlzaXRCdXR0ZXIKICAgICAKICAgICAvLyBNYXJrIHRoZSBwcm9wZXJ0aWVzLgogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBz
dG9yYWdlU2l6ZSwgc3RvcmFnZVNpemUpOwotICAgIAotICAgIC8vIE1hcmsgdGhlIGFycmF5IGlm
IGFwcHJvcHJpYXRlLgotICAgIHN3aXRjaCAodGhpcy0+aW5kZXhpbmdUeXBlKCkpIHsKKworICAg
IEluZGV4aW5nVHlwZSBvbGRUeXBlID0gc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBz
d2l0Y2ggKG9sZFR5cGUpIHsKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICB2aXNp
dG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3Rv
ciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOwotICAgICAgICBp
ZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApCi0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXApOwor
ICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgLy8g
VGhpcyBsb2NrIGlzIGhlcmUgdG8gcHJvdGVjdCBDb250aWd1b3VzLT5BcnJheVN0b3JhZ2UgdHJh
bnNpdGlvbnMsIGJ1dCB3ZSBjb3VsZCBtYWtlIHRoYXQKKyAgICAgICAgLy8gcmFjZSB3b3JrIGlm
IHdlIG5lZWRlZCB0by4KKyAgICAgICAgSlNDZWxsOjpJbnRlcm5hbExvY2tlciBsb2NrZXIodGhp
cyk7CisgICAgICAgIEluZGV4aW5nVHlwZSBuZXdUeXBlID0gdGhpcy0+aW5kZXhpbmdUeXBlKCk7
CisgICAgICAgIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAgICBzd2l0Y2gg
KG5ld1R5cGUpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGln
dW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDogLy8gQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVMKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JM
ZW5ndGgoKSk7CisgICAgICAgICAgICBpZiAoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9z
cGFyc2VNYXApCisgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0xNDYsMTAgKzE1NywzNCBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwogCi0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRl
cmZseS5nZXQoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0LT52aXNp
dEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNp
dG9yLnZtKCkpKTsKLQorICAgIC8vIFdlIHdhbnQgdG8gZGVmZW5kIGFnYWluc3QgbXVsdGlwbGUg
cG9zc2libGUgcmFjZXMgd2l0aCB0aGUgbXV0YXRvcjoKKyAgICAvLyAtIE11dGF0b3IgY291bGQg
aW5zdGFsbCBhIGJpZ2dlciBidXR0ZXJmbHkgYW5kIHRoZW4gaW5zdGFsbCBhIHN0cnVjdHVyZSB0
aGF0IGNsYWltcyBtb3JlCisgICAgLy8gICBwcm9wZXJ0aWVzLiBUaGlzIHRyaXZpYWxseSB3b3Jr
cy4KKyAgICAvLyAtIE11dGF0b3IgY291bGQgbXV0YXRlIHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVy
ZS4gSGVuY2UsIHdlIGhvbGQgdGhlIHN0cnVjdHVyZSBsb2NrIGZvcgorICAgIC8vICAgZGljdGlv
bmFyeSBzdHJ1Y3R1cmVzLgorICAgIC8vIC0gVGhlIGJ1dHRlcmZseSBjb3VsZCBzaHJpbmssIGJ1
dCB0aGlzIGNvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvYmplY3Qgd2FzIGEgZGljdGlvbmFyeS4K
KyAgICAvLyAgIFVzdWFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSB3b3VsZCBnZXQgdGhlIGRpY3Rp
b25hcnkgc3RydWN0dXJlIGFuZCBhY3F1aXJlIGEgbG9jay4gVGhhdAorICAgIC8vICAgdHJpdmlh
bGx5IHdvcmtzLiBCdXQgd2UgY291bGQgbG9hZCB0aGUgc3RydWN0dXJlIGJlZm9yZSB0aGUgb2Jq
ZWN0IGJlY2FtZSBhIGRpY3Rpb25hcnkKKyAgICAvLyAgIGFuZCB0aGVuIGxvYWQgdGhlIGJ1dHRl
cmZseSB0aGF0IHdhcyBzaHJ1bmsuIFdlIHByb3RlY3QgYWdhaW5zdCB0aGlzIGNhc2UgYnkgY2hl
Y2tpbmcKKyAgICAvLyAgIHRoZSBzdHJ1Y3R1cmUgYSBzZWNvbmQgdGltZSBiZWZvcmUgc2Nhbm5p
bmcgdGhlIGJ1dHRlcmZseS4gVGhpcyBtZWFucyB0aGF0IHRoZSBidXR0ZXJmbHkKKyAgICAvLyAg
IGlzIGF0IHdvcnN0IHRoZSBidXR0ZXJmbHkgdGhhdCB0aGUgbXV0YXRvciBoYWQgaW5zdGFsbGVk
IGp1c3QgcHJpb3IgdG8gZmxpcHBpbmcgdGhlCisgICAgLy8gICBzdHVyY3R1cmUuIFNvIGlmIHRo
ZSBzdHJ1Y3R1cmUgd2Ugc2VlIGlzIGEgbm9uLWRpY3Rpb25hcnkgdGhlbiB0aGUgYnV0dGVyZmx5
IGNhbm5vdCB5ZXQKKyAgICAvLyAgIGhhdmUgYmVlbiBzaHJ1bmsuCisgICAgVk0mIHZtID0gdmlz
aXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3RydWN0
dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KSB7CisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygp
LmxvY2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAg
aWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCkp
IHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmICh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmVJRCgpID09IHN0cnVjdHVyZS0+aWQoKSkKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9
CisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+bG9jaygpLnVubG9j
aygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xh
dGlvbjsKICNlbmRpZgpAQCAtMjA0LDE1ICsyMzksMjUgQEAgdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVj
dC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7Cisg
ICAgVk0mIHZtID0gdmlzaXRvci52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
c09iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBib29sIHdhc0RpY3Rpb25hcnkgPSBzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpOworICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBzdHJ1
Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgZWxzZQorICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICBpZiAoQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5idXR0ZXJm
bHkoKSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aWQoKSA9PSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgdGhp
c09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwor
ICAgIH0KIAogICAgIHNpemVfdCBzdG9yYWdlU2l6ZSA9IHN0cnVjdHVyZS0+aW5saW5lU2l6ZSgp
OwogICAgIGlmIChzdG9yYWdlU2l6ZSkKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7Ci0KKyAgICBpZiAo
d2FzRGljdGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkudW5sb2NrKCk7CisgICAg
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVs
dE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwogI2Vu
ZGlmCkBAIC02NjYsNyArNzExLDggQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6ZW50ZXJEaWN0
aW9uYXJ5SQogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0g
MDsKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5zZXRWZWN0b3JMZW5ndGgoMCk7
CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuc2V0KHZtLCB0
aGlzLCBtYXApOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwg
bmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRl
cmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKICAgICAKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKTsKIH0KQEAgLTczMSw3ICs3NzcsMTAgQEAgQnV0dGVyZmx5KiBKU09iamVj
dDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRpYWxJbmRleGVkU3RvcmFnZSh2
bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlVW5kZWNpZGVkKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5OwogfQogCkBAIC03NDIsNyArNzkxLDEwIEBAIENvbnRpZ3VvdXNKU1Zh
bHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIp
OwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZt
LCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3Ry
dWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRp
Z3VvdXNJbnQzMigpOwogfQogCkBAIC03NTMsNyArODA1LDEwIEBAIENvbnRpZ3VvdXNEb3VibGVz
IEpTT2JqZWN0OjpjcmVhdGVJbml0aWEKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJm
bHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXSA9IFBOYU47CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAg
ICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC03NjQs
NyArODE5LDEwIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGkKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBuZXdCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQog
ICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZs
eSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIApAQCAtNzk3LDcgKzg1NSwx
MCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0OjpjcmVhdGVBcnJheVN0b3JhCiAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVBcnJheVN0b3JhZ2VCdXR0ZXJmbHkodm0sIHRoaXMs
IHN0cnVjdHVyZSwgbGVuZ3RoLCB2ZWN0b3JMZW5ndGgsIG1fYnV0dGVyZmx5LmdldCgpKTsKICAg
ICBBcnJheVN0b3JhZ2UqIHJlc3VsdCA9IG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlLCBzdHJ1Y3R1cmUtPnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5z
aXRpb24oKSk7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUs
IG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0
ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtODgwLDcgKzk0MSwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5k
ZWNpZGVkCiAgICAgICAgIHN0b3JhZ2UtPm1fdmVjdG9yW2ldLnNldFdpdGhvdXRXcml0ZUJhcnJp
ZXIoSlNWYWx1ZSgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9u
KTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgc3RvcmFn
ZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0
dGVyZmx5KHZtLCBzdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIHN0
b3JhZ2U7CiB9CiAKQEAgLTkzNSw3ICs5OTksMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6
Y29udmVydEludDMyVG9BcgogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0
cmFuc2l0aW9uKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVy
ZSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdTdG9yYWdlLT5idXR0ZXJmbHkoKSk7CisgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAKQEAgLTk4MSw3ICsxMDQ4LDEwIEBAIEFycmF5
U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0EKICAgICB9CiAgICAgCiAgICAgU3Ry
dWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+YnV0
dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJl
KHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC0xMDA2
LDcgKzEwNzYsMjMgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdQog
ICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCB0cmFuc2l0aW9uKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3U3RvcmFnZS0+YnV0
dGVyZmx5KCkpOworCisgICAgLy8gVGhpcyBoYXMgYSBjcmF6eSByYWNlIHdpdGggdGhlIGdhcmJh
Z2UgY29sbGVjdG9yLiBXaGVuIGNoYW5naW5nIHRoZSBidXR0ZXJmbHkgYW5kIHN0cnVjdHVyZSwK
KyAgICAvLyB0aGUgbXV0YXRvciBhbHdheXMgc2V0cyB0aGUgc3RydWN0dXJlIGxhc3QuIFRoZSBj
b2xsZWN0b3Igd2lsbCBhbHdheXMgcmVhZCB0aGUgc3RydWN0dXJlCisgICAgLy8gZmlyc3QuIFdl
IHByb2JhYmx5IGhhdmUgdG8gZm9sbG93IHRoYXQgY29udmVudGlvbiBoZXJlIGFzIHdlbGwuIFRo
aXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9yCisgICAgLy8gd2lsbCBzb21ldGltZXMgc2VlIHRo
ZSBuZXcgYnV0dGVyZmx5ICh0aGUgb25lIHdpdGggQXJyYXlTdG9yYWdlKSB3aXRoIHRoZSBvbmx5
IHN0cnVjdHVyZSAodGhlCisgICAgLy8gb25lIHRoYXQgc2F5cyB0aGF0IHRoZSBidXR0ZXJmbHkg
aXMgQ29udGlndW91cykuIFdoZW4gc2Nhbm5pbmcgQ29udGlndW91cywgdGhlIGNvbGxlY3RvciB3
aWxsCisgICAgLy8gbWFyayB3b3JkIGF0IGFkZHJlc3NlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8gdGhlIGJ1dHRlcmZseSBwb2ludGVyLCB1cCB0byB0aGUgcHVibGljTGVuZ3RoCisgICAgLy8g
aW4gdGhlIGJ1dHRlcmZseS4gQnV0IGFuIEFycmF5U3RvcmFnZSBoYXMgc29tZSBub24tcG9pbnRl
ciBoZWFkZXIgZGF0YSBhdCBsb3cgcG9zaXRpdmUKKyAgICAvLyBvZmZzZXRzIGZyb20gdGhlIGJ1
dHRlcmZseSAtIHNvIHdoZW4gdGhpcyByYWNlIGhhcHBlbnMsIHRoZSBjb2xsZWN0b3Igd2lsbCBz
dXJlbHkgY3Jhc2gKKyAgICAvLyBiZWNhdXNlIGl0IHdpbGwgZmFpbCB0byBkZWNvZGUgdHdvIGNv
bnNlY3V0aXZlIGludDMycyBhcyBpZiBpdCB3YXMgYSBKU1ZhbHVlLgorICAgIC8vCisgICAgLy8g
Rm9ydHVuYXRlbHksIHdlIGhhdmUgdGhlIEpTQ2VsbCBsb2NrIGZvciB0aGlzIHB1cnBvc2UhCisg
ICAgCisgICAgSW50ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3U3RvcmFnZS0+YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9y
YWdlOwogfQogCkBAIC0xNDY4LDcgKzE1NTQsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlCiAKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAg
b2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKIApA
QCAtMjAxOSw3ICsyMTA1LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duSW5kZXhlZFByb3Bl
cnR5KAogCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9idXR0ZXJmbHkuZ2V0KCkt
PmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcC5nZXQoKTsKICAgICBSRUxFQVNFX0FTU0VSVCht
YXApOwotCisgICAgCiAgICAgLy8gMS4gTGV0IGN1cnJlbnQgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIHRoZSBbW0dldE93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kIG9mIE8gd2l0aCBwcm9w
ZXJ0eSBuYW1lIFAuCiAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9
IG1hcC0+YWRkKHRoaXMsIGluZGV4KTsKICAgICBTcGFyc2VBcnJheUVudHJ5KiBlbnRyeUluTWFw
ID0gJnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CkBAIC0yNzI1LDcgKzI4MTEsOCBAQCBib29sIEpT
T2JqZWN0OjppbmNyZWFzZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQogICAgICAgICAgICAg
bmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3JbaV0uY2xlYXIoKTsKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rv
ckxlbmd0aCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCkBAIC0yNzQyLDcgKzI4MjksOCBAQCBib29sIEpTT2JqZWN0OjppbmNyZWFz
ZVZlY3Rvckxlbmd0aChWTSYgCiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fdmVjdG9yW2ldLmNsZWFyKCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7Ci0gICAgc2V0QnV0dGVyZmx5
V2l0aG91dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0yNzYyLDYgKzI4NTAsNyBAQCBib29sIEpTT2JqZWN0Ojpl
bnN1cmVMZW5ndGhTbG93KFZNJiB2bSwgCiAgICAgCiAgICAgdW5zaWduZWQgYXZhaWxhYmxlT2xk
TGVuZ3RoID0KICAgICAgICAgQnV0dGVyZmx5OjphdmFpbGFibGVDb250aWd1b3VzVmVjdG9yTGVu
Z3RoKHByb3BlcnR5Q2FwYWNpdHksIG9sZFZlY3Rvckxlbmd0aCk7CisgICAgQnV0dGVyZmx5KiBu
ZXdCdXR0ZXJmbHkgPSBudWxscHRyOwogICAgIGlmIChhdmFpbGFibGVPbGRMZW5ndGggPj0gbGVu
Z3RoKSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgc29tZW9uZSBlbHNlIHNl
bGVjdGVkIGEgdmVjdG9yIGxlbmd0aCB0aGF0IGNhdXNlZCBpbnRlcm5hbAogICAgICAgICAvLyBm
cmFnbWVudGF0aW9uLiBJZiB3ZSBkaWQgb3VyIGpvYnMgcmlnaHQsIHRoaXMgd291bGQgbmV2ZXIg
aGFwcGVuLiBCdXQgSSBiZXQgd2Ugd2lsbCBtZXNzCkBAIC0yNzc2LDE3ICsyODY1LDI0IEBAIGJv
b2wgSlNPYmplY3Q6OmVuc3VyZUxlbmd0aFNsb3coVk0mIHZtLCAKICAgICAgICAgICAgIG5ld1Zl
Y3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgICAgICBpZiAoIWJ1dHRl
cmZseSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9idXR0ZXJmbHkuc2V0
KHZtLCB0aGlzLCBidXR0ZXJmbHkpOworICAgICAgICBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHk7
CiAgICAgfQogCi0gICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3Ro
KTsKLQogICAgIGlmIChoYXNEb3VibGUoaW5kZXhpbmdUeXBlKCkpKSB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG9sZFZlY3Rvckxlbmd0aDsgaSA8IG5ld1ZlY3Rvckxlbmd0aDsgKytpKQot
ICAgICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOworICAg
ICAgICAgICAgYnV0dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8ZG91YmxlPigpW2ldID0gUE5hTjsK
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7
IGkgPCBuZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGln
dW91cygpW2ldLmNsZWFyKCk7CisgICAgICAgICAgICBidXR0ZXJmbHktPmluZGV4aW5nUGF5bG9h
ZDxXcml0ZUJhcnJpZXI8VW5rbm93bj4+KClbaV0uY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAo
bmV3QnV0dGVyZmx5KSB7CisgICAgICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1Zl
Y3Rvckxlbmd0aCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIG1f
YnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBidXR0ZXJmbHktPnNldFZlY3Rv
ckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MjgwMiwxMiArMjg5OCwxMyBAQCB2b2lkIEpTT2JqZWN0OjpyZWFsbG9jYXRlQW5kU2hyaW5rQnV0
dGVyCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdC
dXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKS0+cmVzaXplQXJyYXkodm0sIHRoaXMsIHN0cnVj
dHVyZSgpLCAwLCBBcnJheVN0b3JhZ2U6OnNpemVGb3IobGVuZ3RoKSk7Ci0gICAgbV9idXR0ZXJm
bHkuc2V0KHZtLCB0aGlzLCBuZXdCdXR0ZXJmbHkpOwogICAgIG5ld0J1dHRlcmZseS0+c2V0VmVj
dG9yTGVuZ3RoKGxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5zZXRQdWJsaWNMZW5ndGgobGVu
Z3RoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIG1fYnV0dGVyZmx5LnNldCh2
bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKIH0KIAotQnV0dGVyZmx5KiBKU09iamVjdDo6Z3Jvd091
dE9mTGluZVN0b3JhZ2UoVk0mIHZtLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCitC
dXR0ZXJmbHkqIEpTT2JqZWN0OjphbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQogewogICAgIEFTU0VSVChuZXdTaXplID4g
b2xkU2l6ZSk7CiAKQEAgLTMwOTIsMTUgKzMxODksMzQgQEAgdm9pZCBKU09iamVjdDo6Y29udmVy
dFRvRGljdGlvbmFyeShWTSYgdgogICAgICAgICB2bSwgU3RydWN0dXJlOjp0b0NhY2hlYWJsZURp
Y3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCAmZGVmZXJyZWRXYXRjaHBvaW50
RmlyZSkpOwogfQogCi12b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmlu
ZyhWTSYgdm0sIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUJlZm9yZSwgc2l6ZV90IG91dE9mTGlu
ZUNhcGFjaXR5QWZ0ZXIpCit2b2lkIEpTT2JqZWN0OjpzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRl
bmluZyhjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpCiB7Ci0gICAgQnV0dGVy
Zmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJmbHkoKTsKLSAgICBzaXplX3QgcHJlQ2FwYWNp
dHkgPSB0aGlzLT5idXR0ZXJmbHlQcmVDYXBhY2l0eSgpOwotICAgIHZvaWQqIGN1cnJlbnRCYXNl
ID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsK
LSAgICB2b2lkKiBuZXdCYXNlID0gYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBvdXRPZkxp
bmVDYXBhY2l0eUJlZm9yZSk7CisgICAgLy8gVGhpcyBjb3VsZCBpbnRlcmxlYXZlIHZpc2l0Q2hp
bGRyZW4gYmVjYXVzZSBzb21lIG9sZCBzdHJ1Y3R1cmUgY291bGQgaGF2ZSBiZWVuIGEgbm9uCisg
ICAgLy8gZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIFdlIGhhdmUgdG8gYmUgY3JhenkgY2FyZWZ1bC4g
QnV0LCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSBob2xkaW5nCisgICAgLy8gdGhlIHN0cnVjdHVy
ZSdzIGxvY2sgcmlnaHQgbm93LCBhbmQgdGhhdCBoZWxwcyBhIGJpdC4KKyAgICAKKyAgICBCdXR0
ZXJmbHkqIG9sZEJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgIHNpemVfdCBwcmVD
YXBhY2l0eTsKKyAgICBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXM7CisgICAgYm9v
bCBoYXNJbmRleGluZ0hlYWRlciA9IHRoaXMtPmhhc0luZGV4aW5nSGVhZGVyKCk7CisgICAgaWYg
KFVOTElLRUxZKGhhc0luZGV4aW5nSGVhZGVyKSkgeworICAgICAgICBwcmVDYXBhY2l0eSA9IG9s
ZEJ1dHRlcmZseS0+aW5kZXhpbmdIZWFkZXIoKS0+cHJlQ2FwYWNpdHkoc3RydWN0dXJlKTsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5n
SGVhZGVyKCktPmluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKHN0cnVjdHVyZSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcHJlQ2FwYWNpdHkgPSAwOworICAgICAgICBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcyA9IDA7CisgICAgfQorCisgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBC
dXR0ZXJmbHk6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIHRoaXMsIHByZUNhcGFjaXR5LCBvdXRP
ZkxpbmVDYXBhY2l0eUFmdGVyLCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6
ZUluQnl0ZXMpOwogCi0gICAgbWVtbW92ZShuZXdCYXNlLCBjdXJyZW50QmFzZSwgdGhpcy0+YnV0
dGVyZmx5VG90YWxTaXplKCkpOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVj
dHVyZSh2bSwgQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdCYXNlLCBwcmVDYXBhY2l0eSwgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcikpOworICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUgcHJlY2FwYWNp
dHkuCisgICAgdm9pZCogY3VycmVudEJhc2UgPSBvbGRCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZM
aW5lQ2FwYWNpdHlBZnRlcik7CisgICAgdm9pZCogbmV3QmFzZSA9IG5ld0J1dHRlcmZseS0+YmFz
ZSgwLCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKworICAgIG1lbWNweShuZXdCYXNlLCBjdXJy
ZW50QmFzZSwgQnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwg
aGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgCisg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRl
cmZseSk7CiB9CiAKIHVpbnQzMl90IEpTT2JqZWN0OjpnZXRFbnVtZXJhYmxlTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ3LDExICs3NDcs
MTAgQEAgcHVibGljOgogICAgIGJvb2wgc3RhdGljUHJvcGVydGllc1JlaWZpZWQoKSB7IHJldHVy
biBzdHJ1Y3R1cmUoKS0+c3RhdGljUHJvcGVydGllc1JlaWZpZWQoKTsgfQogICAgIHZvaWQgcmVp
ZnlBbGxTdGF0aWNQcm9wZXJ0aWVzKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgQnV0dGVyZmx5KiBncm93T3V0T2ZMaW5lU3RvcmFnZShWTSYsIHNpemVfdCBvbGRTaXplLCBz
aXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBzZXRCdXR0ZXJmbHlXaXRob3V0Q2hhbmdpbmdTdHJ1
Y3R1cmUoVk0mLCBCdXR0ZXJmbHkqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCdXR0ZXJmbHkq
IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2UoVk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90
IG5ld1NpemUpOwogICAgICAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZseShWTSYsIEJ1dHRlcmZs
eSopOyAvLyBBbHdheXMgY2hhbmdlIHRoZSBidXR0ZXJmbHkgYmVmb3JlIGNoYW5naW5nIHRoZSBz
dHJ1Y3R1cmUhCiAgICAgdm9pZCBzZXRTdHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICB2
b2lkIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseShWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSop
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb252ZXJ0VG9EaWN0aW9uYXJ5KFZNJik7
CiAKQEAgLTc1OSw3ICs3NTgsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBzdHJ1Y3R1cmUo
dm0pLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgdGhpcyk7CiAgICAgfQotICAgIHZv
aWQgc2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mLCBzaXplX3Qgb3V0T2ZMaW5lQ2Fw
YWNpdHlCZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKTsKKyAgICB2b2lkIHNo
aWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlB
ZnRlcik7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QKICAgICB7
CkBAIC05OTAsOSArOTg5LDkgQEAgcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJVkFURSBORVZF
Ul9JTkxJTkUgYm9vbCBwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBib29sIGdldE5vbkluZGV4UHJvcGVydHlT
bG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgYm9vbCBn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYs
IFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFs
dWUsIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7Ci0gICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVy
UHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUm
KTsKKyAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90Jiwg
SlNWYWx1ZSwgdW5zaWduZWQsIFN0cnVjdHVyZSopOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBmaW5k
UHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lKSBjb25zdDsKQEAgLTExMTMsNiArMTExMiw3
IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgSlNGaW5hbE9iamVjdChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IG51bGxwdHIpCiAgICAgICAgIDog
SlNPYmplY3Qodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KQogICAgIHsKKyAgICAgICAgbWVtc2V0
KGlubGluZVN0b3JhZ2UoKSwgMCwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSk7CiAgICAgfQogfTsKIApAQCAtMTIwNSwxNCArMTIwNSw2IEBAIGlu
bGluZSBib29sIEpTT2JqZWN0Ojppc1dpdGhTY29wZSgpIGNvbnMKICAgICByZXR1cm4gdHlwZSgp
ID09IFdpdGhTY29wZVR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRTdHJ1Y3R1
cmVBbmRCdXR0ZXJmbHkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKCFidXR0ZXJm
bHkgPT0gKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgJiYgIXN0cnVjdHVyZS0+aGFz
SW5kZXhpbmdIZWFkZXIodGhpcykpKTsKLSAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1
dHRlcmZseSk7Ci0gICAgc2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwotfQotCiBpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSk7CkBAIC0xMjIwLDcgKzEyMTIsNyBAQCBpbmxpbmUg
dm9pZCBKU09iamVjdDo6c2V0U3RydWN0dXJlKFZNJiB2CiAgICAgSlNDZWxsOjpzZXRTdHJ1Y3R1
cmUodm0sIHN0cnVjdHVyZSk7CiB9CiAKLWlubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSkK
K2lubGluZSB2b2lkIEpTT2JqZWN0OjpzZXRCdXR0ZXJmbHkoVk0mIHZtLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKIHsKICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIGJ1dHRlcmZseSk7CiB9
CkBAIC0xMjczLDE2ICsxMjY1LDE2IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRQcm90
b3R5cGUoVk0KIAogLy8gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIHdpdGggYSBQcm9w
ZXJ0eU5hbWUgdGhhdCBpcyBhY3R1YWxseSBhbiBpbmRleCwKIC8vIGJ1dCBpZiBzbyB3aWxsIGFs
d2F5cyByZXR1cm4gZmFsc2UgKGRvZXNuJ3Qgc2VhcmNoIGluZGV4IHN0b3JhZ2UpLgotQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0s
IFN0cnVjdHVyZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmIHNsb3QpCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbkluZGV4
UHJvcGVydHlTbG90KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgaWYgKCFpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgaWYgKCFUeXBlSW5mbzo6aGFzU3RhdGljUHJvcGVy
dHlUYWJsZShpbmxpbmVUeXBlRmxhZ3MoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3Qodm0sIHByb3BlcnR5TmFtZSwg
c2xvdCk7CiAgICAgfQotCisgICAgCiAgICAgLy8gZ2V0UHJvcGVydHlTbG90IHJlbGllcyBvbiB0
aGlzIG1ldGhvZCBuZXZlciByZXR1cm5pbmcgaW5kZXggcHJvcGVydGllcyEKICAgICBBU1NFUlQo
IXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7CiAKQEAgLTEzMDcsOSArMTI5OSw5IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW4KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSBjdXN0b21HZXR0ZXJTZXR0ZXIsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFN0cnVjdHVyZSYgc3RydWN0dXJlKQorQUxXQVlTX0lOTElORSB2b2lk
IEpTT2JqZWN0OjpmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYgc2xv
dCwgSlNWYWx1ZSBjdXN0b21HZXR0ZXJTZXR0ZXIsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogewotICAgIGlmIChzdHJ1Y3R1cmUuaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgeworICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
IHsKICAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgYXR0cmlidXRlcywganNDYXN0PEN1c3Rv
bUdldHRlclNldHRlcio+KGN1c3RvbUdldHRlclNldHRlciktPmdldHRlcigpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTEzMjUsNyArMTMxNyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6ZmlsbEN1c3RvbUcKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqb2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwog
ICAgIGlmIChvYmplY3QtPmdldE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChPcHRp
b25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCkBAIC0xMzUz
LDEwICsxMzQ1LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkK
ICAgICAgICAgICAgIHJldHVybiBvYmplY3QtPmdldE5vbkluZGV4UHJvcGVydHlTbG90KGV4ZWMs
IHByb3BlcnR5TmFtZSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG9iamVjdC0+
dHlwZSgpICE9IFByb3h5T2JqZWN0VHlwZSk7Ci0gICAgICAgIFN0cnVjdHVyZSYgc3RydWN0dXJl
ID0gKnN0cnVjdHVyZUlEVGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1
Y3R1cmVJRCgpKTsKICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNs
b3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90
b3R5cGUoKTsKKyAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFBy
b3RvdHlwZSgpOwogICAgICAgICBpZiAoIXByb3RvdHlwZS5pc09iamVjdCgpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIG9iamVjdCA9IGFzT2JqZWN0KHByb3RvdHlwZSk7CkBAIC0xMzg1
LDEzMiArMTM3Nyw2IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAK
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotdGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1v
ZGUgbW9kZT4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgQVNTRVJUKHZhbHVl
KTsKLSAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYg
QWNjZXNzb3IpKTsKLSAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykpOwotICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKTsKLQotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJl
KHZtKTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICBBU1NF
UlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRUeXBlcygpKTsKLSAgICAgICAgCi0gICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7Ci0g
ICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHko
b2Zmc2V0KTsKLSAgICAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOwotCi0gICAgICAgICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJl
bnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3Ip
ICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOwotICAgICAgICAgICAgICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG1vZGUgPT0g
UHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAg
QnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKLSAgICAgICAgaWYgKHRoaXMt
PnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091
dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0
dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcyk7Ci0gICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3Ry
dWN0dXJlKCksIG5ld0J1dHRlcmZseSk7Ci0KLSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKLSAgICAgICAgQVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOwotICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICBzbG90
LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
UmVhZE9ubHkpCi0gICAgICAgICAgICB0aGlzLT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwotICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZSgKLSAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7
Ci0gICAgaWYgKG5ld1N0cnVjdHVyZSkgewotICAgICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9y
ZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0g
ICAgICAgIAotICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7Ci0gICAgICAgIGlmIChjdXJyZW50Q2Fw
YWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKLSAgICBib29sIGhhc0luZmVycmVkVHlwZTsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRU
eXBlKTsKLSAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJv
cGVydHkob2Zmc2V0KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsK
LSAgICAgICAgICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAotICAgICAg
ICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2xvdC5zZXRFeGlz
dGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7Ci0KLSAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJy
ZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29y
KSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKLSAgICAgICAgICAg
IEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkpOwotICAgICAgICAgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVj
dHVyZUV4dGVuc2libGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2Fu
dCB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMg
b2JqZWN0IGhhcyBzd2l0Y2hlZAotICAgIC8vIHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRp
dmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2ZSBpZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25l
Ci0gICAgLy8gd2Ugd2FudC4KLSAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOwotICAgIAotICAgIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAotICAgICAgICB2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZk
ZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKLSAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVl
Rm9yTmV3VHJhbnNpdGlvbigKLSAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3Qu
Y29udGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Ci0gICAgCi0gICAgdmFsaWRh
dGVPZmZzZXQob2Zmc2V0KTsKLSAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpOwotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzaXplX3Qgb2xk
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gbmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIEFTU0VS
VChvbGRDYXBhY2l0eSA8PSBuZXdDYXBhY2l0eSk7Ci0gICAgaWYgKG9sZENhcGFjaXR5ID09IG5l
d0NhcGFjaXR5KQotICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0
b3JhZ2Uodm0sIG9sZENhcGFjaXR5LCBuZXdDYXBhY2l0eSk7Ci0gICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwotICAgIH0KLSAg
ICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgIHNsb3Quc2V0TmV3UHJvcGVydHko
dGhpcywgb2Zmc2V0KTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBu
ZXdTdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKQEAgLTE1NDksMjQgKzE0MTUsNiBA
QCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgCiAgICAgcmV0dXJuIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCi1pbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0
V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKLSAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1
dGVzICYgQWNjZXNzb3IpKTsKLSAgICBBU1NFUlQoIXZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVy
KCkpOwotICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7Ci0g
ICAgaWYgKHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKLSAgICAg
ICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0
dXJlKCk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgIGlm
IChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNS
ZWFkT25seVByb3BlcnRpZXMoKTsKLSAgICBib29sIHNob3VsZE9wdGltaXplID0gZmFsc2U7Ci0g
ICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIHNob3VsZE9wdGltaXplKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKLSAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwotfQotCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBSZWdpc3Rlcjo6b2JqZWN0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXNPYmplY3QoanNWYWx1ZSgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lv
biAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDEzICsxMDcsMTMgQEAgQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwog
ICAgIE1ldGhvZFRhYmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90
eXBlID0gSlNPYmplY3Q6OmdldFByb3RvdHlwZTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0
cnVjdHVyZUlEKCkpOwotICAgICAgICBpZiAoc3RydWN0dXJlLmNsYXNzSW5mbygpLT5tZXRob2RU
YWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1l
LCBzbG90KSkKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVJRFRhYmxl
LmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFz
c0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICBKU1ZhbHVlIHBy
b3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhv
ZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90eXBlIHx8IHNsb3QuaW50ZXJu
YWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6OlZNSW5x
dWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBl
KCk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFi
bGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5hbE1l
dGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1aXJ5
KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqZWN0LT5nZXRQcm90
b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZmFsc2UpOwpAQCAtMTM1LDE4ICsxMzUsMTggQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpnZXROb25JbmRleAogICAgIEpTT2JqZWN0KiBvYmplY3QgPSB0aGlzOwogICAgIE1ldGhvZFRh
YmxlOjpHZXRQcm90b3R5cGVGdW5jdGlvblB0ciBkZWZhdWx0R2V0UHJvdG90eXBlID0gSlNPYmpl
Y3Q6OmdldFByb3RvdHlwZTsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBTdHJ1Y3R1cmUm
IHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkp
OworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlEVGFibGUuZ2V0KG9i
amVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChMSUtFTFkoIVR5cGVJbmZvOjpvdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LT5pbmxpbmVUeXBlRmxhZ3MoKSkpKSB7CiAg
ICAgICAgICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCh2bSwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS5jbGFzc0luZm8o
KS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwgZXhlYywgcHJvcGVydHlO
YW1lLCBzbG90KSkKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZS5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgICAgIEpTVmFsdWUgcHJv
dG90eXBlOwotICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5cGUgfHwgc2xvdC5pbnRlcm5h
bE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6Vk1JbnF1
aXJ5KSkKLSAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVyZS5zdG9yZWRQcm90b3R5cGUo
KTsKKyAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJs
ZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFByb3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0
aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkp
KQorICAgICAgICAgICAgcHJvdG90eXBlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmplY3QtPmdldFByb3Rv
dHlwZSh2bSwgZXhlYyk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBm
YWxzZSk7CkBAIC0xNTcsNiArMTU3LDMwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
Z2V0Tm9uSW5kZXgKICAgICB9CiB9CiAKK2lubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOworICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikpOworICAgIEFTU0VSVCghdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIo
KSk7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsKKyAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7CisgICAgdW5zaWduZWQg
b2xkT3V0T2ZMaW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgc3RydWN0dXJlLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKAorICAgICAgICB2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkT3V0T2ZMaW5lQ2FwYWNpdHkp
IHsKKyAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9y
YWdlKHZtLCBvbGRPdXRPZkxpbmVDYXBhY2l0eSwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKKyAgICAgICAgICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAg
ICAgICAgIHNldEJ1dHRlcmZseSh2bSwgYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICAgICAgc3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworICAgICAgICAgICAgYm9vbCBz
aG91bGRPcHRpbWl6ZSA9IGZhbHNlOworICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVW
YWx1ZUZvck5ld1RyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNob3VsZE9wdGlt
aXplKTsKKyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAg
IH0pOworfQorCiAvLyBFQ01BIDguNi4yLjIKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
cHV0SW5saW5lKEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CkBAIC0y
MDcsNCArMjMxLDEzOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6Omhhc093blByb3Bl
CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoY29uc3RfY2FzdDxKU09iamVjdCo+
KHRoaXMpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCit0ZW1wbGF0ZTxKU09iamVj
dDo6UHV0TW9kZSBtb2RlPgorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBBU1NF
UlQodmFsdWUpOworICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJp
YnV0ZXMgJiBBY2Nlc3NvcikpOworICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CisgICAgQVNTRVJUKCFwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpOworCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUodm0pOworICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CisgICAg
ICAgIEFTU0VSVCghc3RydWN0dXJlLT5oYXNJbmZlcnJlZFR5cGVzKCkpOworICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CisgICAgICAgICAg
ICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQ
cm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRo
aXMsIG9mZnNldCk7CisKKyAgICAgICAgICAgIGlmICgoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSAh
PSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJpYnV0ZXMgJiBDdXN0b21B
Y2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSk7CisgICAgICAgICAg
ICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgo
bW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdW5zaWduZWQgb2xkT3V0T2ZMaW5lQ2FwYWNp
dHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIG9mZnNldCA9IHN0
cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsCisgICAgICAgICAgICBbJl0gKGNvbnN0IEdDU2FmZUNv
bmN1cnJlbnRKSVRMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpIHsKKyAgICAgICAgICAg
ICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXMtPmJ1dHRlcmZseSgpOworICAgICAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgIT0gb2xkT3V0T2ZMaW5l
Q2FwYWNpdHkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisgICAgICAgICAgICAgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgYnV0dGVyZmx5KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOworICAgICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7
CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICB0aGlzLT5z
dHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgIHNpemVf
dCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgaWYgKG5ld1N0cnVjdHVyZSkgeworICAg
ICAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yRXhpc3RpbmdUcmFuc2l0aW9uKAor
ICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1
dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIAorICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CisgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5
KCk7CisgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gbmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlICE9IHRoaXMt
PnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2Uodm0sIGN1cnJlbnRDYXBhY2l0eSwgbmV3U3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAg
ICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmFsaWRhdGVPZmZzZXQo
b2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAgc2V0
U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHVuc2ln
bmVkIGN1cnJlbnRBdHRyaWJ1dGVzOworICAgIGJvb2wgaGFzSW5mZXJyZWRUeXBlOworICAgIG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVz
LCBoYXNJbmZlcnJlZFR5cGUpOworICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewor
ICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBzdHJ1Y3R1cmUt
PmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICBpZiAoVU5MSUtFTFkoaGFzSW5m
ZXJyZWRUeXBlKSkgeworICAgICAgICAgICAgc3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvclJl
cGxhY2UoCisgICAgICAgICAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29u
dGV4dCgpID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgIH0KKworICAgICAg
ICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKKworICAgICAgICBpZiAoKGF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8IChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSkg
eworICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSk7CisgICAgICAg
ICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1
dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHRvIGZp
cmUgYWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCisgICAgLy8gc3RydWN0dXJlLiBUaGlz
IGFsbG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZlIGlmIHRoZSBuZXcgc3RydWN0
dXJlIGlzIHRoZSBvbmUKKyAgICAvLyB3ZSB3YW50LgorICAgIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7CisgICAgCisgICAg
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oCisgICAg
ICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90
LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOworICAgIG5ld1N0cnVjdHVyZS0+
d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKAorICAgICAgICB2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAg
ICAKKyAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOworICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwor
ICAgIHNpemVfdCBvbGRDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsK
KyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CisgICAgQVNTRVJUKG9sZENhcGFjaXR5IDw9IG5ld0NhcGFjaXR5KTsKKyAgICBpZiAob2xk
Q2FwYWNpdHkgIT0gbmV3Q2FwYWNpdHkpIHsKKyAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJm
bHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2Fw
YWNpdHkpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBzZXRCdXR0
ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CisgICAgfQorICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOworICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zm
c2V0KTsKKyAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQorICAgICAgICBuZXdTdHJ1Y3R1
cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB2ZXJib3NlU2FuaXRpemVT
dGFjaywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlR2VuZXJhdGlv
bmFsR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlQ29uY3VycmVu
dEJhcnJpZXJzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHVzZUNvbmN1
cnJlbnRHQywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgY29sbGVjdENv
bnRpbnVvdXNseSwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZm9yY2VG
ZW5jZWRCYXJyaWVyLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBzY3Jp
YmJsZUZyZWVDZWxscywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBz
aXplQ2xhc3NQcm9ncmVzc2lvbiwgMS40LCBOb3JtYWwsIG51bGxwdHIpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJzZUFycmF5VmFsdWVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJ
KHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NwYXJz
ZUFycmF5VmFsdWVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3Qg
U3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhCiAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKIH07CiAKKy8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGhhdmUgYSBsb2NrIGluIGl0LgogY2xh
c3MgU3BhcnNlQXJyYXlWYWx1ZU1hcCBmaW5hbCA6IHB1YmxpYyBKU0NlbGwgewogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0
NSw2IEBACiAKICNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCiAKLSNpZm5k
ZWYgTkRFQlVHCi0jZGVmaW5lIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSyAwCi0jZWxz
ZQotI2RlZmluZSBET19QUk9QRVJUWU1BUF9DT05TVEVOQ1lfQ0hFQ0sgMAotI2VuZGlmCi0KIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV1RGOwogCkBAIC0xNjMsOSArMTU3
LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUo
KSkgeworICAgICAgICBpZiAoUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPnByb3Bl
cnR5VGFibGVPck51bGwoKSkgewogICAgICAgICAgICAgKytudW1iZXJXaXRoUHJvcGVydHlNYXBz
OwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZSgpLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBz
U2l6ZSArPSB0YWJsZS0+c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMw
Niw3ICszMDAsNyBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAg
ICAgZm9yIChzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpKSB7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLmxvY2soKTsKICAg
ICAgICAgCi0gICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7
CisgICAgICAgIHRhYmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CiAgICAg
ICAgIGlmICh0YWJsZSkgewogICAgICAgICAgICAgLy8gTGVhdmUgdGhlIHN0cnVjdHVyZSBsb2Nr
ZWQsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gZG8gdGhpbmdzIHRvIGl0IGF0b21pY2FsbHkKICAg
ICAgICAgICAgIC8vIGJlZm9yZSBpdCBsb3NlcyBpdHMgcHJvcGVydHkgdGFibGUuCkBAIC0zMjEs
MzAgKzMxNSwzMSBAQCB2b2lkIFN0cnVjdHVyZTo6ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNCiAg
ICAgQVNTRVJUKCF0YWJsZSk7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwKFZNJiB2bSkKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlKQogewogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIXByb3BlcnR5
VGFibGUoKSk7Ci0KKyAgICAKKyAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CisgICAgCiAg
ICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmU7CiAgICAgUHJvcGVydHlUYWJsZSogdGFibGU7CiAgICAgCiAgICAgZmluZFN0cnVjdHVy
ZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7
CiAgICAgCisgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNl
dChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAg
IHRhYmxlID0gdGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zm
c2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0s
IGNhcGFjaXR5KTsKICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQor
ICAgIH0gZWxzZQorICAgICAgICB0YWJsZSA9IFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgY2Fw
YWNpdHkpOwogICAgIAogICAgIC8vIE11c3QgaG9sZCB0aGUgbG9jayBvbiB0aGlzIHN0cnVjdHVy
ZSwgc2luY2Ugd2Ugd2lsbCBiZSBtb2RpZnlpbmcgdGhpcyBzdHJ1Y3R1cmUncwogICAgIC8vIHBy
b3BlcnR5IG1hcC4gV2UgZG9uJ3Qgd2FudCBnZXRDb25jdXJyZW50bHkoKSB0byBzZWUgdGhlIHBy
b3BlcnR5IG1hcCBpbiBhIGhhbGYtYmFrZWQKICAgICAvLyBzdGF0ZS4KICAgICBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwotICAgIGlmICghdGFibGUp
Ci0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0sIG51bWJlck9mU2xvdHNGb3JM
YXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7Ci0gICAgZWxzZQotICAgICAg
ICBwcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0aGlzLCB0YWJsZSk7CisgICAgaWYgKHNldFByb3Bl
cnR5VGFibGUpCisgICAgICAgIHRoaXMtPnNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKIAog
ICAgIEluZmVycmVkVHlwZVRhYmxlKiB0eXBlVGFibGUgPSBtX2luZmVycmVkVHlwZVRhYmxlLmdl
dCgpOwogCkBAIC0zNTUsMTAgKzM1MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcChWCiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5t
X25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0
dHJpYnV0ZXNJblByZXZpb3VzKCkpOwogICAgICAgICBpZiAodHlwZVRhYmxlICYmIHR5cGVUYWJs
ZS0+Z2V0KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSkpCiAgICAgICAgICAgICBl
bnRyeS5oYXNJbmZlcnJlZFR5cGUgPSB0cnVlOwotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFk
ZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENo
YW5nZSk7CisgICAgICAgIHRhYmxlLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKICAgICBjaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CisgICAgCisgICAgcmV0dXJuIHRhYmxlOwogfQogCiBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUlt
cGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCkBAIC00NzMsNyArNDcwLDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbgogICAgIHRyYW5zaXRpb24t
Pm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOwogICAgIHRyYW5zaXRpb24tPm1f
bmFtZUluUHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0
QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUo
dm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAg
ICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNp
dGlvbi0+bV9pbmZlcnJlZFR5cGVUYWJsZS5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKSk7CiAKQEAgLTUyMSwzNiArNTE4LDMw
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KIAogU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNWYWx1ZSBwcm90b3R5cGUpCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJl
KTsKIAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldCh2bSwgdHJhbnNpdGlvbiwgcHJv
dG90eXBlKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAKKyAgICB0cmFuc2l0aW9uLT5w
aW4odm0sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAg
dHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRp
b24tPnBpbigpOwotCisgICAgCiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7Ci0KLSAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSkpOworICAgICAgICAKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFu
c2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgICAgIHRyYW5zaXRp
b24tPnBpbigpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlvbjsKICAg
ICB9CiAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpOwotICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJl
LT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAg
QVNTRVJUKGVudHJ5KTsKICAgICBlbnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAKQEAg
LTU2MSwxNyArNTUyLDE1IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmEKIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERpY3Rpb25hcnlLaW5kIGtpbmQsIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOwogICAgIAogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwg
c3RydWN0dXJlLCBkZWZlcnJlZCk7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0g
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVy
R0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CisgICAgdHJhbnNp
dGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkp
OwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0
cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChraW5kKTsKLSAgICB0cmFuc2l0aW9uLT5waW4o
KTsKICAgICB0cmFuc2l0aW9uLT5zZXRIYXNCZWVuRGljdGlvbmFyeSh0cnVlKTsKLQorICAgIAog
ICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJh
bnNpdGlvbjsKIH0KQEAgLTYwMywzMSArNTkyLDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpw
cmV2ZW50RXh0ZW5zaW9uc1QKIAogUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmco
dm0sIGRlZmVyR0MpOwotICAgIAotICAgIGlmIChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgpLT5z
aXplKCkgKyAxKTsKLSAgICAKLSAgICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRo
ZSB0YWJsZSAtIHNvIHRoYXQgZ2V0Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQKLSAg
ICAvLyB3aWxsIGVpdGhlciBoYXZlIHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBn
ZXQgdG8gdXNlIHRoZSBwcm9wZXJ0eSB0YWJsZQotICAgIC8vIGJlZm9yZSBpdCBpcyBzdG9sZW4u
Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICBQcm9wZXJ0eVRh
YmxlKiB0YWtlblByb3BlcnR5VGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7Ci0gICAgcHJv
cGVydHlUYWJsZSgpLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRha2VuUHJvcGVydHlUYWJsZTsKKyAg
ICAvLyBUaGlzIG11c3QgYWx3YXlzIHJldHVybiBhIHByb3BlcnR5IHRhYmxlLiBJdCBjYW4ndCBy
ZXR1cm4gbnVsbC4KKyAgICBQcm9wZXJ0eVRhYmxlKiByZXN1bHQgPSBwcm9wZXJ0eVRhYmxlT3JO
dWxsKCk7CisgICAgaWYgKHJlc3VsdCkgeworICAgICAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRh
YmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LT5jb3B5KHZtLCByZXN1bHQtPnNpemUo
KSArIDEpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAg
ICAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJu
IG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQogewog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSB0b0F0dHJpYnV0ZXModHJhbnNpdGlvbktpbmQpOwot
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKKyAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5nVHlw
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktp
bmQpOwogICAgIAogICAgIGlmIChjaGFuZ2VzSW5kZXhpbmdUeXBlKHRyYW5zaXRpb25LaW5kKSkg
ewogICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+
bV9nbG9iYWxPYmplY3QuZ2V0KCkpIHsKICAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPmlz
T3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKSB7Ci0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5p
bmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKSB7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiByZXN1bHQgPSBnbG9iYWxPYmplY3QtPm9yaWdpbmFsQXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgp
ID09IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsKICAgICAgICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CkBAIC02MzgsNyArNjI1
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIFN0cnVj
dHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwogICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJs
ZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CiAgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRp
b24tPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkgPT0gYXR0cmlidXRlcyk7Ci0gICAgICAgIEFTU0VS
VChleGlzdGluZ1RyYW5zaXRpb24tPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBp
bmRleGluZ1R5cGUpOworICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk7
CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNjQ2
LDcgKzYzMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAg
ICAKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAg
ICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAg
dHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOworICAgIHRy
YW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnMo
dHJhbnNpdGlvbktpbmQpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXREaWRQcmV2ZW50RXh0ZW5z
aW9ucyh0cnVlKTsKQEAgLTY1NywzMiArNjQ0LDI5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICAgICAgLy8gdGFibGUsIHNpbmNlIG91ciBsb2dpYyBmb3Ig
d2Fsa2luZyB0aGUgcHJvcGVydHkgdHJhbnNpdGlvbiBjaGFpbiB0byByZW1hdGVyaWFsaXplIHRo
ZQogICAgICAgICAvLyB0YWJsZSBkb2Vzbid0IGtub3cgaG93IHRvIHRha2UgaW50byBhY2NvdW50
IHN1Y2ggd2hvbGVzYWxlIGVkaXRzLgogICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFu
c2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNv
cHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOworICAgICAgICB0cmFuc2l0aW9uLT5waW5G
b3JDYWNoaW5nKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkp
OwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7Ci0g
ICAgICAgIHRyYW5zaXRpb24tPnBpbkZvckNhY2hpbmcoKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYg
ZW50cnkgOiAqdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLmdldCgpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkK
LSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwotICAg
ICAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyh0cmFu
c2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYgQWNjZXNzb3IpKQotICAgICAgICAg
ICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICAgICAgfQor
ICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVP
ck51bGwoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFibGUpOworICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogKnRhYmxlKSB7CisgICAgICAgICAgICBpZiAoc2V0c0RvbnREZWxldGVPbkFs
bFByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJp
YnV0ZXMgfD0gRG9udERlbGV0ZTsKKyAgICAgICAgICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFj
Y2Vzc29yUHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkgJiYgIShlbnRyeS5hdHRyaWJ1dGVzICYg
QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUo
dm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAg
ICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAg
ICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29y
UHJvcGVydGllcyh0cmFuc2l0aW9uS2luZCkKLSAgICAgICAgJiYgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpCi0gICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmlzRW1w
dHkoKSkKKyAgICAgICAgJiYgIXRyYW5zaXRpb24tPnByb3BlcnR5VGFibGVPck51bGwoKS0+aXNF
bXB0eSgpKQogICAgICAgICB0cmFuc2l0aW9uLT5zZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHRydWUpOwogICAgIAogICAgIGlmIChzdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKKyAgICAgICAgdHJh
bnNpdGlvbi0+cGluKHZtLCB0cmFuc2l0aW9uLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bV9sb2NrKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRy
YW5zaXRpb24pOwpAQCAtNjk4LDEzICs2ODIsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVk
KFZNJiB2bSkKICAgICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlU
YWJsZSgpKQorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlm
Tm90RW1wdHkodm0pOworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsK
LSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCkt
PmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAg
ICAgICAgaWYgKChpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgIT0gRG9udERlbGV0ZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03MTcsMTMgKzcwMCwxMiBAQCBi
b29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oVk0mIHZtKQogICAgIGlmIChpc1N0cnVjdHVyZUV4dGVu
c2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJH
Qyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgUHJvcGVydHlUYWJsZSogdGFibGUg
PSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2bSk7CisgICAgaWYgKCF0YWJsZSkKICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBw
cm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3Ig
aXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewor
ICAgIAorICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKKyAg
ICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9u
dERlbGV0ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0ZXIt
PmF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpKQpAQCAtNzM2LDIxICs3MTgsMjQg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogewogICAgIGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5KCkpOworICAgIAor
ICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAK
ICAgICBzaXplX3QgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwogICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIEFT
U0VSVChwcm9wZXJ0eVRhYmxlKCkpOworICAgICAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHBy
b3BlcnR5VGFibGVPck51bGwoKTsKKyAgICAgICAgQVNTRVJUKHRhYmxlKTsKIAotICAgICAgICBz
aXplX3QgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpOworICAgICAgICBz
aXplX3QgcHJvcGVydHlDb3VudCA9IHRhYmxlLT5zaXplKCk7CiAKICAgICAgICAgLy8gSG9sZHMg
b3VyIHZhbHVlcyBjb21wYWN0ZWQgYnkgaW5zZXJ0aW9uIG9yZGVyLgogICAgICAgICBWZWN0b3I8
SlNWYWx1ZT4gdmFsdWVzKHByb3BlcnR5Q291bnQpOwogCiAgICAgICAgIC8vIENvcGllcyBvdXQg
b3VyIHZhbHVlcyBmcm9tIHRoZWlyIGhhc2hlZCBsb2NhdGlvbnMsIGNvbXBhY3RpbmcgcHJvcGVy
dHkgdGFibGUgb2Zmc2V0cyBhcyB3ZSBnby4KICAgICAgICAgdW5zaWduZWQgaSA9IDA7Ci0gICAg
ICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7
CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKICAg
ICAgICAgbV9vZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIsICsraSkgeworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0
ZXIgPSB0YWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAg
ICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwogICAgICAg
ICAgICAgbV9vZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihp
LCBtX2lubGluZUNhcGFjaXR5KTsKICAgICAgICAgfQpAQCAtNzU5LDcgKzc0NCw3IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykKICAgICAgICAgICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KSwg
dmFsdWVzW2ldKTsKIAotICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmNsZWFyRGVsZXRlZE9mZnNl
dHMoKTsKKyAgICAgICAgdGFibGUtPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKICAgICAgICAgY2hl
Y2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIH0KIApAQCAtNzY4LDU1ICs3NTMsMzQgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogCiAgICAgc2l6ZV90IGFmdGVy
T3V0T2ZMaW5lQ2FwYWNpdHkgPSB0aGlzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwogCi0gICAgaWYg
KGJlZm9yZU91dE9mTGluZUNhcGFjaXR5ICE9IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAg
ICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAmJiBiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBh
ZnRlck91dE9mTGluZUNhcGFjaXR5KSB7CiAgICAgICAgIEFTU0VSVChiZWZvcmVPdXRPZkxpbmVD
YXBhY2l0eSA+IGFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOwogICAgICAgICAvLyBJZiB0aGUgb2Jq
ZWN0IGhhZCBhIEJ1dHRlcmZseSBidXQgYWZ0ZXIgZmxhdHRlbmluZy9jb21wYWN0aW5nIHdlIG5v
IGxvbmdlciBoYXZlIG5lZWQgb2YgaXQsCiAgICAgICAgIC8vIHdlIG5lZWQgdG8gemVybyBpdCBv
dXQgYmVjYXVzZSB0aGUgY29sbGVjdG9yIGRlcGVuZHMgb24gdGhlIFN0cnVjdHVyZSB0byBrbm93
IHRoZSBzaXplIGZvciBjb3B5aW5nLgotICAgICAgICBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSAm
JiAhYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2Jq
ZWN0KSkKLSAgICAgICAgICAgIG9iamVjdC0+c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0
aGlzLCAwKTsKKyAgICAgICAgaWYgKCFhZnRlck91dE9mTGluZUNhcGFjaXR5ICYmICF0aGlzLT5o
YXNJbmRleGluZ0hlYWRlcihvYmplY3QpKQorICAgICAgICAgICAgb2JqZWN0LT5zZXRCdXR0ZXJm
bHkodm0sIG51bGxwdHIpOwogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHdhcyBkb3duLXNpemVk
IHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgQnV0dGVyZmx5IGlzIG5vIGxvbmdl
ciB3aXRoaW4gdGhlIAogICAgICAgICAvLyBmaXJzdCBDb3BpZWRCbG9jazo6YmxvY2tTaXplIGJ5
dGVzLCB3ZSdsbCBnZXQgdGhlIHdyb25nIGFuc3dlciBpZiB3ZSB0cnkgdG8gbWFzayB0aGUgYmFz
ZSBiYWNrIHRvIAogICAgICAgICAvLyB0aGUgQ29waWVkQmxvY2sgaGVhZGVyLiBUbyBwcmV2ZW50
IHRoaXMgY2FzZSB3ZSBuZWVkIHRvIG1lbW1vdmUgdGhlIEJ1dHRlcmZseSBkb3duLgotICAgICAg
ICBlbHNlIGlmIChvYmplY3QtPmJ1dHRlcmZseSgpKQotICAgICAgICAgICAgb2JqZWN0LT5zaGlm
dEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyh2bSwgYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHksIGFm
dGVyT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvYmplY3Qt
PnNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKGxvY2tlciwgdm0sIHRoaXMsIGFmdGVyT3V0
T2ZMaW5lQ2FwYWNpdHkpOwogICAgIH0KLQotICAgIHJldHVybiB0aGlzOwotfQotCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQotewotICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKLSAgICBwaW4oKTsKLQotICAgIHJl
dHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci19Ci0KLVByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwotCi0gICAg
cGluKCk7Ci0gICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiB0aGlz
OwogfQogCi12b2lkIFN0cnVjdHVyZTo6cGluKCkKK3ZvaWQgU3RydWN0dXJlOjpwaW4oVk0mIHZt
LCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsK
ICAgICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJs
ZSh2bSwgdGFibGUpOwogICAgIGNsZWFyUHJldmlvdXNJRCgpOwogICAgIG1fbmFtZUluUHJldmlv
dXMgPSBudWxscHRyOwogfQogCi12b2lkIFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZygpCit2b2lk
IFN0cnVjdHVyZTo6cGluRm9yQ2FjaGluZyhWTSYgdm0sIFByb3BlcnR5VGFibGUqIHRhYmxlKQog
ewotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwogICAgIHNldElzUGlubmVkUHJvcGVydHlU
YWJsZSh0cnVlKTsKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CiAgICAgbV9uYW1l
SW5QcmV2aW91cyA9IG51bGxwdHI7CiB9CiAKQEAgLTg5MSwxNyArODU1LDEzIEBAIHZvaWQgU3Ry
dWN0dXJlOjp3aWxsU3RvcmVWYWx1ZVNsb3coCiAgICAgfQogCiAgICAgLy8gVGhpcyBvbmx5IHdv
cmtzIGlmIHdlJ3ZlIGdvdCBhIHByb3BlcnR5IHRhYmxlLgotICAgIFByb3BlcnR5VGFibGUqIHBy
b3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBw
cm9wZXJ0eVRhYmxlKTsKLQorICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1
cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKyAgICAKICAgICAvLyBXZSBtdXN0IGJlIGNhbGxpbmcgdGhp
cyBhZnRlciBoYXZpbmcgY3JlYXRlZCB0aGUgZ2l2ZW4gcHJvcGVydHkgb3IgY29uZmlybWVkIHRo
YXQgaXQgd2FzIHByZXNlbnQKLSAgICAvLyBhbHJlYWR5LCBzbyB3ZSBtdXN0IGhhdmUgYSBwcm9w
ZXJ0eSB0YWJsZSBub3cuCi0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUpOwotCi0gICAgLy8gLi4u
IGFuZCB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgorICAgIC8vIGFscmVhZHksIHNvIHRo
ZSBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQuCiAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkg
PSBwcm9wZXJ0eVRhYmxlLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKICAgICBBU1NFUlQoZW50
cnkpOwotCisgICAgCiAgICAgaWYgKHNob3VsZE9wdGltaXplKQogICAgICAgICBlbnRyeS0+aGFz
SW5mZXJyZWRUeXBlID0gdGFibGUtPndpbGxTdG9yZVZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhZ2UpOwogICAgIGVsc2UgewpAQCAtOTQzLDE4ICs5MDMsMTIgQEAgUHJvcGVydHlNYXBT
dGF0aXN0aWNzRXhpdExvZ2dlcjo6flByb3BlcgogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCi17Ci0gICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7Ci19Ci0KIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKLSAgICBpZiAo
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0s
ICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVh
dGUodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFj
aXR5KSk7CisgICAgaWYgKFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVs
bCgpKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICp0YWJsZSk7Cisg
ICAgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gZmFsc2U7CisgICAgcmV0dXJuIG1hdGVyaWFsaXpl
UHJvcGVydHlUYWJsZSh2bSwgc2V0UHJvcGVydHlUYWJsZSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzKQpAQCAtOTg5LDcwICs5NDMsMjQgQEAgVmVjdG9yPFByb3BlcnR5TWFw
RW50cnk+IFN0cnVjdHVyZTo6Z2V0UAogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7
Ci0gICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsK
LSAgICAKLSAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFt
ZSkpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIERv
bnRFbnVtIHx8IHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQotICAgICAgICBzZXRJc1F1aWNrUHJv
cGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOwotCi0gICAgYXV0byByZXAg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAg
ICAgY3JlYXRlUHJvcGVydHlNYXAobG9ja2VyLCB2bSk7Ci0KLSAgICBQcm9wZXJ0eU9mZnNldCBu
ZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7
Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zm
c2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0
TWF5Q2hhbmdlKTsKLSAgICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG5l
d09mZnNldDsKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIFtd
IChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7
CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCiB7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICAKLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24g
PSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKLSAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQot
ICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7Ci0KLSAgICBwcm9wZXJ0eVRhYmxlKCktPnJlbW92
ZShwb3NpdGlvbik7Ci0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNl
dCk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQot
dm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXImLCBWTSYgdm0sIHVuc2lnbmVkIGNhcGFjaXR5KQotewotICAgIEFTU0VSVCghcHJv
cGVydHlUYWJsZSgpKTsKLQotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBwcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KSk7
CisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SklU
TG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQ
cm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQog
ICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBib29sIGtub3duVW5pcXVlID0gcHJvcGVydHlO
YW1lcy5jYW5BZGRLbm93blVuaXF1ZUZvclN0cnVjdHVyZSgpOwotCi0gICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
dGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgQVNTRVJUKCFp
c1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhKGl0ZXItPmF0
dHJpYnV0ZXMgJiBEb250RW51bSkpOwogICAgICAgICBBU1NFUlQoIWlzUXVpY2tQcm9wZXJ0eUFj
Y2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbigpIHx8ICFpdGVyLT5rZXktPmlzU3ltYm9sKCkpOwog
ICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUuaW5jbHVk
ZURvbnRFbnVtUHJvcGVydGllcygpKSB7CkBAIC0xMTE0LDYgKzEwMjIsOSBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOworICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHRoaXNPYmplY3QtPm1fbG9jayk7CisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoIXRoaXNPYmplY3QtPmlzT2JqZWN0KCkpCiAg
ICAgICAgIHRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uY2xlYXIoKTsKQEAgLTEy
NzYsOTIgKzExODcsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcENvbnRleHRIZWFkZXIoUHJpbnRT
CiAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzOiIpOwogfQogCi0jaWYgRE9fUFJPUEVSVFlNQVBf
Q09OU1RFTkNZX0NIRUNLCi0KLXZvaWQgUHJvcGVydHlUYWJsZTo6Y2hlY2tDb25zaXN0ZW5jeSgp
Ci17Ci0gICAgQVNTRVJUKG1faW5kZXhTaXplID49IFByb3BlcnR5VGFibGU6Ok1pbmltdW1UYWJs
ZVNpemUpOwotICAgIEFTU0VSVChtX2luZGV4TWFzayk7Ci0gICAgQVNTRVJUKG1faW5kZXhTaXpl
ID09IG1faW5kZXhNYXNrICsgMSk7Ci0gICAgQVNTRVJUKCEobV9pbmRleFNpemUgJiBtX2luZGV4
TWFzaykpOwotCi0gICAgQVNTRVJUKG1fa2V5Q291bnQgPD0gbV9pbmRleFNpemUgLyAyKTsKLSAg
ICBBU1NFUlQobV9rZXlDb3VudCArIG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gMik7
Ci0gICAgQVNTRVJUKG1fZGVsZXRlZENvdW50IDw9IG1faW5kZXhTaXplIC8gNCk7Ci0KLSAgICB1
bnNpZ25lZCBpbmRleENvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBkZWxldGVkSW5kZXhDb3VudCA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBhID0gMDsgYSAhPSBtX2luZGV4U2l6ZTsgKythKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGVudHJ5SW5kZXggPSBtX2luZGV4W2FdOwotICAgICAgICBpZiAoZW50
cnlJbmRleCA9PSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gZGVsZXRlZEVudHJ5SW5kZXgoKSkg
ewotICAgICAgICAgICAgKytkZWxldGVkSW5kZXhDb3VudDsKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IDwgZGVsZXRlZEVudHJ5SW5k
ZXgoKSk7Ci0gICAgICAgIEFTU0VSVChlbnRyeUluZGV4IC0gMSA8PSB1c2VkQ291bnQoKSk7Ci0g
ICAgICAgICsraW5kZXhDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGIgPSBhICsgMTsg
YiAhPSBtX2luZGV4U2l6ZTsgKytiKQotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXhbYl0gIT0g
ZW50cnlJbmRleCk7Ci0gICAgfQotICAgIEFTU0VSVChpbmRleENvdW50ID09IG1fa2V5Q291bnQp
OwotICAgIEFTU0VSVChkZWxldGVkSW5kZXhDb3VudCA9PSBtX2RlbGV0ZWRDb3VudCk7Ci0KLSAg
ICBBU1NFUlQoIXRhYmxlKClbZGVsZXRlZEVudHJ5SW5kZXgoKSAtIDFdLmtleSk7Ci0KLSAgICB1
bnNpZ25lZCBub25FbXB0eUVudHJ5Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYyA9IDA7
IGMgPCB1c2VkQ291bnQoKTsgKytjKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IHRhYmxl
KClbY10ua2V5OwotICAgICAgICBpZiAocmVwID09IFBST1BFUlRZX01BUF9ERUxFVEVEX0VOVFJZ
X0tFWSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICArK25vbkVtcHR5RW50cnlDb3Vu
dDsKLSAgICAgICAgdW5zaWduZWQgaSA9IElkZW50aWZpZXJSZXBIYXNoOjpoYXNoKHJlcCk7Ci0g
ICAgICAgIHVuc2lnbmVkIGsgPSAwOwotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4OwotICAg
ICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgZW50cnlJbmRleCA9IG1faW5kZXhbaSAmIG1f
aW5kZXhNYXNrXTsKLSAgICAgICAgICAgIEFTU0VSVChlbnRyeUluZGV4ICE9IFByb3BlcnR5VGFi
bGU6OkVtcHR5RW50cnlJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVwID09IHRhYmxlKClbZW50
cnlJbmRleCAtIDFdLmtleSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
IChrID09IDApCi0gICAgICAgICAgICAgICAgayA9IDEgfCBkb3VibGVIYXNoKElkZW50aWZpZXJS
ZXBIYXNoOjpoYXNoKHJlcCkpOwotICAgICAgICAgICAgaSArPSBrOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVChlbnRyeUluZGV4ID09IGMgKyAxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobm9u
RW1wdHlFbnRyeUNvdW50ID09IG1fa2V5Q291bnQpOwotfQotCi12b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSkgewotICAgICAgICBQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgICAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghKGl0ZXItPmF0
dHJpYnV0ZXMgJiBEb250RW51bSkpOwotICAgICAgICAgICAgQVNTRVJUKCFpdGVyLT5rZXktPmlz
U3ltYm9sKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci19Ci0KLSNlbHNlCi0KLWlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotfQotCi0j
ZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCi0KIGJvb2wgQ2xhc3NJbmZv
OjpoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAgZm9y
IChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENsYXNzKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MywxNyArMTgzLDE5IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGlzU2VhbGVkKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9v
bCBpc0Zyb3plbihWTSYpOwogICAgIGJvb2wgaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gIWRpZFByZXZlbnRFeHRlbnNpb25zKCk7IH0KLSAgICBib29sIHB1dFdpbGxHcm93
T3V0T2ZMaW5lU3RvcmFnZSgpOwotICAgIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkoKTsgCiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGZsYXR0
ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKFZNJiwgSlNPYmplY3QqKTsKIAogICAgIHN0YXRpYyBjb25z
dCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKLSAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICBQ
cm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVy
dHlOYW1lKTsKKyAgICAvLyBWZXJzaW9ucyB0aGF0IHRha2UgYSBmdW5jIHdpbGwgY2FsbCBpdCBh
ZnRlciBtYWtpbmcgdGhlIGNoYW5nZSBidXQgd2hpbGUgc3RpbGwgaG9sZGluZworICAgIC8vIHRo
ZSBsb2NrLiBUaGUgY2FsbGJhY2sgaXMgbm90IGNhbGxlZCBpZiB0aGVyZSBpcyBubyBjaGFuZ2Ug
YmVpbmcgbWFkZSwgbGlrZSBpZiB5b3UgY2FsbAorICAgIC8vIHJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oKSBhbmQgdGhlIHByb3BlcnR5IGlzIG5vdCBmb3VuZC4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1
bmMmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJl
bW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1
bmMmKTsKICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNW
YWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9
CiAgICAgICAgIAogICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4gZGljdGlv
bmFyeUtpbmQoKSAhPSBOb25lRGljdGlvbmFyeUtpbmQ7IH0KQEAgLTIyOSw4ICsyMzEsOCBAQCBw
dWJsaWM6CiAgICAgVHlwZUluZm8gdHlwZUluZm8oKSBjb25zdCB7IEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsgcmV0dXJuIG1fYmxvYi50eXBlSW5mbyhtX291dE9m
TGluZVR5cGVGbGFncyk7IH0KICAgICBib29sIGlzT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHlw
ZUluZm8oKS5pc09iamVjdCgpOyB9CiAKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpICYgQWxsQXJyYXlUeXBlczsgfQot
ICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9iLmluZGV4aW5nVHlwZSgpOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
KCkgJiBBbGxBcnJheVR5cGVzOyB9CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1
ZGluZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSgpOyB9CiAgICAgICAgIAogICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCkgY29uc3QKICAgICB7CkBAIC00MzMsOSArNDM1LDkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9jbGFzc0luZm8pOwogICAgIH0KICAg
ICAgICAgCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpCiAgICAg
ewotICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0
cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU3RydWN0dXJlLCBtX2Jsb2IpICsgU3RydWN0dXJlSURCbG9iOjppbmRleGlu
Z1R5cGVJbmNsdWRpbmdIaXN0b3J5T2Zmc2V0KCk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBw
dHJkaWZmX3QgcHJvcGVydHlUYWJsZVVuc2FmZU9mZnNldCgpCkBAIC01NzksNiArNTgxLDggQEAg
cHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGR1bXBDb250ZXh0SGVhZGVyKFByaW50U3Ry
ZWFtJik7CiAgICAgCisgICAgQ29uY3VycmVudEpJVExvY2smIGxvY2soKSB7IHJldHVybiBtX2xv
Y2s7IH0KKyAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAtNjMz
LDQ0ICs2MzcsNDUgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0Rp
Y3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQsIERlZmVy
cmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0
eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0
eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogCi0gICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+JiBwcm9w
ZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShWTSYp
OwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOwot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Vk0mIHZtLCBEZWZlckdDJikKKyAgICAvLyBUaGlzIG1heSBncmFiIHRoZSBsb2NrLCBvciBub3Qu
IERvIG5vdCBjYWxsIHdoZW4gaG9sZGluZyB0aGUgU3RydWN0dXJlJ3MgbG9jay4KKyAgICBQcm9w
ZXJ0eVRhYmxlKiBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eShWTSYgdm0pCiAgICAgewot
ICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgQVNTRVJUKGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKSk7Ci0gICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpICYmIHBy
ZXZpb3VzSUQoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOworICAg
ICAgICBpZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdl
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgaWYgKCFwcmV2aW91c0lE
KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZSh2bSk7CiAgICAgfQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoVk0mIHZtLCBQcm9wZXJ0eVRhYmxlKiYgdGFi
bGUpCisgICAgCisgICAgLy8gVGhpcyBtYXkgZ3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3Qg
Y2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJs
ZSogZW5zdXJlUHJvcGVydHlUYWJsZShWTSYgdm0pCiAgICAgewotICAgICAgICBBU1NFUlQoIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsKLSAgICAgICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KSk7Ci0gICAgICAgIHRhYmxlID0gcHJvcGVydHlUYWJsZSgpLmdldCgpOwotICAgICAgICBpZiAo
IXRhYmxlICYmIHByZXZpb3VzSUQoKSkgewotICAgICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7Ci0gICAgICAg
ICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUoKS5nZXQoKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoUHJvcGVydHlUYWJsZSogcmVzdWx0ID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1hdGVyaWFsaXplUHJv
cGVydHlUYWJsZSh2bSk7CiAgICAgfQotICAgIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyhWTSYgdm0sIERlZmVyR0MmKQorICAgIAorICAgIFByb3BlcnR5
VGFibGUqIHByb3BlcnR5VGFibGVPck51bGwoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwotICAgICAgICBjaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICAg
ICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCh2bSk7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5
VGFibGVVbnNhZmUuZ2V0KCk7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgd2lsbCBncmFiIHRo
ZSBsb2NrLiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVjdHVyZSdzIGxvY2suCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlUYWJsZSogbWF0ZXJpYWxpemVQcm9wZXJ0eVRh
YmxlKFZNJiwgYm9vbCBzZXRQcm9wZXJ0eVRhYmxlID0gdHJ1ZSk7CisgICAgCisgICAgdm9pZCBz
ZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpOworICAgIAorICAg
IFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Cisg
ICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJik7CiAKICAg
ICB2b2lkIHNldFByZXZpb3VzSUQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7
CkBAIC02OTcsOCArNzAyLDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzVmFsaWQoSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4pIGNvbnN0OwogICAg
IGJvb2wgaXNWYWxpZChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBl
Q2hhaW4pIGNvbnN0OwogICAgICAgICAKLSAgICB2b2lkIHBpbigpOwotICAgIHZvaWQgcGluRm9y
Q2FjaGluZygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcGluKFZNJiwgUHJvcGVydHlU
YWJsZSopOworICAgIHZvaWQgcGluRm9yQ2FjaGluZyhWTSYsIFByb3BlcnR5VGFibGUqKTsKICAg
ICAKICAgICBib29sIGlzUmFyZURhdGEoSlNDZWxsKiBjZWxsKSBjb25zdAogICAgIHsKQEAgLTcx
MCw3ICs3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KG1fcHJldmlvdXNP
clJhcmVEYXRhLmdldCgpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAgYm9vbCBjaGVja09mZnNl
dENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFsbG9j
YXRlUmFyZURhdGEoVk0mKTsKQEAgLTc0MCw3ICs3NDUsNyBAQCBwcml2YXRlOgogCiAgICAgU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCi0gICAgLy8gU2hvdWxk
IGJlIGFjY2Vzc2VkIHRocm91Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBi
ZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KKyAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQg
dGhyb3VnaCBlbnN1cmVQcm9wZXJ0eVRhYmxlKCkuIER1cmluZyBHQywgaXQgbWF5IGJlIHNldCB0
byAwIGJ5IGFub3RoZXIgdGhyZWFkLgogICAgIC8vIER1cmluZyBhIEhlYXAgU25hcHNob3QgR0Mg
d2UgYXZvaWQgY2xlYXJpbmcgdGhlIHRhYmxlIHNvIGl0IGlzIHNhZmUgdG8gdXNlLgogICAgIFdy
aXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oCShy
ZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVJREJsb2IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxMCArNDAsMTAgQEAgcHVibGljOgog
ICAgICAgICB1LmRvdWJsZVdvcmQgPSAweGJiYWRiZWVmOwogICAgIH0KIAotICAgIFN0cnVjdHVy
ZUlEQmxvYihTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvKQorICAgIFN0cnVjdHVyZUlEQmxvYihTdHJ1Y3R1
cmVJRCBzdHJ1Y3R1cmVJRCwgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rv
cnksIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKICAgICB7CiAgICAgICAgIHUuZmllbGRzLnN0
cnVjdHVyZUlEID0gc3RydWN0dXJlSUQ7Ci0gICAgICAgIHUuZmllbGRzLmluZGV4aW5nVHlwZSA9
IGluZGV4aW5nVHlwZTsKKyAgICAgICAgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7CiAgICAgICAgIHUuZmllbGRzLnR5
cGUgPSB0eXBlSW5mby50eXBlKCk7CiAgICAgICAgIHUuZmllbGRzLmlubGluZVR5cGVGbGFncyA9
IHR5cGVJbmZvLmlubGluZVR5cGVGbGFncygpOwogICAgICAgICB1LmZpZWxkcy5kZWZhdWx0Q2Vs
bFN0YXRlID0gQ2VsbFN0YXRlOjpOZXdXaGl0ZTsKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgog
ICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUlEQmxvYiYgb3RoZXIpIHsgdS5kb3Vi
bGVXb3JkID0gb3RoZXIudS5kb3VibGVXb3JkOyB9CiAgICAgCiAgICAgU3RydWN0dXJlSUQgc3Ry
dWN0dXJlSUQoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5zdHJ1Y3R1cmVJRDsgfQotICAgIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiB1LmZpZWxkcy5pbmRleGlu
Z1R5cGU7IH0KLSAgICB2b2lkIHNldEluZGV4aW5nVHlwZShJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlKSB7IHUuZmllbGRzLmluZGV4aW5nVHlwZSA9IGluZGV4aW5nVHlwZTsgfQorICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gdS5m
aWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsgfQorICAgIHZvaWQgc2V0SW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeShJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5n
SGlzdG9yeSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5ID0gaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeTsgfQogICAgIEpTVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gdS5maWVsZHMudHlwZTsgfQogICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBlRmxhZ3MgaW5saW5l
VHlwZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMuaW5saW5lVHlwZUZsYWdzOyB9CiAg
ICAgCkBAIC02NywxNiArNjcsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuc3RydWN0dXJlSUQpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLmluZGV4
aW5nVHlwZSk7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJlSURCbG9i
LCB1LmZpZWxkcy5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICB9CiAKIHByaXZh
dGU6CiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgU3RydWN0dXJl
SUQgc3RydWN0dXJlSUQ7Ci0gICAgICAgICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlOwor
ICAgICAgICAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7CiAg
ICAgICAgICAgICBKU1R5cGUgdHlwZTsKICAgICAgICAgICAgIFR5cGVJbmZvOjpJbmxpbmVUeXBl
RmxhZ3MgaW5saW5lVHlwZUZsYWdzOwogICAgICAgICAgICAgQ2VsbFN0YXRlIGRlZmF1bHRDZWxs
U3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05Myw4ICs5Myw3
IEBAIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjoKICAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKSA9PSBpbmZvKCkpOwogCi0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZTsKLSAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIHByb3BlcnR5VGFibGUpOwor
ICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZO
b3RFbXB0eSh2bSk7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKQogICAgICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKIApAQCAtMjE5LDMxICsyMTgsNiBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6
OmlzVmFsaWQoRXhlY1N0YXRlCiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7CiB9CiAKLWlubGluZSBib29sIFN0cnVj
dHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKLXsKLSAgICBjaGVja09mZnNldENv
bnNpc3RlbmN5KCk7Ci0KLSAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxp
bmVTaXplKCkpOwotCi0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCk7Ci0gICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXpl
KTsKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gcHJvcGVydHlUYWJs
ZSgpLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAgIGlmIChwcm9wZXJ0eVRhYmxlKCktPmhh
c0RlbGV0ZWRPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKHRv
dGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkpOwotICAgIHJl
dHVybiBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOwot
fQotCi1BTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgU3RydWN0dXJl
Ojpwcm9wZXJ0eVRhYmxlKCkKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwot
fQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKExJS0VMWSghaGFzUmFyZURhdGEoKSkpCkBAIC0yNzEs
NyArMjQ1LDcgQEAgaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydAogCiBB
TFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29u
c3QKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRhYmxl
VW5zYWZlLmdldCgpOworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBwcm9wZXJ0
eVRhYmxlT3JOdWxsKCk7CiAKICAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKICAgICAgICAgQVNT
RVJUKCFpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CkBAIC0yOTIsNiArMjY2LDExIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2UKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKK3sKKyAgICBjaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7Cit9CisKIGlubGluZSBzaXplX3QgbmV4dE91dE9mTGluZVN0
b3JhZ2VDYXBhY2l0eShzaXplX3QgY3VycmVudENhcGFjaXR5KQogewogICAgIGlmICghY3VycmVu
dENhcGFjaXR5KQpAQCAtMjk5LDExICsyNzgsNiBAQCBpbmxpbmUgc2l6ZV90IG5leHRPdXRPZkxp
bmVTdG9yYWdlQ2FwYWNpCiAgICAgcmV0dXJuIGN1cnJlbnRDYXBhY2l0eSAqIG91dE9mTGluZUdy
b3d0aEZhY3RvcjsKIH0KIAotaW5saW5lIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld091
dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpCi17Ci0gICAgcmV0dXJuIG5leHRPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkob3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci19Ci0KIGlubGluZSB2b2lkIFN0cnVj
dHVyZTo6c2V0T2JqZWN0VG9TdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNT
dHJpbmcqIHZhbHVlLCBQcm9wZXJ0eVNsb3QgdG9TdHJpbmdUYWdTeW1ib2xTbG90KQogewogICAg
IGlmICghaGFzUmFyZURhdGEoKSkKQEAgLTMxMSw0ICsyODUsODUgQEAgaW5saW5lIHZvaWQgU3Ry
dWN0dXJlOjpzZXRPYmplY3RUb1N0cmluZwogICAgIHJhcmVEYXRhKCktPnNldE9iamVjdFRvU3Ry
aW5nVmFsdWUoZXhlYywgdm0sIHRoaXMsIHZhbHVlLCB0b1N0cmluZ1RhZ1N5bWJvbFNsb3QpOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IGVuc3VyZVByb3BlcnR5VGFibGUodm0pOworCisgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKKyAgICAKKyAgICBzZXRQcm9wZXJ0eVRhYmxlKHZt
LCB0YWJsZSk7CisgICAgCisgICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBw
cm9wZXJ0eU5hbWUpKSk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgaWYgKGF0dHJp
YnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkKKyAgICAgICAgc2V0
SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKKworICAg
IGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOworCisgICAgUHJvcGVydHlPZmZzZXQgbmV3
T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgCisgICAg
dGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwg
bV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICAK
KyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgbmV3T2Zmc2V0KTsK
KyAgICByZXR1cm4gbmV3T2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5s
aW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBhdXRvIHJl
cCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAgICAKKyAgICAvLyBXZSBPTkxZIHJlbW92ZSBmcm9t
IHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcywgd2hpY2ggd2lsbCBoYXZlIGEgcGlubmVkIHByb3Bl
cnR5IHRhYmxlLgorICAgIC8vIFRoZSBvbmx5IHdheSBmb3IgdGhlbSBub3QgdG8gaGF2ZSBhIHRh
YmxlIGlzIGlmIHRoZXkgYXJlIGVtcHR5LgorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gcHJv
cGVydHlUYWJsZU9yTnVsbCgpOworCisgICAgaWYgKCF0YWJsZSkKKyAgICAgICAgcmV0dXJuIGlu
dmFsaWRPZmZzZXQ7CisKKyAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9u
ID0gdGFibGUtPmZpbmQocmVwKTsKKyAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQorICAgICAgICBy
ZXR1cm4gaW52YWxpZE9mZnNldDsKKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBw
b3NpdGlvbi5maXJzdC0+b2Zmc2V0OworCisgICAgdGFibGUtPnJlbW92ZShwb3NpdGlvbik7Cisg
ICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKKworICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworICAgIHJldHVybiBvZmZzZXQ7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgY29uc3QgRnVuYyYgZnVuYykKK3sKKyAg
ICBwaW4odm0sIGVuc3VyZVByb3BlcnR5VGFibGUodm0pKTsKKyAgICAKKyAgICByZXR1cm4gYWRk
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGZ1bmMpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0
IEZ1bmMmIGZ1bmMpCit7CisgICAgQVNTRVJUKGlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOwor
ICAgIEFTU0VSVChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CisgICAgQVNTRVJUKHByb3BlcnR5
VGFibGVPck51bGwoKSk7CisgICAgCisgICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIGZ1
bmMpOworfQorCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3BlcnR5VGFibGUoVk0mIHZt
LCBQcm9wZXJ0eVRhYmxlKiB0YWJsZSkKK3sKKyAgICBtX3Byb3BlcnR5VGFibGVVbnNhZmUuc2V0
TWF5QmVOdWxsKHZtLCB0aGlzLCB0YWJsZSk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE2LTExLTExICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIEdDIHNob3VsZCBiZSBvcHRpb25hbGx5IGNvbmN1
cnJlbnQgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDQ1NAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2Zm
cmV5IEdhcmVuLgorICAgICAgICAKKyAgICAgICAgVGhlIHJlYXNvbiB3aHkgSSB3ZW50IHRvIHN1
Y2ggZ3JlYXQgcGFpbnMgdG8gbWFrZSBXVEY6OkxvY2sgZml0IGluIHR3byBiaXRzIGlzIHRoYXQg
SQorICAgICAgICBrbmV3IHRoYXQgSSB3b3VsZCBldmVudHVhbGx5IG5lZWQgdG8gc3R1ZmYgb25l
IGludG8gc29tZSBtaXNjZWxsYW5lb3VzIGJpdHMgb2YgdGhlCisgICAgICAgIEpTQ2VsbCBoZWFk
ZXIuIFRoYXQgdGltZSBoYXMgY29tZSwgYmVjYXVzZSB0aGUgY29uY3VycmVudCBHQyBoYXMgbnVt
ZXJvdXMgcmFjZQorICAgICAgICBjb25kaXRpb25zIGluIHZpc2l0Q2hpbGRyZW4gdGhhdCBjYW4g
YmUgdHJpdmlhbGx5IGZpeGVkIGlmIGVhY2ggb2JqZWN0IGp1c3QgaGFzIGFuCisgICAgICAgIGlu
dGVybmFsIGxvY2suIFNvbWUgY2VsbCB0eXBlcyBtaWdodCB1c2UgaXQgdG8gc2ltcGx5IHByb3Rl
Y3QgdGhlaXIgZW50aXJlIHZpc2l0Q2hpbGRyZW4KKyAgICAgICAgZnVuY3Rpb24gYW5kIGFueXRo
aW5nIHRoYXQgbXV0YXRlcyB0aGUgZmllbGRzIGl0IHRvdWNoZXMsIHdoaWxlIG90aGVyIGNlbGwg
dHlwZXMgbWlnaHQKKyAgICAgICAgdXNlIGl0IGFzIGEgImxvY2sgb2YgbGFzdCByZXNvcnQiIHRv
IGhhbmRsZSBjb3JuZXIgY2FzZXMgb2YgYW4gb3RoZXJ3aXNlIHdhaXQtZnJlZSBvcgorICAgICAg
ICBsb2NrLWZyZWUgYWxnb3JpdGhtLiBSaWdodCBub3csIGl0J3MgdXNlZCB0byBwcm90ZWN0IGNl
cnRhaW4gdHJhbnNmb3JtYXRpb25zIGludm9sdmluZworICAgICAgICBpbmRleGluZyBzdG9yYWdl
LgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlzIGhhcHBlbiwgSSBmYWN0b3JlZCB0aGUg
V1RGOjpMb2NrIGFsZ29yaXRobSBpbnRvIGEgTG9ja0FsZ29yaXRobSBzdHJ1Y3QgdGhhdAorICAg
ICAgICBpcyB0ZW1wbGF0aXplZCBvbiBsb2NrIHR5cGUgKHVpbnQ4X3QgZm9yIFdURjo6TG9jayks
IHRoZSBpc0hlbGRCaXQgdmFsdWUgKDEgZm9yCisgICAgICAgIFdURjo6TG9jayksIGFuZCB0aGUg
aGFzUGFya2VkQml0IHZhbHVlICgyIGZvciBXVEY6OkxvY2spLiBUaGlzIGNvdWxkIGhhdmUgYmVl
biBkb25lIGFzCisgICAgICAgIGEgdGVtcGxhdGl6ZWQgTG9jayBjbGFzcyB0aGF0IGJhc2ljYWxs
eSBjb250YWlucyBBdG9taWM8TG9ja1R5cGU+LiBZb3UgY291bGQgdGhlbiBtYWtlCisgICAgICAg
IGFueSBmaWVsZCBpbnRvIGEgbG9jayBieSBiaXR3aXNlX2Nhc3RpbmcgaXQgdG8gVGVtcGxhdGVM
b2NrPGZpZWxkIHR5cGUsIGJpdDEsIGJpdDI+LiBCdXQKKyAgICAgICAgdGhpcyBmZWx0IHRvbyBk
aXJ0eSwgc28gaW5zdGVhZCwgTG9ja0FsZ29yaXRobSBoYXMgc3RhdGljIG1ldGhvZHMgdGhhdCB0
YWtlCisgICAgICAgIEF0b21pYzxMb2NrVHlwZT4mIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LiBJ
IHRoaW5rIHRoYXQgdGhpcyBtYWtlcyBpdCBtb3JlIG5hdHVyYWwgdG8KKyAgICAgICAgcHJvamVj
dCBhIExvY2tBbGdvcml0aG0gb250byBhbiBleGlzdGluZyBBdG9taWM8PiBmaWVsZC4gU2FkbHks
IHNvbWUgcGxhY2VzIGhhdmUgdG8gY2FzdAorICAgICAgICB0aGVpciBub24tQXRvbWljPD4gZmll
bGQgdG8gQXRvbWljPD4gaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yay4gTGlrZSBzbyBtYW55IG90
aGVyIHRoaW5ncworICAgICAgICB3ZSBkbywgdGhpcyBqdXN0IHNob3dzIHRoYXQgdGhlIEMrKyBz
dHlsZSBvZiBsYWJlbGluZyBmaWVsZHMgdGhhdCBhcmUgc3ViamVjdCB0byBhdG9taWMKKyAgICAg
ICAgb3BzIGFzIGF0b21pYyBpcyBjb3VudGVycHJvZHVjdGl2ZS4gTWF5YmUgc29tZSBkYXkgSSds
bCBjaGFuZ2UgTG9ja0FsZ29yaXRobSB0byB1c2Ugb3VyCisgICAgICAgIG90aGVyIEF0b21pY3Mg
QVBJLCB3aGljaCBkb2VzIG5vdCByZXF1aXJlIEF0b21pYzw+LgorICAgICAgICAKKyAgICAgICAg
V1RGOjpMb2NrIG5vdyB1c2VzIExvY2tBbGdvcml0aG0uIFRoZSBzbG93IHBhdGhzIGFyZSBzdGls
bCBvdXRsaW5lZC4gSSBkb24ndCBmZWVsIHRvbworICAgICAgICBiYWQgYWJvdXQgdGhlIExvY2tB
bGdvcml0aG0uaCBoZWFkZXIgYmVpbmcgaW5jbHVkZWQgaW4gc28gbWFueSBwbGFjZXMgYmVjYXVz
ZSB3ZSBjaGFuZ2UKKyAgICAgICAgdGhhdCBhbGdvcml0aG0gc28gaW5mcmVxdWVudGx5LgorICAg
ICAgICAKKyAgICAgICAgQWxzbywgSSBhZGRlZCBhIGhhc0VsYXBzZWQodGltZSkgZnVuY3Rpb24u
IFRoaXMgZnVuY3Rpb24gbWFrZXMgaXQgc28gbXVjaCBtb3JlIG5hdHVyYWwKKyAgICAgICAgdG8g
d3JpdGUgdGltZXNsaWNpbmcgY29kZSwgd2hpY2ggdGhlIGNvbmN1cnJlbnQgR0MgaGFzIHRvIGRv
IGEgbG90IG9mLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9MaXN0RHVtcC5oOgor
ICAgICAgICAqIHd0Zi9Mb2NrLmNwcDoKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmxvY2tTbG93
KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpM
b2NrQmFzZTo6dW5sb2NrRmFpcmx5U2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxv
Y2tTbG93SW1wbCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0xvY2suaDoKKyAgICAgICAgKFdU
Rjo6TG9ja0Jhc2U6OmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dHJ5TG9jayk6Cisg
ICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6
dW5sb2NrRmFpcmx5KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OmlzSGVsZCk6CisgICAgICAg
ICgpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9Mb2NrQWxnb3JpdGhtLmg6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrRmFzdEFzc3VtaW5nWmVybyk6CisgICAgICAg
IChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tGYXN0KToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29y
aXRobTo6bG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnRyeUxvY2spOgorICAg
ICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2tGYXN0QXNzdW1pbmdaZXJvKToKKyAgICAg
ICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFzdCk6CisgICAgICAgIChXVEY6OkxvY2tB
bGdvcml0aG06OnVubG9jayk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zh
aXJseSk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmlzTG9ja2VkKToKKyAgICAgICAg
KFdURjo6TG9ja0FsZ29yaXRobTo6bG9ja1Nsb3cpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3Jp
dGhtOjp1bmxvY2tTbG93KToKKyAgICAgICAgKiB3dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBl
LmNwcDoKKyAgICAgICAgKFdURjo6aGFzRWxhcHNlZCk6CisgICAgICAgICogd3RmL1RpbWVXaXRo
RHluYW1pY0Nsb2NrVHlwZS5oOgorCiAyMDE2LTExLTExICBBbGV4IENocmlzdGVuc2VuICA8YWNo
cmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWxsb3cgbXV0YWJsZSBsYW1iZGFzIGlu
IEhhc2hNYXA6OmVuc3VyZQpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qIEJlZ2lu
IFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBO
b0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKKwkJMEYwRkNEREUxREQx
NjdGOTAwQ0NBQjUzIC8qIExvY2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxn
b3JpdGhtLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZlcnJhYmxl
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi87
IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0RjcwMEE3
QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKIAkJMEYzNTAxNjQxQkIyNThENTAwRjBBMkEzIC8q
IFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggKi87IH07CkBAIC0z
NzQsNiArMzc1LDcgQEAKIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJ
CTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm9M
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMEZDREREMUREMTY3RjkwMEND
QUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExvY2tBbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2QTQx
N0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxp
cEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQw
MEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1Myw2ICs5NTUsNyBAQAogCQkJCUE4QTQ3MkMx
MTUxQTgyNUEwMDQxMjNGRiAvKiBMaXN0SGFzaFNldC5oICovLAogCQkJCTBGRTE2NDY4MUI2RkZD
OTYwMDQwMEU3QyAvKiBMb2NrLmNwcCAqLywKIAkJCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0Mg
LyogTG9jay5oICovLAorCQkJCTBGMEZDREREMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3Jp
dGhtLmggKi8sCiAJCQkJQThBNDcyQzMxNTFBODI1QTAwNDEyM0ZGIC8qIExvY2tlci5oICovLAog
CQkJCTUxM0UxNzBBMUNEN0Q1QkYwMEUzNjUwQiAvKiBMb2dnaW5nQWNjdW11bGF0b3IuaCAqLywK
IAkJCQlBOEE0NzJDNjE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZC5jcHAgKi8sCkBAIC0x
MzIzLDYgKzEzMjYsNyBAQAogCQkJCUE4QTQ3MzlCMTUxQTgyNUIwMDQxMjNGRiAvKiBDcnlwdG9n
cmFwaGljYWxseVJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1NTU2RjYxOEEw
Q0MxODAwNkY0OEZCIC8qIENyeXB0b2dyYXBoaWNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDNBMTUxQTgyNUIwMDQxMjNGRiAvKiBDU3RyaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjBGQ0RERTFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDczOUQxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzM5RjE1MUE4MjVCMDA0MTIzRkYgLyogRGF0YUxvZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTExNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVNYXRoLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiwzNiBAQCBz
dHJ1Y3QgQXRvbWljIHsKICAgICBBTFdBWVNfSU5MSU5FIFQgZXhjaGFuZ2VYb3IoVSBvcGVyYW5k
LCBzdGQ6Om1lbW9yeV9vcmRlciBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3QpIHsg
cmV0dXJuIHZhbHVlLmZldGNoX3hvcihvcGVyYW5kLCBvcmRlcik7IH0KICAgICAKICAgICBBTFdB
WVNfSU5MSU5FIFQgZXhjaGFuZ2UoVCBuZXdWYWx1ZSwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIg
PSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5leGNoYW5nZShuZXdW
YWx1ZSwgb3JkZXIpOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1bmMp
CisgICAgeworICAgICAgICBUIG9sZFZhbHVlID0gbG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKKyAgICAgICAgVCBuZXdWYWx1ZSA9IG9sZFZhbHVlOworICAgICAgICBmdW5jKG5ld1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKG9sZFZhbHVl
LCBuZXdWYWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rpb25SZWxheGVkKGNvbnN0IEZ1bmMmIGZ1bmMpCisg
ICAgeworICAgICAgICB3aGlsZSAoIXRyeVRyYW5zYXRpb25SZWxheGVkKGZ1bmMpKSB7IH0KKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIEFMV0FZU19JTkxJTkUgYm9v
bCB0cnlUcmFuc2FjdGlvbihjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgVCBvbGRW
YWx1ZSA9IGxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIFQgbmV3VmFs
dWUgPSBvbGRWYWx1ZTsKKyAgICAgICAgZnVuYyhuZXdWYWx1ZSk7CisgICAgICAgIHJldHVybiBj
b21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdHJhbnNhY3Rpb24o
Y29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIHdoaWxlICghdHJ5VHJhbnNhY3Rpb24o
ZnVuYykpIHsgfQorICAgIH0KIAogICAgIHN0ZDo6YXRvbWljPFQ+IHZhbHVlOwogfTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBzZXQoV1RGX0hF
QURFUlMKICAgICBJdGVyYXRvclJhbmdlLmgKICAgICBMaXN0SGFzaFNldC5oCiAgICAgTG9jay5o
CisgICAgTG9ja0FsZ29yaXRobS5oCiAgICAgTG9ja2VyLmgKICAgICBNRDUuaAogICAgIE1haW5U
aHJlYWQuaApJbmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTAgKzE3NywxMSBAQCBMaXN0
RHVtcEluQ29udGV4dDxULCBVPiBsaXN0RHVtcEluQ29udGV4CiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpsaXN0RHVtcDsKLXVzaW5nIFdURjo6c29ydGVkTGlzdER1bXA7Cit1c2lu
ZyBXVEY6Omxpc3REdW1wSW5Db250ZXh0OwogdXNpbmcgV1RGOjptYXBEdW1wOwordXNpbmcgV1RG
Ojpwb2ludGVyTGlzdER1bXA7Cit1c2luZyBXVEY6OnNvcnRlZExpc3REdW1wOwogdXNpbmcgV1RG
Ojpzb3J0ZWRNYXBEdW1wOwotdXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIAogI2VuZGlm
IC8vIExpc3REdW1wX2gKIApJbmRleDogU291cmNlL1dURi93dGYvTG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTG9jay5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9XVEYvd3RmL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMjAgKzI2LDIxIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jay5oIgogCi0jaW5jbHVkZSAiRGF0YUxv
Zy5oIgotI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKLSNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVh
bS5oIgotI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKLSNpbmNsdWRlIDx0aHJlYWQ+
Ci0KIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7
Ci0KLU5FVkVSX0lOTElORSB2b2lkIExvY2tCYXNlOjpsb2NrU2xvdygpCit2b2lkIExvY2tCYXNl
Ojpsb2NrU2xvdygpCiB7Ci0gICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKLQotICAgIC8vIFRo
aXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlr
ZXNSVk0gZXhwZXJpbWVudHMuCi0gICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7Ci0g
ICAgCi0gICAgZm9yICg7OykgewotICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBt
X2J5dGUubG9hZCgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVW
YWx1ZSwgIlxuIikpOwotCi0gICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBp
bi4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKLSAgICAgICAg
ICAgICYmIG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJl
bnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVj
aCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgotICAgICAgICBpZiAoIShjdXJyZW50
Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKLSAg
ICAgICAgICAgIHNwaW5Db3VudCsrOwotICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWll
bGQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmVl
ZCB0byBwYXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFu
ZCB0aGVuIHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCi0gICAgICAgIC8vIGlmIHRoZSBwYXJrZWQg
Yml0IHdhc24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgotICAgICAgICBpZiAo
IShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQotICAgICAgICAgICAgJiYgIW1fYnl0
ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUg
fCBoYXNQYXJrZWRCaXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gV2Ug
bm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0
aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgotICAgICAgICBQYXJraW5nTG90OjpQYXJrUmVz
dWx0IHBhcmtSZXN1bHQgPQotICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmso
Jm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKLSAgICAgICAgaWYgKHBhcmtSZXN1
bHQud2FzVW5wYXJrZWQpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+
KHBhcmtSZXN1bHQudG9rZW4pKSB7Ci0gICAgICAgICAgICBjYXNlIERpcmVjdEhhbmRvZmY6Ci0g
ICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJlbGVhc2VkLiBJdCB3YXMgaGFu
ZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBkaWQKLSAgICAgICAgICAgICAg
ICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSGVsZCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
IHRoZSBjb21tb24gY2FzZS4gVGhlIHRocmVhZCB0aGF0IGNhbGxlZCB1bmxvY2soKSBoYXMgcmVs
ZWFzZWQgdGhlIGxvY2ssCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tl
biB1cCBzbyB0aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4g
QnV0Ci0gICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBi
ZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBX
ZSBoYXZlIGF3b2tlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUg
Y2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAotICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBh
Z2Fpbi4KLSAgICB9CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OmxvY2tTbG93KG1fYnl0ZSk7
CiB9CiAKIHZvaWQgTG9ja0Jhc2U6OnVubG9ja1Nsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBs
KFVuZmFpcik7CisgICAgRGVmYXVsdExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBE
ZWZhdWx0TG9ja0FsZ29yaXRobTo6VW5mYWlyKTsKIH0KIAogdm9pZCBMb2NrQmFzZTo6dW5sb2Nr
RmFpcmx5U2xvdygpCiB7Ci0gICAgdW5sb2NrU2xvd0ltcGwoRmFpcik7Ci19Ci0KLU5FVkVSX0lO
TElORSB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93SW1wbChGYWlybmVzcyBmYWlybmVzcykKLXsK
LSAgICAvLyBXZSBjb3VsZCBnZXQgaGVyZSBiZWNhdXNlIHRoZSB3ZWFrIENBUyBpbiB1bmxvY2so
KSBmYWlsZWQgc3B1cmlvdXNseSwgb3IgYmVjYXVzZSB0aGVyZSBpcwotICAgIC8vIHNvbWVvbmUg
cGFya2VkLiBTbywgd2UgbmVlZCBhIENBUyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9j
ayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxkCi0gICAgLy8gYmUgaGVsZCBhbmQgcGFya2VkIGlmIHNv
bWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxvY2tpbmcuCi0gICAgZm9y
ICg7OykgewotICAgICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSBpc0hlbGRCaXQgfHwgb2xkQnl0
ZVZhbHVlID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChvbGRCeXRlVmFsdWUgPT0gaXNIZWxkQml0KSB7Ci0gICAgICAgICAgICBpZiAobV9ieXRl
LmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNvbWVv
bmUgaXMgcGFya2VkLiBVbnBhcmsgZXhhY3RseSBvbmUgdGhyZWFkLiBXZSBtYXkgaGFuZCB0aGUg
bG9jayB0byB0aGF0IHRocmVhZAotICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxv
Y2sgdGhlIGxvY2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJh
cmdpbmcuCi0gICAgICAgIC8vIFdoZW4gd2UgdW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtl
ZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCi0gICAg
ICAgIC8vIG90aGVyIHRocmVhZHMgcGFya2VkLgotICAgICAgICBBU1NFUlQob2xkQnl0ZVZhbHVl
ID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKLSAgICAgICAgUGFya2luZ0xvdDo6dW5w
YXJrT25lKAotICAgICAgICAgICAgJm1fYnl0ZSwKLSAgICAgICAgICAgIFsmXSAoUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgewotICAgICAgICAgICAgICAgIC8v
IFdlIGFyZSB0aGUgb25seSBvbmVzIHRoYXQgY2FuIGNsZWFyIGVpdGhlciB0aGUgaXNIZWxkQml0
IG9yIHRoZSBoYXNQYXJrZWRCaXQsCi0gICAgICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0
aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0IG5vdy4KLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9ieXRlLmxvYWQoKSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZh
aXJuZXNzID09IEZhaXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRoaW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBs
b2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gd2FpdGlu
Zy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMp
Ci0gICAgICAgICAgICAgICAgICAgIG1fYnl0ZS5zdG9yZShoYXNQYXJrZWRCaXQpOwotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ieXRlLnN0b3JlKDApOwotICAg
ICAgICAgICAgICAgIHJldHVybiBCYXJnaW5nT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2Nr
U2xvdyhtX2J5dGUsIERlZmF1bHRMb2NrQWxnb3JpdGhtOjpGYWlyKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvTG9jay5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9M
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDcgQEAKICNpZm5kZWYgV1RGX0xvY2tf
aAogI2RlZmluZSBXVEZfTG9ja19oCiAKLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1
ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrQWxnb3JpdGhtLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC0z
Nyw2ICszNiw4IEBAIHN0cnVjdCBMb2NrSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV1RGIHsKIAor
dHlwZWRlZiBMb2NrQWxnb3JpdGhtPHVpbnQ4X3QsIDEsIDI+IERlZmF1bHRMb2NrQWxnb3JpdGht
OworCiAvLyBUaGlzIGlzIGEgZnVsbHkgYWRhcHRpdmUgbXV0ZXggdGhhdCBvbmx5IHJlcXVpcmVz
IDEgYnl0ZSBvZiBzdG9yYWdlLiBJdCBoYXMgZmFzdCBwYXRocyB0aGF0IGFyZQogLy8gY29tcGV0
ZXRpdmUgdG8gYSBzcGlubG9jayAodW5jb250ZW5kZWQgbG9ja2luZyBpcyBpbmxpbmVkIGFuZCBp
cyBqdXN0IGEgQ0FTLCBtaWNyb2NvbnRlbnRpb24gaXMKIC8vIGhhbmRsZWQgYnkgc3Bpbm5pbmcg
YW5kIHlpZWxkaW5nKSwgYW5kIGEgc2xvdyBwYXRoIHRoYXQgaXMgY29tcGV0ZXRpdmUgdG8gc3Rk
OjptdXRleCAoaWYgYSBsb2NrCkBAIC01MywyMyArNTQsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiBz
dHJ1Y3QgTG9ja0Jhc2UgewogICAgIHZvaWQgbG9jaygpCiAgICAgewotICAgICAgICBpZiAoTElL
RUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlf
b3JkZXJfYWNxdWlyZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9ja1Nsb3coKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RBc3N1bWluZ1plcm8o
bV9ieXRlKSkpCisgICAgICAgICAgICBsb2NrU2xvdygpOwogICAgIH0KIAogICAgIGJvb2wgdHJ5
TG9jaygpCiAgICAgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICB1aW50OF90IGN1
cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICAgICAgaWYgKGN1cnJlbnRC
eXRlVmFsdWUgJiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUs
IGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6dHJ5
TG9jayhtX2J5dGUpOwogICAgIH0KIAogICAgIC8vIE5lZWQgdGhpcyB2ZXJzaW9uIGZvciBzdGQ6
OnVuaXF1ZV9sb2NrLgpAQCAtODgsMTIgKzc5LDggQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAv
LyBndWFyYW50ZWVzIHRoYXQgbG9uZyBjcml0aWNhbCBzZWN0aW9ucyBhbHdheXMgZ2V0IGEgZmFp
ciBsb2NrLgogICAgIHZvaWQgdW5sb2NrKCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9i
eXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9y
ZWxlYXNlKSkpIHsKLSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMg
d2FpdGluZyEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9j
a1Nsb3coKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5s
b2NrRmFzdEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3coKTsK
ICAgICB9CiAKICAgICAvLyBUaGlzIGlzIGxpa2UgdW5sb2NrKCkgYnV0IGl0IGd1YXJhbnRlZXMg
dGhhdCB3ZSB1bmxvY2sgdGhlIGxvY2sgZmFpcmx5LiBGb3Igc2hvcnQgY3JpdGljYWwKQEAgLTEw
MywxNyArOTAsMTMgQEAgc3RydWN0IExvY2tCYXNlIHsKICAgICAvLyB3YW50LgogICAgIHZvaWQg
dW5sb2NrRmFpcmx5KCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoaXNIZWxkQml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsK
LSAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVubG9ja0ZhaXJseVNsb3co
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFEZWZhdWx0TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFz
dEFzc3VtaW5nWmVybyhtX2J5dGUpKSkKKyAgICAgICAgICAgIHVubG9ja0ZhaXJseVNsb3coKTsK
ICAgICB9CiAKICAgICBib29sIGlzSGVsZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
bV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAg
ICAgIHJldHVybiBEZWZhdWx0TG9ja0FsZ29yaXRobTo6aXNMb2NrZWQobV9ieXRlKTsKICAgICB9
CiAKICAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKQEAgLTEyNiwyMSArMTA5LDEwIEBAIHByb3Rl
Y3RlZDoKICAgICAKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwogICAg
IHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7Ci0KKyAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHVubG9ja1Nsb3coKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tGYWly
bHlTbG93KCk7Ci0gICAgCi0gICAgZW51bSBGYWlybmVzcyB7Ci0gICAgICAgIEZhaXIsCi0gICAg
ICAgIFVuZmFpcgotICAgIH07Ci0gICAgdm9pZCB1bmxvY2tTbG93SW1wbChGYWlybmVzcyk7Ci0g
ICAgCi0gICAgZW51bSBUb2tlbiB7Ci0gICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKLSAgICAg
ICAgRGlyZWN0SGFuZG9mZgotICAgIH07CiAKICAgICAvLyBNZXRob2QgdXNlZCBmb3IgdGVzdGlu
ZyBvbmx5LgogICAgIGJvb2wgaXNGdWxseVJlc2V0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0xvY2tBbGdvcml0aG0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxn
b3JpdGhtLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXVEZfTG9ja0FsZ29yaXRobV9o
CisjZGVmaW5lIFdURl9Mb2NrQWxnb3JpdGhtX2gKKworI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXJraW5nTG90Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIHRoZSBh
bGdvcml0aG0gdXNlZCBieSBXVEY6OkxvY2suCisKK3RlbXBsYXRlPHR5cGVuYW1lIExvY2tUeXBl
LCBMb2NrVHlwZSBpc0hlbGRCaXQsIExvY2tUeXBlIGhhc1BhcmtlZEJpdD4KK2NsYXNzIExvY2tB
bGdvcml0aG0geworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3QgTG9ja1R5cGUgbWFzayA9IGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdDsKKwor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2Nr
VHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VX
ZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBib29sIGxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICAgICAgaWYgKG9sZFZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFr
KG9sZFZhbHVlLCBvbGRWYWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGxvY2soQXRvbWljPExvY2tUeXBlPiYg
bG9jaykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbG9ja0Zhc3QobG9jaykpKQorICAg
ICAgICAgICAgbG9ja1Nsb3cobG9jayk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHRy
eUxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1l
bW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYg
aXNIZWxkQml0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVW
YWx1ZSB8IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCB1
bmxvY2tGYXN0QXNzdW1pbmdaZXJvKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjpt
ZW1vcnlfb3JkZXJfcmVsZWFzZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHVubG9j
a0Zhc3QoQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAgICB7CisgICAgICAgIExvY2tUeXBlIG9s
ZFZhbHVlID0gbG9jay5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgICAgICBp
ZiAoKG9sZFZhbHVlICYgbWFzaykgIT0gaXNIZWxkQml0KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gbG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFZhbHVlLCBv
bGRWYWx1ZSAmIH5pc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2soQXRvbWljPExvY2tUeXBlPiYgbG9jaykKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAgICAgICAg
ICB1bmxvY2tTbG93KGxvY2ssIFVuZmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IHVubG9ja0ZhaXJseShBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgaWYg
KFVOTElLRUxZKCF1bmxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIHVubG9ja1Nsb3cobG9j
aywgRmFpcik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGlzTG9ja2VkKGNvbnN0IEF0
b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbG9jay5sb2FkKHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKyAgICAKKyAgICBO
RVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgbG9ja1Nsb3coQXRvbWljPExvY2tUeXBlPiYgbG9jaykK
KyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAgICAgLy8gVGhp
cyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtl
c1JWTSBleHBlcmltZW50cy4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7
CisgICAgCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5
dGVWYWx1ZSA9IGxvY2subG9hZCgpOworCisgICAgICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2
ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNI
ZWxkQml0KQorICAgICAgICAgICAgICAgICYmIGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9keSBwYXJrZWQg
YW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJv
dW5kLgorICAgICAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICAgICAgc3BpbkNvdW50Kys7
CisgICAgICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJp
dCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgICAgIGlm
ICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgICAgICAgICAgJiYg
IWxvY2suY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZh
bHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4g
U28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICAgICAgUGFy
a2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KKyAgICAgICAgICAgICAgICBQYXJraW5n
TG90Ojpjb21wYXJlQW5kUGFyaygmbG9jaywgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCk7CisgICAgICAgICAgICBpZiAocGFya1Jlc3VsdC53YXNVbnBhcmtlZCkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8VG9rZW4+KHBhcmtSZXN1bHQu
dG9rZW4pKSB7CisgICAgICAgICAgICAgICAgY2FzZSBEaXJlY3RIYW5kb2ZmOgorICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgbG9jayB3YXMgbmV2ZXIgcmVsZWFzZWQuIEl0IHdhcyBoYW5kZWQg
dG8gdXMgZGlyZWN0bHkgYnkgdGhlIHRocmVhZCB0aGF0IGRpZAorICAgICAgICAgICAgICAgICAg
ICAvLyB1bmxvY2soKS4gVGhpcyBtZWFucyB3ZSdyZSBkb25lIQorICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpc0xvY2tlZChsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICBjYXNlIEJhcmdpbmdPcHBvcnR1bml0eToKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBj
YWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAorICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgd2UgaGF2ZSBiZWVuIHdva2VuIHVwIHNvIHRoYXQgd2UgbWF5IGdldCBhbiBvcHBv
cnR1bml0eSB0byBncmFiIHRoZSBsb2NrLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3Ro
ZXIgdGhyZWFkcyBtYXkgYmFyZ2UsIHNvIHRoZSBiZXN0IHRoYXQgd2UgY2FuIGRvIGlzIGxvb3Ag
YXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSBhd29r
ZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVp
dGhlciB3YXksIHdlIGxvb3AKKyAgICAgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGVudW0gRmFpcm5lc3MgeworICAgICAgICBGYWly
LAorICAgICAgICBVbmZhaXIKKyAgICB9OworICAgIE5FVkVSX0lOTElORSBzdGF0aWMgdm9pZCB1
bmxvY2tTbG93KEF0b21pYzxMb2NrVHlwZT4mIGxvY2ssIEZhaXJuZXNzIGZhaXJuZXNzKQorICAg
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0aGUgd2VhayBDQVMgaW4g
dW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAgICAg
Ly8gc29tZW9uZSBwYXJrZWQuIFNvLCB3ZSBuZWVkIGEgQ0FTIGxvb3A6IGV2ZW4gaWYgcmlnaHQg
bm93IHRoZSBsb2NrIGlzIGp1c3QgaGVsZCwgaXQgY291bGQKKyAgICAgICAgLy8gYmUgaGVsZCBh
bmQgcGFya2VkIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8gbG9jayBqdXN0IGFzIHdlIGFyZSB1bmxv
Y2tpbmcuCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgb2xkQnl0ZVZh
bHVlID0gbG9jay5sb2FkKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgKKyAgICAgICAg
ICAgICAgICAob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gaXNIZWxkQml0CisgICAgICAgICAgICAg
ICAgfHwgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQp
KTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlz
SGVsZEJpdCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWso
b2xkQnl0ZVZhbHVlLCBvbGRCeXRlVmFsdWUgJiB+aXNIZWxkQml0KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRo
cmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKKyAgICAgICAgICAgIC8v
IGRpcmVjdGx5LCBvciB3ZSB3aWxsIHVubG9jayB0aGUgbG9jayBhdCB0aGUgc2FtZSB0aW1lIGFz
IHdlIHVucGFyayB0byBhbGxvdyBmb3IgYmFyZ2luZy4KKyAgICAgICAgICAgIC8vIFdoZW4gd2Ug
dW5sb2NrLCB3ZSBtYXkgbGVhdmUgdGhlIHBhcmtlZCBiaXQgc2V0IGlmIHRoZXJlIGlzIGEgY2hh
bmNlIHRoYXQgdGhlcmUgYXJlIHN0aWxsCisgICAgICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBh
cmtlZC4KKyAgICAgICAgICAgIEFTU0VSVCgob2xkQnl0ZVZhbHVlICYgbWFzaykgPT0gKGlzSGVs
ZEJpdCB8IGhhc1BhcmtlZEJpdCkpOworICAgICAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrT25l
KAorICAgICAgICAgICAgICAgICZsb2NrLAorICAgICAgICAgICAgICAgIFsmXSAoUGFya2luZ0xv
dDo6VW5wYXJrUmVzdWx0IHJlc3VsdCkgLT4gaW50cHRyX3QgeworICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVhciBlaXRoZXIgdGhlIGlzSGVs
ZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBz
aG91bGQgc3RpbGwgc2VlIGJvdGggYml0cyBzZXQgcmlnaHQgbm93LgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoKGxvY2subG9hZCgpICYgbWFzaykgPT0gKGlzSGVsZEJpdCB8IGhhc1Bhcmtl
ZEJpdCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LmRpZFVucGFya1RocmVhZCAmJiAoZmFpcm5lc3MgPT0gRmFpciB8fCByZXN1bHQudGltZVRvQmVG
YWlyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdW5sb2NrIGFueXRo
aW5nLiBJbnN0ZWFkLCB3ZSBoYW5kIHRoZSBsb2NrIHRvIHRoZSB0aHJlYWQgdGhhdCB3YXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcuCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRGlyZWN0SGFuZG9mZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbG9jay50cmFuc2FjdGlvbigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoTG9ja1R5cGUmIHZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgJj0gfm1hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC5tYXlIYXZlTW9yZVRocmVhZHMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlIHw9IGhhc1BhcmtlZEJpdDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVuaXR5OworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIFRva2VuIHsKKyAgICAgICAgQmFyZ2luZ09wcG9ydHVu
aXR5LAorICAgICAgICBEaXJlY3RIYW5kb2ZmCisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCit1c2luZyBXVEY6OkxvY2tBbGdvcml0aG07CisKKyNlbmRpZiAvLyBXVEZfTG9ja0Fs
Z29yaXRobV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tU
eXBlLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93dGYvVGltZVdpdGhEeW5h
bWljQ2xvY2tUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogI2luY2x1
ZGUgIkNvbmRpdGlvbi5oIgogI2luY2x1ZGUgIkxvY2suaCIKICNpbmNsdWRlICJQcmludFN0cmVh
bS5oIgorI2luY2x1ZGUgPGNmbG9hdD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQCB2b2lk
IHNsZWVwKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwCiAgICAgZmFrZUNvbmRpdGlvbi53
YWl0VW50aWwoZmFrZUxvY2ssIHRpbWUpOwogfQogCitib29sIGhhc0VsYXBzZWQoY29uc3QgVGlt
ZVdpdGhEeW5hbWljQ2xvY2tUeXBlJiB0aW1lKQoreworICAgIC8vIEF2b2lkIGRvaW5nIG5vdygp
LgorICAgIGlmICghKHRpbWUgPiB0aW1lLndpdGhTYW1lQ2xvY2tBbmRSYXdTZWNvbmRzKDApKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHN0ZDo6aXNpbmYodGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnZhbHVlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIHRpbWUgPD0gdGltZS5ub3dXaXRoU2FtZUNsb2NrKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9UaW1lV2l0aER5bmFtaWNDbG9j
a1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDggKzEzNCwxMiBAQCBwcml2YXRlOgogCiBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cGUmKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzRWxhcHNlZChjb25zdCBUaW1lV2l0
aER5bmFtaWNDbG9ja1R5cGUmKTsKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlOwordXNpbmcgV1RGOjpoYXNFbGFwc2VkOwordXNpbmcg
V1RGOjpzbGVlcDsKIAogI2VuZGlmIC8vIFdURl9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294740</attachid>
            <date>2016-11-14 14:14:52 -0800</date>
            <delta_ts>2016-11-14 15:25:51 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>283425</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1h
cmsuanMJKHJldmlzaW9uIDIwODY1MykKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVu
Y2gvQWlyL2JlbmNobWFyay5qcwkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDEyIEBAIGZ1
bmN0aW9uIHJ1bkJlbmNobWFyaygpCiAgICAgCiAgICAgbGV0IGJlZm9yZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgCi0gICAgbGV0IGJlbmNobWFyayA9IG5ldyBCZW5jaG1hcmsodmVyYm9zZSk7Cisg
ICAgbGV0IGJlbmNobWFyayA9IG5ldyBBaXJCZW5jaG1hcmsodmVyYm9zZSk7CiAgICAgCi0gICAg
Zm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0aW9uczsgKytpdGVy
YXRpb24pCisgICAgZm9yIChsZXQgaXRlcmF0aW9uID0gMDsgaXRlcmF0aW9uIDwgbnVtSXRlcmF0
aW9uczsgKytpdGVyYXRpb24pIHsKKyAgICAgICAgcHJpbnQoIml0ZXJhdGlvbiAiICsgaXRlcmF0
aW9uKTsKICAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgIH0KICAgICAKICAg
ICBsZXQgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOwogICAgIHJldHVybiBhZnRlciAtIGJlZm9yZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2MCBA
QAorMjAxNi0xMS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBk
ZWZhdWx0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjQ0NTQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgc3RhcnRlZCBvdXQgYXMgYSBwYXRjaCB0byBoYXZlIHRoZSBHQyBzY2FuIHRo
ZSBzdGFjayBhdCB0aGUgZW5kLCBhbmQgdGhlbiB0aGUKKyAgICAgICAgb3V0YWdlIGhhcHBlbmVk
IGFuZCBJIGRlY2lkZWQgdG8gcGljayBhIG1vcmUgYWdncmVzaXZlIHRhcmdldDogZ2l2ZSB0aGUg
R0MgYSBjb25jdXJyZW50CisgICAgICAgIG1vZGUgdGhhdCBjYW4gYmUgZW5hYmxlZCBhdCBydW50
aW1lLCBhbmQgd2hvc2Ugb25seSBlZmZlY3QgaXMgdGhhdCBpdCB0dXJucyBvbiB0aGUKKyAgICAg
ICAgUmVzdW1lVGhlV29ybGRTY29wZS4gVGhpcyBnaXZlcyBvdXIgR0MgYSByZWFsbHkgaW50dWl0
aXZlIHdvcmtmbG93OiBieSBkZWZhdWx0LCB0aGUgR0MKKyAgICAgICAgdGhyZWFkIGlzIHJ1bm5p
bmcgc29sbyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkIGFuZCB0aGUgcGFyYWxsZWwgbWFya2VycyBj
b252ZXJnZWQgYW5kCisgICAgICAgIHdhaXRpbmcuIFdlIGhhdmUgYSBwYXJhbGxlbCB3b3JrIHNj
b3BlIHRvIGVuYWJsZSB0aGUgcGFyYWxsZWwgbWFya2VycyBhbmQgbm93IHdlIGhhdmUgYQorICAg
ICAgICBSZXN1bWVUaGVXb3JsZFNjb3BlIHRoYXQgd2lsbCBvcHRpb25hbGx5IHJlc3VtZSB0aGUg
d29ybGQgYW5kIHRoZW4gc3RvcCBpdCBhZ2Fpbi4KKyAgICAgICAgCisgICAgICAgIEl0J3MgZWFz
eSB0byBtYWtlIGEgY29uY3VycmVudCBHQyB0aGF0IGFsd2F5cyBpbnN0YW50bHkgY3Jhc2hlcy4g
SSBjYW4ndCBwcm9taXNlIHRoYXQKKyAgICAgICAgdGhpcyBvbmUgd29uJ3QgZG8gdGhhdCB3aGVu
IHlvdSBydW4gaXQuIEkgc2V0IGEgc3BlY2lmaWMgZ29hbDogSSB3YW50ZWQgdG8gZG8gPjEwCisg
ICAgICAgIGNvbmN1cnJlbnQgR0NzIGluIGRlYnVnIG1vZGUgd2l0aCBnZW5lcmF0aW9ucywgb3B0
aW1pemluZyBKSVRzLCBhbmQgcGFyYWxsZWwgbWFya2luZworICAgICAgICBkaXNhYmxlZC4KKyAg
ICAgICAgCisgICAgICAgIFRvIHJlYWNoIHRoaXMgbWlsZXN0b25lLCBJIG5lZWRlZCB0byBkbyBh
IGJ1bmNoIG9mIHN0dWZmOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgbXV0YXRvciBuZWVkcyBh
IHNlcGFyYXRlIG1hcmsgc3RhY2sgZm9yIHRoZSBiYXJyaWVyLCBzaW5jZSBpdCB3aWxsIG11dGF0
ZSB0aGlzCisgICAgICAgICAgc3RhY2sgY29uY3VycmVudGx5IHRvIHRoZSBjb2xsZWN0b3IncyBz
bG90IHZpc2l0b3JzLgorICAgICAgICAKKyAgICAgICAgLSBUaGUgdXNlIG9mIENlbGxTdGF0ZSB0
byBpbmRpY2F0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBiZWluZyBzY2FubmVkIHRoZSBmaXJzdCB0
aW1lIG9yCisgICAgICAgICAgYSBzdWJzZXF1ZW50IHRpbWUgd2FzIHJhY3kuIEl0IGZhaWxzIHNw
ZWN0YWN1bGFybHkgd2hlbiBhIGJhcnJpZXIgaXMgZmlyZWQgYXQgdGhlIHNhbWUKKyAgICAgICAg
ICB0aW1lIGFzIHZpc2l0Q2hpbGRyZW4gaXMgcnVubmluZyBvciBpZiB0aGUgYmFycmllciBydW5z
IGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIEdDCisgICAgICAgICAgbWFya3MgdGhlIHNhbWUgb2Jq
ZWN0LiBTbywgSSBzcGxpdCBTbG90VmlzaXRvcidzIG1hcmsgc3RhY2tzLiBJdCdzIG5vdyB0aGUg
Y2FzZSB0aGF0CisgICAgICAgICAgeW91IGtub3cgd2h5IHlvdSdyZSBiZWluZyBzY2FubmVkIGJ5
IGxvb2tpbmcgYXQgd2hpY2ggc3RhY2sgeW91IGNhbWUgb2ZmIG9mLgorICAgICAgICAKKyAgICAg
ICAgLSBBbGwgb2Ygcm9vdCBtYXJraW5nIG11c3QgYmUgaW4gdGhlIGNvbGxlY3RvciBmaXhwb2lu
dC4gSSByZW5hbWVkIG1hcmtSb290cyB0bworICAgICAgICAgIG1hcmtUb0ZpeHBvaW50LiBUaGV5
IHNheSBjb25jdXJyZW5jeSBpcyBoYXJkLCBidXQgdGhlIGNvbGxlY3RvciBsb29rcyBtb3JlIGlu
dHVpdGl2ZQorICAgICAgICAgIHRoaXMgd2F5LiBXZSBuZXZlciBnYWluZWQgYW55dGhpbmcgZnJv
bSBmb3JjaW5nIHBlb3BsZSB0byBtYWtlIGEgY2hvaWNlIGJldHdlZW4KKyAgICAgICAgICBzY2Fu
bmluZyBzb21ldGhpbmcgaW4gdGhlIGZpeHBvaW50IHZlcnN1cyBvdXRzaWRlIG9mIGl0LiBCZWNh
dXNlIHJvb3Qgc2Nhbm5pbmcgaXMKKyAgICAgICAgICBjaGVhcCwgd2UgY2FuIGFmZm9yZCB0byBk
byBpdCByZXBlYXRlZGx5LCB3aGljaCBtZWFucyBhbGwgcm9vdCBzY2FubmluZyBjYW4gbm93IGRv
CisgICAgICAgICAgY29uc3RyYWludC1iYXNlZCBtYXJraW5nIChsaWtlOiBJJ2xsIG1hcmsgeW91
IGlmIHRoYXQgdGhpbmcgaXMgbWFya2VkKS4KKyAgICAgICAgCisgICAgICAgIC0gSlNPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4ncyBzY2FubmluZyBvZiB0aGUgYnV0dGVyZmx5IHJhY2VkIHdpdGggcHJv
cGVydHkgYWRkaXRpb25zLAorICAgICAgICAgIGluZGV4ZWQgc3RvcmFnZSB0cmFuc2l0aW9ucyBh
bmQgcmVzaXppbmcsIGFuZCBhIGJ1bmNoIG9mIG1pc2NlbGxhbmVvdXMgZGlydHkgYnV0dGVyZmx5
CisgICAgICAgICAgcmVzaGFwaW5nIGZ1bmN0aW9ucyAtIGxpa2UgdGhlIG9uZSB0aGF0IGZsYXR0
ZW5zIGEgZGljdGlvbmFyeSBhbmQgc29tZSBzbmVha3kKKyAgICAgICAgICBBcnJheVN0b3JhZ2Ug
dHJhbnNmb3JtYXRpb25zLiBNYW55IG9mIHRoZXNlIGNhbiBiZSBmaXhlZCBieSB1c2luZyBzdG9y
ZS1zdG9yZSBmZW5jZXMKKyAgICAgICAgICBpbiB0aGUgbXV0YXRvciBhbmQgbG9hZC1sb2FkIGZl
bmNlcyBpbiB0aGUgY29sbGVjdG9yLiBJJ3ZlIGFkb3B0ZWQgdGhlIHJ1bGUgdGhhdCB0aGUKKyAg
ICAgICAgICBjb2xsZWN0b3IgbXVzdCBhbHdheXMgc2VlIGVpdGhlciBhIGJ1dHRlcmZseSBhbmQg
c3RydWN0dXJlIHRoYXQgbWF0Y2ggb3IgYSBuZXdlcgorICAgICAgICAgIGJ1dHRlcmZseSB3aXRo
IGFuIG9sZGVyIHN0cnVjdHVyZSwgd2hlcmUgdGhlaXIgYWdlIGlzIGp1c3Qgb25lIHRyYW5zaXRp
b24gYXBhcnQuIFRoaXMKKyAgICAgICAgICBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBmZW5jZXMuIEZv
ciB0aGUgY2FzZXMgd2hlcmUgaXQgYnJlYWtzIGRvd24sIEkgYWRkZWQgYSBsb2NrIHRvCisgICAg
ICAgICAgZXZlcnkgSlNDZWxsLiBUaGlzIGlzIGEgZnVsbC1mbGVkZ2VkIFdURiBsb2NrIHRoYXQg
d2Ugc25lYWsgaW50byB0d28gYXZhaWxhYmxlIGJpdHMgaW4KKyAgICAgICAgICB0aGUgaW5kZXhp
bmdUeXBlLiBTZWUgdGhlIFdURiBDaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisgICAgICAgIAorICAg
ICAgICAtIEEgZGljdGlvbmFyeSBTdHJ1Y3R1cmUgY2FuIGNoYW5nZSBpbiBzdHJhbmdlIHdheXMg
d2hpbGUgdGhlIEdDIGlzIHRyeWluZyB0byBzY2FuIGl0LgorICAgICAgICAgIFNvLCBKU09iamVj
dDo6dmlzaXRDaGlsZHJlbiB3aWxsIG5vdyBncmFiIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUncyBs
b2NrIGlmIHRoZQorICAgICAgICAgIG9iamVjdCdzIHN0cnVjdHVyZSBpcyBhIGRpY3Rpb25hcnku
IERpY3Rpb25hcnkgc3RydWN0dXJlcyBhcmUgMToxIHdpdGggdGhlaXIgb2JqZWN0LAorICAgICAg
ICAgIHNvIHRoaXMgZG9lcyBub3QgcmVkdWNlIEdDIHBhcmFsbGVsaXNtIChzdXBlciB1bmxpa2Vs
eSB0aGF0IHRoZSBHQyB3aWxsIHNpbXVsdGFuZW91c2x5CisgICAgICAgICAgc2NhbiBhbiBvYmpl
Y3QgZnJvbSB0d28gdGhyZWFkcykuCisgICAgICAgIAorICAgICAgICAtIFRoZSBHQyBjYW4gYmxv
dyBhd2F5IGEgU3RydWN0dXJlJ3MgcHJvcGVydHkgdGFibGUgYXQgYW55IHRpbWUuIEFzIGEgc21h
bGwgY29uc29sYXRpb24sCisgICAgICAgICAgaXQncyBub3cgaG9sZGluZyB0aGUgU3RydWN0dXJl
J3MgbG9jayB3aGVuIGl0IGRvZXMgc28uIEJ1dCB0aGVyZSB3YXMgdG9ucyBvZiBjb2RlIGluCisg
ICAgICAgICAgU3RydWN0dXJlIHRoYXQgdXNlcyBEZWZlckdDIHRvIHByZXZlbnQgdGhlIEdDIGZy
b20gYmxvd2luZyBhd2F5IHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAgICAgICBUaGlzIGRvZXNu
J3Qgd29yayB3aXRoIGNvbmN1cnJlbnQgR0MsIHNpbmNlIERlZmVyR0Mgb25seSBtZWFucyB0aGF0
IHRoZSBHQyB3b24ndCBydW4KKyAgICAgICAgICBpdHMgc2FmZXBvaW50IChpLmUuIHN0b3AtdGhl
LXdvcmxkIGNvZGUpIGluIHRoZSBEZWZlckdDIHJlZ2lvbi4gSXQgd2lsbCBzdGlsbCBkbworICAg
ICAgICAgIG1hcmtpbmcgYW5kIGl0IHdhcyB0aGUgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuIHRo
YXQgd291bGQgZGVsZXRlIHRoZSB0YWJsZS4gSXQgdHVybnMKKyAgICAgICAgICBvdXQgdGhhdCBT
dHJ1Y3R1cmUncyByZWxpYW5jZSBvbiB0aGUgcHJvcGVydHkgdGFibGUgbm90IGJlaW5nIGRlbGV0
ZWQgd2FzIHRoZSBwcm9kdWN0CisgICAgICAgICAgb2YgY29kZSByb3QuIFdlIGFscmVhZHkgaGFk
IGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG1hdGVyaWFsaXplIHRoZSB0YWJsZSBvbiBkZW1hbmQuIFdl
CisgICAgICAgICAgd2VyZSBzaW1wbHkgbWFraW5nIHRoZSBtaXN0YWtlIG9mIHNheWluZzoKKyAg
ICAgICAgICAKKyAgICAgICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5
VGFibGUoKS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgSW5zdGVhZCBvZiBzYXlpbmc6
CisgICAgICAgICAgCisgICAgICAgICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKCk7CisgICAgICAgICAgICAgIC4uLgorICAgICAgICAg
ICAgICB0YWJsZS0+dGhpbmdzCisgICAgICAgICAgCisgICAgICAgICAgU3dpdGNoaW5nIHRoZSBj
b2RlIHRvIHVzZSB0aGUgbGF0dGVyIGlkaW9tIGFsbG93ZWQgbWUgdG8gc2ltcGxpZnkgdGhlIGNv
ZGUgYSBsb3Qgd2hpbGUKKyAgICAgICAgICBmaXhpbmcgdGhlIHJhY2UuCisgICAgICAgIAorICAg
ICAgICAtIFRoZSBMTEludCdzIGdldF9ieV92YWwgaGFuZGxpbmcgd2FzIGJyb2tlbiBiZWNhdXNl
IHRoZSBpbmRleGluZyBzaGFwZSBjb25zdGFudHMgd2VyZQorICAgICAgICAgIHdyb25nLiBPbmNl
IEkgc3RhcnRlZCBwdXR0aW5nIG1vcmUgdGhpbmdzIGludG8gdGhlIEluZGV4aW5nVHlwZSwgdGhh
dCBzdGFydGVkIGNhdXNpbmcKKyAgICAgICAgICBjcmFzaGVzIGZvciBtZS4gU28gSSBmaXhlZCBM
TEludC4gVGhhdCB0dXJuZWQgb3V0IHRvIGJlIGEgbG90IG9mIHdvcmssIHNpbmNlIHRoYXQgY29k
ZQorICAgICAgICAgIGhhZCByb3R0ZWQgaW4gc3VidGxlIHdheXMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgc3BlZWQtdXAgaW4gU3VuU3BpZGVyLCBwcm9iYWJseSBiZWNhdXNlIG9mIHRo
ZSBMTEludCBmaXguIFRoaXMgaXMgbmV1dHJhbCBvbgorICAgICAgICBPY3RhbmUgYW5kIEtyYWtl
bi4gSXQncyBhIHNtYWxsZXIgc2xvdy1kb3duIG9uIExvbmdTcGlkZXIsIGJ1dCBJIHRoaW5rIHdl
IGNhbiBpZ25vcmUKKyAgICAgICAgdGhhdCAod2UgZG9uJ3QgdmlldyBMb25nU3BpZGVyIGFzIGFu
IG9mZmljaWFsIGJlbmNobWFyaykuIEJ5IGRlZmF1bHQsIHRoZSBjb25jdXJyZW50IEdDCisgICAg
ICAgIGlzIGRpc2FibGVkOiBpbiBhbGwgb2YgdGhlIHBsYWNlcyB3aGVyZSBpdCB3b3VsZCBoYXZl
IHJlc3VtZWQgdGhlIHdvcmxkIHRvIHJ1biBtYXJraW5nCisgICAgICAgIGNvbmN1cnJlbnRseSB0
byB0aGUgbXV0YXRvciwgaXQgd2lsbCBqdXN0IHNraXAgdGhlIHJlc3VtZSBzdGVwLiBXaGVuIHlv
dSBlbmFibGUKKyAgICAgICAgY29uY3VycmVudCBHQyAoLS11c2VDb25jdXJyZW50R0M9dHJ1ZSks
IGl0IGNhbiBzb21ldGltZXMgcnVuIE9jdGFuZS9zcGxheSB0byBjb21wbGV0aW9uLgorICAgICAg
ICBXaGVuIHJ1bm5pbmcgaW4gdGhpcyBtb2RlLCB3ZSB1c2UgYSBsaXR0bGUgYml0IG1vcmUgbWVt
b3J5IGFuZCBwYXVzZSB0aW1lcyBzZWVtIHRvCisgICAgICAgIGFsbW9zdCBhbHdheXMgYmUgYmVs
b3cgMW1zIHdpdGggdGhlIG9kZCBvdXRsaWVyIGFyb3VuZCAybXMuIE9uY2UgdGhlIGNvcnJlY3Ru
ZXNzIGlzc3VlcworICAgICAgICBhcmUgb3V0IG9mIHRoZSB3YXksIEkgcGxhbiB0byBlbmhhbmNl
IHRoZSBHQydzIHNjaGVkdWxpbmcgdG8gcHV0IGEgYmV0dGVyIHVwcGVyIGJvdW5kIG9uCisgICAg
ICAgIHBhdXNlcyBhbmQgYSBiZXR0ZXIgbG93ZXIgYm91bmQgb24gbXV0YXRvciBwcm9ncmVzcy4K
KworICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tOgorICAgICAgICAoLVtKU1ZpcnR1
YWxNYWNoaW5lIGlzT2xkRXh0ZXJuYWxPYmplY3Q6XSk6CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmR1bXBDYWNoZVNpemVzQW5k
Q3Jhc2gpOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZHQXJy
YXlpZnlTbG93UGF0aEdlbmVyYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46Om1hcmtDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MpOgorICAgICAg
ICAqIGRmZy9ERkdQbGFuLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KToKKyAgICAgICAgKiBkZmcvREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0OjptYXJrQ29kZUJsb2Nrcyk6CisgICAgICAg
IChKU0M6OkRGRzo6V29ya2xpc3Q6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6bWFya0NvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBsZXRlQWxsUGxh
bnNGb3JWTSk6CisgICAgICAgIChKU0M6OkRGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKToKKyAgICAg
ICAgKiBkZmcvREZHV29ya2xpc3QuaDoKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0U3Ry
dWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU11
bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpp
c0FycmF5VHlwZSk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAqIGhlYXAvQ2VsbFN0YXRlLmg6
CisgICAgICAgICogaGVhcC9HQ1NlZ21lbnRlZEFycmF5Lmg6CisgICAgICAgICogaGVhcC9IZWFw
LmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6UmVzdW1lVGhlV29ybGRTY29wZTo6UmVzdW1lVGhl
V29ybGRTY29wZSk6CisgICAgICAgIChKU0M6OkhlYXA6OlJlc3VtZVRoZVdvcmxkU2NvcGU6On5S
ZXN1bWVUaGVXb3JsZFNjb3BlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6SGVhcCk6CisgICAgICAg
IChKU0M6OkhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkhlYXA6
OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjpj
b21wbGV0ZUFsbEpJVFBsYW5zKToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1RvRml4cG9pbnQp
OgorICAgICAgICAoSlNDOjpIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6YmVnaW5NYXJraW5nKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtS
ZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZW5kTWFya2luZyk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZFRv
UmVtZW1iZXJlZFNldCk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJblRocmVhZCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OnN0b3BUaGVXb3JsZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnJl
c3VtZVRoZVdvcmxkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcik6CisgICAgICAgIChKU0M6OkhlYXA6
OmNhbkNvbGxlY3QpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0
ZWQpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpub3RpZnlJc1NhZmVUb0NvbGxlY3QpOgorICAgICAgICAoSlND
OjpIZWFwOjptYXJrUm9vdHMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0
U21hbGxTdHJpbmdzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRQcm90ZWN0
ZWRPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6dmlzaXRBcmd1bWVudEJ1
ZmZlcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjp2aXNpdEV4Y2VwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0U3Ryb25nSGFuZGxlcyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkhlYXA6OnZpc2l0SGFuZGxlU3RhY2spOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpIZWFwOjp2aXNpdFR5cGVQcm9maWxlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Okhl
YXA6OnZpc2l0U2hhZG93Q2hpY2tlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OnRy
YWNlQ29kZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkhlYXA6OnZpc2l0V2Vha0hhbmRsZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjpm
bHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGVhcDo6
c3RvcEFsbG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0b3JTbG90VmlzaXRvcik6CisgICAgICAgIChKU0M6OkhlYXA6
Om11dGF0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpIZWFwOjpzbG90VmlzaXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6Om5vdGlmeUlzU2FmZVRvQ29sbGVjdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2tBcnJheTo6dHJhbnNmZXJUbyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suaDoKKyAgICAg
ICAgKiBoZWFwL01hcmtlZEFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9j
YXRvcjo6dHJ5QWxsb2NhdGVJbik6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwSGVscGVyU2VsZWN0TWFya3NNb2RlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFi
b3V0VG9NYXJrU2xvdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCk6CisgICAgICAgIChKU0M6OlNldE5ld2x5QWxsb2NhdGVkRnVuY3Rvcjo6
U2V0TmV3bHlBbGxvY2F0ZWRGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U2V0TmV3
bHlBbGxvY2F0ZWRGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFw
L01hcmtlZEJsb2NrLmg6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAg
IChKU0M6Ok1hcmtlZFNwYWNlOjpyZXN1bWVBbGxvY2F0aW5nKToKKyAgICAgICAgKiBoZWFwL1Jl
c3VtZVRoZVdvcmxkU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5j
cHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpTbG90VmlzaXRvcik6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp+U2xvdFZpc2l0b3IpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRv
cjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2tzKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXJ5KToKKyAg
ICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OnNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKToK
KyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKToKKyAgICAgICAg
KEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayk6CisgICAgICAgIChK
U0M6OlNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJh
aW4pOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkb25hdGVBbmREcmFpbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptZXJnZU9wYXF1ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmR1bXApOgor
ICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y2xlYXJNYXJrU3RhY2spOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6b3BhcXVlUm9vdENvdW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpjb2xs
ZWN0b3JNYXJrU3RhY2spOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6bXV0YXRvck1hcmtT
dGFjayk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6U2xvdFZpc2l0b3I6OmJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9y
OjptYXJrU3RhY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Ynl0ZXND
b3BpZWQpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQpOgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0ZXJuYWxNZW1vcnlWaXNpdGVkKToKKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8pOgorICAgICAgICAqIGppdC9K
SVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90
b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKToK
KyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJ
RCk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6
OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaDoKKyAgICAgICAgKEpTQzo6R0NT
YWZlQ29uY3VycmVudEpJVExvY2tlcjo6Tm9EZWZlcjo6Tm9EZWZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpH
ZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KToKKyAgICAg
ICAgKEpTQzo6R2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6cHV0QnlJbmRleCk6CisgICAgICAgICog
cnVudGltZS9JbmRleGluZ1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojp1bnNoaWZ0Q291bnRTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkpTQXJyYXk6OnVuc2hpZnRDb3VudFdpdGhBcnJheVN0b3JhZ2UpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNDZWxsLmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6SW50ZXJuYWxMb2NrZXI6Oklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpJbnRlcm5hbExvY2tlcjo6fklu
dGVybmFsTG9ja2VyKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjphdG9taWNDb21wYXJlRXhjaGFu
Z2VDZWxsU3RhdGVXZWFrUmVsYXhlZCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6YXRvbWljQ29t
cGFyZUV4Y2hhbmdlQ2VsbFN0YXRlU3Ryb25nKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRl
eGluZ1R5cGVBbmRNaXNjT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjppbmRleGluZ1R5
cGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6OkpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2Mp
OgorICAgICAgICAoSlNDOjpKU0NlbGw6OmluZGV4aW5nVHlwZSk6CisgICAgICAgIChKU0M6OkpT
Q2VsbDo6c2V0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNDZWxsOjpjYWxsRGVzdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6bG9ja0ludGVybmFsTG9jayk6CisgICAgICAgIChK
U0M6OkpTQ2VsbDo6dW5sb2NrSW50ZXJuYWxMb2NrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0ZpbmFs
T2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmVudGVyRGlj
dGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3JhZ2VBbHJlYWR5RXhpc3RzKToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5p
dGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlQXJyYXlTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3Rv
cmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Up
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0OjpkZWZpbmVPd25JbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
ZW5zdXJlTGVuZ3RoU2xvdyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpyZWFsbG9jYXRlQW5k
U2hyaW5rQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmFsbG9jYXRlTW9yZU91
dE9mTGluZVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c2hpZnRCdXR0ZXJmbHlB
ZnRlckZsYXR0ZW5pbmcpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z3Jvd091dE9mTGluZVN0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpmaWxs
Q3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpn
ZXROb25JbmRleFByb3BlcnR5U2xvdCk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmR1bXBTdGF0aXN0aWNz
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVy
aWFsaXphdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmlzU2VhbGVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjppc0Zy
b3plbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnBpbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cGluRm9yQ2FjaGluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6d2lsbFN0b3Jl
VmFsdWVTbG93KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZVByb3BlcnR5TWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6
Y2hlY2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlEQmxvYi5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVJREJsb2I6OlN0cnVjdHVyZUlEQmxvYik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlE
QmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEQmxvYjo6c2V0SW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlSURCbG9iOjpzZXRJbmRleGluZ1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNl
dENvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2V0UHJvcGVydHlUYWJs
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9y
YWdlQ2FwYWNpdHkpOiBEZWxldGVkLgorCiAyMDE2LTExLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxw
ZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgRm9sbG93LXVwIGZpeCB0byByMjA4NjM5LgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1MSw3ICsxNTEsNyBAQCBzdGF0aWMgaWQg
Z2V0SW50ZXJuYWxPYmpjT2JqZWN0KGlkIG9iamVjCiAtIChib29sKWlzT2xkRXh0ZXJuYWxPYmpl
Y3Q6KGlkKW9iamVjdAogewogICAgIEpTQzo6Vk0qIHZtID0gdG9KUyhtX2dyb3VwKTsKLSAgICBy
ZXR1cm4gdm0tPmhlYXAuc2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1ZVJvb3Qob2JqZWN0KTsK
KyAgICByZXR1cm4gdm0tPmhlYXAuY29sbGVjdG9yU2xvdFZpc2l0b3IoKS5jb250YWluc09wYXF1
ZVJvb3Qob2JqZWN0KTsKIH0KIAogLSAodm9pZClhZGRFeHRlcm5hbFJlbWVtYmVyZWRPYmplY3Q6
KGlkKW9iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIw
ODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA5OCw3ICsxMDA5OCw2IEBACiAJ
CQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUxRDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFy
c2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzRkY3RjlEMURDMDBEQjEwMEEyNkNDQyAv
KiBXYXNtRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVE
QUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1
RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTXY3LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQ0LDYg
KzEzNDQsMTMgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5kbWJTWSgpOwogICAgIH0K
ICAgICAKKyAgICB2b2lkIHN0b3JlRmVuY2UoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhY3R1YWxseSBpbXBsZW1lbnQgdGhpcy4gVGhlIG9ubHkgY3VycmVudCBjYWxsZXIg
aXMgcmVsYXRlZCB0bworICAgICAgICAvLyBjb25jdXJyZW50IEdDLCB3aGljaCBpcyBkaXNhYmxl
ZCBvbiAzMi1iaXQgc3lzdGVtcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDczMworICAgIH0KKyAgICAKICAgICBzdGF0aWMgdm9pZCByZXBs
YWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCiAgICAgewogICAgICAgICBBUk12N0Fzc2VtYmxlcjo6cmVw
bGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9u
LmRhdGFMb2NhdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NyArNTMsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6ZHVtcENhY2hlU2l6ZXNBbmRDcmFzCiAgICAg
ICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKIAogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHZhbHVlOwotICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCB2YWx1ZSk7CisgICAgICAgIGppdC5sb2FkOChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zm
c2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgIGppdC5hbmQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCB2YWx1ZSk7CiAgICAgICAgIGppdC5w
YXRjaGFibGVCcmFuY2gzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHZh
bHVlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBl
KSk7CkBAIC0xNTgsNyArMTU4LDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBsaW5rQ29k
ZUlubGluZQogYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKFZN
JiB2bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKLQor
ICAgIAogICAgIEdQUlJlZyBiYXNlID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRj
aC5iYXNlR1BSKTsKICAgICBKU1ZhbHVlUmVncyB2YWx1ZSA9IHN0dWJJbmZvLnZhbHVlUmVncygp
OwogCkBAIC0xNzMsNyArMTczLDcgQEAgYm9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5QQogICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZSwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdmFsdWUucGF5bG9hZEdQUigpKTsKICAgICAg
ICAgc3RvcmFnZSA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICB9Ci0KKyAgICAKICAgICBqaXQu
bG9hZFZhbHVlKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlLCBvZmZz
ZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKSwgdmFsdWUpOwogCkBAIC0yNjUsNyArMjY1LDcgQEAg
Ym9vbCBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoVgogICAgIEpTVmFsdWVSZWdz
IHZhbHVlID0gc3R1YkluZm8udmFsdWVSZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBnZXRT
Y3JhdGNoUmVnaXN0ZXIoc3R1YkluZm8pOwogCi0gICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlLCBKU0NlbGw6OmluZGV4aW5n
VHlwZUFuZE1pc2NPZmZzZXQoKSksIHNjcmF0Y2gpOwogICAgIGppdC5hbmQzMihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoKTsK
ICAgICBhdXRvIGJyYW5jaFRvU2xvd1BhdGggPSBqaXQucGF0Y2hhYmxlQnJhbmNoMzIoCiAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGFycmF5LT5pbmRleGluZ1R5cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCwxMSBAQCBjbGFz
cyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkFsbG9jYXRvcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSwgbV9hbGxvY2F0b3IpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlN0cnVjdHVyZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSwgbV9zdHJ1Y3R1cmUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZklu
bGluZUNhcGFjaXR5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLCBtX2lubGluZUNhcGFjaXR5KTsgfQogCiAgICAgT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKQogICAgICAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgICAgICwgbV9pbmxpbmVDYXBhY2l0
eSgwKQogICAgIHsKICAgICB9CiAKQEAgLTUwLDYgKzUyLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFtX2FsbG9jYXRvcik7CiAgICAgICAgIEFTU0VSVCghbV9zdHJ1Y3R1cmUp
OworICAgICAgICBBU1NFUlQoIW1faW5saW5lQ2FwYWNpdHkpOwogCiAgICAgICAgIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5ID0gMDsKICAgICAgICAgaWYgKGluZmVycmVkSW5saW5lQ2FwYWNpdHkg
PCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkgewpAQCAtOTYsNiArOTks
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgbV9hbGxvY2F0b3IgPSBhbGxvY2F0b3I7CiAgICAgICAg
IG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgICAgIG1faW5saW5l
Q2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKICAgICB9CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSgpCkBAIC0xMDUsMTIgKzEwOSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIFdURjo6bG9hZExv
YWRGZW5jZSgpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlOwogICAgIH0KLSAgICB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSgpIHsgcmV0dXJuIHN0cnVjdHVyZSgpLT5pbmxpbmVDYXBhY2l0eSgp
OyB9CisgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkoKSB7IHJldHVybiBtX2lubGluZUNhcGFj
aXR5OyB9CiAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIG1fYWxsb2NhdG9yID0g
MDsKICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9pbmxpbmVDYXBhY2l0
eSA9IDA7CiAgICAgICAgIEFTU0VSVChpc051bGwoKSk7CiAgICAgfQogCkBAIC0xNDUsNiArMTUw
LDcgQEAgcHJpdmF0ZToKIAogICAgIE1hcmtlZEFsbG9jYXRvciogbV9hbGxvY2F0b3I7IC8vIFBy
ZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9zdHJ1Y3R1cmU7CisgICAgdW5zaWduZWQgbV9pbmxp
bmVDYXBhY2l0eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDcsNyArNjA3LDcgQEAgdm9pZCBBY2Nl
c3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNh
c2UgQXJyYXlMZW5ndGg6IHsKICAgICAgICAgQVNTRVJUKCF2aWFQcm94eSgpKTsKLSAgICAgICAg
aml0LmxvYWQ4KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5sb2FkOChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAgICAgICAgICAg
aml0LmJyYW5jaFRlc3QzMigKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Olplcm8sIHNj
cmF0Y2hHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CkBAIC0xMjU3
LDEyICsxMjU3LDEzIEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUK
ICAgICAgICAgICAgICAgICBqaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIsIGFsbG9jYXRvciwg
c2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CiAgICAgICAgICAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihuZXdTaXplICsgc2l6ZW9mKEluZGV4
aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHNpemVfdCBvbGRTaXplID0gc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5ld1NpemUgPiBvbGRTaXpl
KTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAocmVhbGxvY2F0aW5nKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgcmVh
bGxvY2F0aW5nIChpLmUuIHRoZSBvbGQgc3RydWN0dXJlL2J1dHRlcmZseQogICAgICAgICAgICAg
ICAgICAgICAvLyBhbHJlYWR5IGhhZCBvdXQtb2YtbGluZSBwcm9wZXJ0eSBzdG9yYWdlKS4KLSAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG5ld1NpemUgPiBvbGRTaXplKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIzKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgc2NyYXRjaEdQ
UiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMyA9IG9sZCBzdG9yYWdlLApAQCAtMTI4MSw2ICsx
MjgyLDkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvZmZzZXQg
KyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IG9mZnNldCA9IG9sZFNpemU7IG9mZnNldCA8IG5ld1NpemU7IG9mZnNldCAr
PSBzaXplb2Yodm9pZCopKQorICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6
ZW9mKHZvaWQqKSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
SGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBhbGxvY2F0aW5nIG91dC1vZi1saW5lIHVzaW5n
IGFuIG9wZXJhdGlvbi4KICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBleHRyYVJlZ2lzdGVy
c1RvUHJlc2VydmU7CkBAIC0xMzUzLDggKzEzNTcsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVy
YXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgICAgICAvLyBXZSBzZXQgdGhlIG5ldyBidXR0ZXJm
bHkgYW5kIHRoZSBzdHJ1Y3R1cmUgbGFzdC4gRG9pbmcgaXQgdGhpcyB3YXkgZW5zdXJlcyB0aGF0
CiAgICAgICAgICAgICAvLyB3aGF0ZXZlciB3ZSBoYWQgZG9uZSB1cCB0byB0aGlzIHBvaW50IGlz
IGZvcmdvdHRlbiBpZiB3ZSBjaG9vc2UgdG8gYnJhbmNoIHRvIHNsb3cKICAgICAgICAgICAgIC8v
IHBhdGguCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BS
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CisgICAgICAgICAgICBqaXQuc3RvcmVCdXR0ZXJmbHkoc2NyYXRjaEdQUiwgYmFzZUdQ
Uik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IHN0cnVjdHVyZUJpdHMg
PSBiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSgpLT5pZCgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlpZnlTbG93UGF0
aEdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0
LDcgKzEyNCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIC8vIGJ5dGVjb2RlIG9wZXJhdGlv
biBjb3JyZXNwb25kaW5nIHRvIHRoaXMgYXJyYXlpZmljYXRpb24gYmVpbmcgcmVleGVjdXRlZC4K
ICAgICAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBzaW5jZSBhcnJheWlmaWNhdGlvbiBpcyBub3Qg
dXNlci12aXNpYmxlLgogICAgICAgICAgICAgaml0LT5tX2ppdC5sb2FkOCgKLSAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2VHUFIsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCBtX3N0cnVjdHVyZUdQUik7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobV9iYXNlR1BSLCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZz
ZXQoKSksCisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmVHUFIpOwogICAgICAgICAgICAgbV9i
YWRJbmRleGluZ1R5cGVKdW1wLmZpbGwoCiAgICAgICAgICAgICAgICAgaml0LCBqaXQtPmp1bXBT
bG93Rm9yVW53YW50ZWRBcnJheU1vZGUobV9zdHJ1Y3R1cmVHUFIsIG1fYXJyYXlNb2RlKSk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtODg5LDYgKzg4OSw3IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsgLy8gVGhpcyBp
cyBhIHN0b3JlLXN0b3JlIGZlbmNlLgogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlSUQp
OwogICAgICAgICB3cml0ZShKU0NlbGxfdHlwZUluZm9UeXBlKTsKICAgICAgICAgd3JpdGUoSlND
ZWxsX3R5cGVJbmZvRmxhZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
c2NyYXRjaDEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkOChBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaDEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gx
LCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0
Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoc2Ny
YXRjaDEsIHNjcmF0Y2gyKTsKICAgICAgICAgICAgICAgICBtX2ppdC5vcjMyKHNjcmF0Y2gyLCBB
c3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkFy
cmF5TW9kZXMoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksNyArMTE5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3ModmFsdWUsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNj
cmF0Y2gxKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gxLCBhcnJheVBy
b2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDgoQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKHZhbHVlLCBKU0NlbGw6OmluZGV4
aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQ4
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyh2YWx1ZSwgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwogICAgICAgICAgICAgICAg
IG1faml0LmxzaGlmdDMyKHNjcmF0Y2gxLCBzY3JhdGNoMik7CiAgICAgICAgICAgICAgICAgbV9q
aXQub3IzMihzY3JhdGNoMiwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQ
cm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTA2LDkgKzUwNiw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UK
ICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpIHsKICAgICAgICAgSlNDZWxsKiBi
YXNlID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwogCi0gICAgICAgIGlmIChwcm9wZXJ0eS5pc1VJbnQz
MigpKSB7CisgICAgICAgIGlmIChwcm9wZXJ0eS5pc1VJbnQzMigpKQogICAgICAgICAgICAgcmV0
dXJuIGdldEJ5VmFsKGV4ZWMsIGJhc2UsIHByb3BlcnR5LmFzVUludDMyKCkpOwotICAgICAgICB9
IGVsc2UgaWYgKHByb3BlcnR5LmlzRG91YmxlKCkpIHsKKyAgICAgICAgZWxzZSBpZiAocHJvcGVy
dHkuaXNEb3VibGUoKSkgewogICAgICAgICAgICAgZG91YmxlIHByb3BlcnR5QXNEb3VibGUgPSBw
cm9wZXJ0eS5hc0RvdWJsZSgpOwogICAgICAgICAgICAgdWludDMyX3QgcHJvcGVydHlBc1VJbnQz
MiA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eUFzRG91YmxlKTsKICAgICAgICAgICAg
IGlmIChwcm9wZXJ0eUFzVUludDMyID09IHByb3BlcnR5QXNEb3VibGUgJiYgaXNJbmRleChwcm9w
ZXJ0eUFzVUludDMyKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEwLDE2ICs2MTAsMzQgQEAgQ29tcGlsYXRpb25LZXkgUGxh
bjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpyZW1lbWJlckNvZGVCbG9ja3MoKQordm9pZCBQ
bGFuOjptYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCiB7CisgICAgaWYg
KCFpc0tub3duVG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhv
dXQgcGVyZm9ybWluZworICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRv
IGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAorICAgIC8vIGFsbCBvdXIgQ29kZUJsb2Nr
cyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgorCisgICAgc2xvdFZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIoY29kZUJsb2NrKTsKKyAgICBzbG90VmlzaXRvci5hcHBl
bmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwor
ICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOworfQorCit2
b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2NrcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpKQorICAgICAgICByZXR1cm47CisgICAgCiAgICAgLy8gQ29tcGls
YXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJsb2NrIHdpdGhvdXQgcGVyZm9y
bWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3ZSBuZWVkIHRvIGJlIHBlc3Np
bWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIgQ29kZUJsb2NrcyBtdXN0IGJl
IHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKLSAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmll
cihjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7CisgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpKTsKICAgICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIEhlYXA6OmhlYXAo
cHJvZmlsZWRERkdDb2RlQmxvY2spLT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2sp
OworICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9
CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24g
MjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY5LDcgKzY5LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQg
cmVtZW1iZXJDb2RlQmxvY2tzKCk7CisgICAgdm9pZCBtYXJrQ29kZUJsb2NrcyhTbG90VmlzaXRv
ciYpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAgICAgdm9pZCBjaGVja0xp
dmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJvb2wgaXNLbm93blRv
QmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAy
MDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAyLDYgKzQxMDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIC8vIFJhcmUgZGF0YSBpcyBvbmx5IHVz
ZWQgdG8gYWNjZXNzIHRoZSBhbGxvY2F0b3IgJiBzdHJ1Y3R1cmUKICAgICAgICAgLy8gV2UgY2Fu
IGF2b2lkIHVzaW5nIGFuIGFkZGl0aW9uYWwgR1BSIHRoaXMgd2F5CiAgICAgICAgIEdQUlJlZyBy
YXJlRGF0YUdQUiA9IHN0cnVjdHVyZUdQUjsKKyAgICAgICAgR1BSUmVnIGlubGluZUNhcGFjaXR5
R1BSID0gcmFyZURhdGFHUFI7CiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOwogCkBAIC00MTEzLDYgKzQxMTQsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUo
KSksIHN0cnVjdHVyZUdQUik7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKICAgICAgICAgZW1p
dEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBudWxscHRyLCBhbGxvY2F0b3JHUFIsIHN0cnVj
dHVyZUdQUiwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhjYWxsZWVHUFIs
IEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHJhcmVEYXRhR1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgaW5saW5lQ2FwYWNpdHlHUFIp
OworICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBp
bmxpbmVDYXBhY2l0eUdQUik7CisgICAgICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogCiAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3Bl
cmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBjYWxsZWVHUFIsIG5vZGUtPmlubGluZUNhcGFj
aXR5KCkpKTsKICAgICAgICAgCkBAIC00MTM3LDYgKzQxNDMsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKGFsbG9jYXRvclB0ciksIGFsbG9jYXRvckdQUik7CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdEdQUiwgYWxsb2NhdG9yUHRyLCBhbGxvY2F0b3JHUFIsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwor
ICAgICAgICBtX2ppdC5lbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0R1BSLCBzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsK
IAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRo
aXMsIG9wZXJhdGlvbk5ld09iamVjdCwgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUpKTsKICAgICAgICAg
CkBAIC01OTYxLDExICs1OTY5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxv
Y2F0ZU5ld0EKICAgICBtX2ppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaDJHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSk7CiAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBz
Y3JhdGNoMkdQUikubGlua1RvKGxvb3AsICZtX2ppdCk7CiAgICAgZG9uZS5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICAKKyAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4
aW5nVHlwZSk7Ci0gICAgICAgICAgICAKKyAgICAKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxK
U0FycmF5PihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwg
c2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIsIHNsb3dDYXNlcyk7CiAgICAgCisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCk7CisgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsQXJyYXlBbGxvY2F0b3JXaXRoVmFyaWFibGVTaXplU2xvd1BhdGhHZW5lcmF0b3I+
KAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIHJl
c3VsdEdQUiwKICAgICAgICAgc3RydWN0dXJlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjksNiArMTI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEFsbG9jYXRl
UmF3T2JqZQogICAgIGlmIChhbGxvY2F0b3JQdHIpIHsKICAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKGFsbG9jYXRvclB0ciksIHNjcmF0Y2hHUFIpOwogICAgICAgICBlbWl0QWxsb2Nh
dGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBzdG9yYWdlR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAg
ICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5qdW1wKCkpOwogCkBAIC0xNjIsNiArMTYzLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRBbGxvY2F0ZVJhd09iamUKICAgICAKICAgICBpZiAoaGFzSW5kZXhpbmdIZWFk
ZXIpCiAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7CisgICAgCisgICAgbV9qaXQuZW1pdEluaXRpYWxpemVPdXRPZkxpbmVTdG9y
YWdlKHN0b3JhZ2VHUFIsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgCisg
ICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRH
ZXRMZW5ndGgoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEdQUlJlZyBsZW5ndGhH
UFIsIGJvb2wgaW5jbHVkZVRoaXMpCkBAIC04MzgsNyArODQzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2hlY2tBcnJheShOb2RlKiBubwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBH
UFIpOworICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIHRlbXBHUFIpOwogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgMCwKICAgICAgICAgICAgIGp1bXBTbG93Rm9y
VW53YW50ZWRBcnJheU1vZGUodGVtcEdQUiwgbm9kZS0+YXJyYXlNb2RlKCkpKTsKQEAgLTkwMiw3
ICs5MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlKiBub2RlCiAgICAg
ICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1faml0
LmxvYWQ4KAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlND
ZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHRlbXBHUFIpOworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjT2Zm
c2V0KCkpLCB0ZW1wR1BSKTsKICAgICAgICAgCiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1w
U2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBHUFIsIG5vZGUtPmFycmF5TW9kZSgpKSk7CiAg
ICAgfQpAQCAtMzkzMCw2ICszOTM1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1h
a2VSb3BlKE5vZAogICAgIH0KICAgICBtX2ppdC5zdG9yZTMyKGFsbG9jYXRvckdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpOwog
ICAgIAorICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOworICAgIAogICAgIHN3aXRjaCAobnVtT3BH
UFJzKSB7CiAgICAgY2FzZSAyOgogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0
aENhbGwoCkBAIC0zOTQzLDcgKzM5NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TWFrZVJvcGUoTm9kCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOwogfQogCkBAIC02MzU1LDYgKzYzNjIsOCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2xhc3NUeXBlPiB2b2lkIFNwZWN1CiAgICAgbV9qaXQuc3RvcmVQdHIoc2NvcGVHUFIsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgb2Zmc2V0T2ZTY29wZUNoYWluKSk7CiAgICAgbV9q
aXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSwgSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBvZmZzZXRPZkV4ZWN1dGFibGUpKTsKICAgICBtX2ppdC5zdG9yZVB0cihU
cnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIG9mZnNldE9m
UmFyZURhdGEpKTsKKyAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKE5vZGUqIG5vZGUpCkBAIC02NTQ2LDYg
KzY1NTUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICByZXN1bHRHUFIs
IEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlKFNjb3BlT2Zmc2V0KGkpKSkp
OwogICAgIH0KKyAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCkBAIC02NjI1LDcgKzY2MzYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNh
cGFjaXR5KSksIHNjcmF0Y2gxR1BSKTsKICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwog
ICAgICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgCiAgICAgICAgIGVtaXRBbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRKU09iamVjdDxEaXJlY3RBcmd1bWVudHM+KAogICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIHNjcmF0Y2gxR1BSLCBzY3JhdGNoMUdQUiwg
c2NyYXRjaDJHUFIsCiAgICAgICAgICAgICBzbG93UGF0aCk7CkBAIC02NjQwLDcgKzY2NTEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlRGlyZWN0CiAgICAgICAgIAogICAg
IG1faml0LnN0b3JlUHRyKAogICAgICAgICBUcnVzdGVkSW1tUHRyKDApLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycmlkZXMoKSkp
OwotICAgICAgICAKKyAgICAKICAgICBpZiAobGVuZ3RoSXNLbm93bikgewogICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKQEAgLTY3MDUsNiAr
NjcxNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVEaXJlY3QKICAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIH0KICAgICAgICAgCisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCk7CisgICAgICAgIAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
IH0KIApAQCAtNjkxMyw3ICs2OTI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNw
cmVhZChOb2RlKgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsK
IAotICAgICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhhcmd1bWVudCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gxR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5kZXhp
bmdUeXBlQW5kTWlzY09mZnNldCgpKSwgc2NyYXRjaDFHUFIpOwogICAgICAgICBtX2ppdC5hbmQz
MihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBzY3JhdGNoMUdQUik7CiAgICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihJbnQzMlNoYXBlKSwgc2NyYXRjaDFHUFIpOwogCkBA
IC02OTMzLDcgKzY5NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3ByZWFkKE5v
ZGUqCiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CiAKLSAgICAgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYXJndW1lbnQsIEpTQ2VsbDo6aW5k
ZXhpbmdUeXBlT2Zmc2V0KCkpLCBzY3JhdGNoMkdQUik7CisgICAgICAgIG1faml0LmxvYWQ4KE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGFyZ3VtZW50LCBKU0NlbGw6OmluZGV4aW5nVHlwZUFuZE1p
c2NPZmZzZXQoKSksIHNjcmF0Y2gyR1BSKTsKICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgc2NyYXRjaDJHUFIpOwogICAgICAgICBhdXRvIGlzRG91
YmxlQXJyYXkgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2gy
R1BSLCBUcnVzdGVkSW1tMzIoRG91YmxlU2hhcGUpKTsKIApAQCAtNjk2Nyw2ICs2OTgwLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNwcmVhZChOb2RlKgogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBsZW5ndGhHUFIpLmxpbmtU
byhsb29wU3RhcnQsICZtX2ppdCk7CiAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsK
IAogICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChtX2ppdC5qdW1wKCksIHRoaXMsIG9wZXJhdGlvblNwcmVhZEZh
c3RBcnJheSwgcmVzdWx0R1BSLCBhcmd1bWVudCkpOwpAQCAtNzM4NSwxMSArNzQwMCwxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgIG1faml0LmVtaXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwg
YWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICBtX2pp
dC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplICsgc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKKyAgICAKKyAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemUpOyBvZmZzZXQgKz0gc2l6
ZW9mKHZvaWQqKSkKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUp
ICsgc2l6ZW9mKHZvaWQqKSkpKTsKKyAgICAKKyAgICBtX2ppdC5tdXRhdG9yRmVuY2UoKTsKICAg
ICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgIHNsb3dQYXRoQ2FsbChz
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5LCBzY3JhdGNoR1BSMSkpOwogCiAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOworICAgIG1faml0Lm11dGF0b3JGZW5jZSgpOwogCiAgICAgc3RvcmFnZVJlc3VsdChz
Y3JhdGNoR1BSMSwgbm9kZSk7CiB9CkBAIC03NDM1LDYgKzc0NTYsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIobmV3U2l6ZSArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgIAorICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IG9sZFNp
emU7IG9mZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obmV3U2l6ZSk7IG9mZnNldCArPSBz
aXplb2Yodm9pZCopKQorICAgICAgICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKDApLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1
ZSkgKyBzaXplb2Yodm9pZCopKSkpOworCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAg
ICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7CiAKQEAg
LTc0NDMsNyArNzQ2Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRl
UHIKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdl
R1BSLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRj
aEdQUjIpOwogICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6
OkFkZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9m
KHZvaWQqKSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwor
ICAgICAgICAKKyAgICBtX2ppdC5zdG9yZUJ1dHRlcmZseShzY3JhdGNoR1BSMSwgYmFzZUdQUik7
CiAKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0KQEAgLTc3MzEsNiAr
Nzc1Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTdHJpbmdPYmoKICAgICAg
ICAgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU1dyYXBwZXJPYmplY3Q6OmludGVy
bmFsVmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSkpOwogI2VuZGlmCiAgICAgCisgICAgbV9qaXQubXV0YXRvckZlbmNlKCk7CisgICAgCiAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAogICAgICAgICBzbG93UGF0aCwg
dGhpcywgb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0LCByZXN1bHRHUFIsIG9wZXJhbmRHUFIsIG5v
ZGUtPnN0cnVjdHVyZSgpKSk7CiAgICAgCkBAIC03ODA4LDYgKzc4MzUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJhCiAgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0
VHlwZWRBcnJheSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTW9kZSgpKSk7CiAgICAgCisgICAgbV9qaXQubXV0
YXRvckZlbmNlKCk7CisgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KAogICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6
ZUZvclR5cGUodHlwZSksCiAgICAgICAgIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzaXplR1BSLCBz
dG9yYWdlR1BSKSk7CkBAIC04ODc2LDcgKzg5MDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlU3RvcmVCYXJyaWVyCiAgICAgaWYgKGlzRmVuY2VkKSB7CiAgICAgICAgIG9rLmFwcGVu
ZChtX2ppdC5iYXJyaWVyQnJhbmNoKGJhc2VHUFIsIHNjcmF0Y2gxR1BSKSk7CiAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub0ZlbmNlID0gbV9qaXQuanVtcElmQmFycmllclN0
b3JlTG9hZEZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vRmVu
Y2UgPSBtX2ppdC5qdW1wSWZNdXRhdG9yRmVuY2VOb3ROZWVkZWQoKTsKICAgICAgICAgbV9qaXQu
bWVtb3J5RmVuY2UoKTsKICAgICAgICAgb2suYXBwZW5kKG1faml0LmJhcnJpZXJCcmFuY2hXaXRo
b3V0RmVuY2UoYmFzZUdQUikpOwogICAgICAgICBub0ZlbmNlLmxpbmsoJm1faml0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVj
a0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBpZiAoIU9wdGlv
bnM6OnVzZU9TUkVudHJ5VG9GVEwoKSkKICAgICAgICAgICAgIGxldmVsID0gRlRMOjpDYW5Db21w
aWxlOwotCisgICAgICAgIAogICAgICAgICBtX2dyYXBoLmVuc3VyZU5hdHVyYWxMb29wcygpOwog
ICAgICAgICBOYXR1cmFsTG9vcHMmIG5hdHVyYWxMb29wcyA9ICptX2dyYXBoLm1fbmF0dXJhbExv
b3BzOwogICAgICAgICBIYXNoTWFwPGNvbnN0IE5hdHVyYWxMb29wKiwgdW5zaWduZWQ+IG5hdHVy
YWxMb29wVG9Mb29wSGludCA9IGJ1aWxkTmF0dXJhbExvb3BUb0xvb3BIaW50TWFwKG5hdHVyYWxM
b29wcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAko
cmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkRGR1NhZmVwb2ludC5oIgpAQCAtMzgsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwogY2xhc3MgV29ya2xp
c3Q6OlRocmVhZEJvZHkgOiBwdWJsaWMgQXV0b21hdGljVGhyZWFkIHsKIHB1YmxpYzoKICAgICBU
aHJlYWRCb2R5KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmtsaXN0LCBU
aHJlYWREYXRhJiBkYXRhLCBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENv
bmRpdGlvbj4gY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKQEAgLTM0OSw2ICszNDks
MTcgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogICAgIGNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAordm9pZCBXb3JrbGlzdDo6bWFya0NvZGVC
bG9ja3MoVk0mIHZtLCBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgTG9ja0hvbGRl
ciBsb2NrZXIoKm1fbG9jayk7CisgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVyID0gbV9w
bGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBQ
bGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGlmIChwbGFuLT52bSAhPSAm
dm0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcGxhbi0+bWFya0NvZGVCbG9ja3Mo
c2xvdFZpc2l0b3IpOworICAgIH0KK30KKwogdm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2RlQmxv
Y2tzKFZNJiB2bSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV9sb2NrKTsKQEAgLTM1Niw3
ICszNjcsNyBAQCB2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtCiAgICAg
ICAgIFBsYW4qIHBsYW4gPSBpdGVyLT52YWx1ZS5nZXQoKTsKICAgICAgICAgaWYgKHBsYW4tPnZt
ICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwbGFuLT5yZW1lbWJlckNv
ZGVCbG9ja3MoKTsKKyAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKICAgICB9
CiB9CiAKQEAgLTU1Myw2ICs1NjQsMTQgQEAgdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0m
IHZtKQogICAgIH0KIH0KIAordm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYgdm0sIFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29y
a2xpc3RzKCk7IGktLTspIHsKKyAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0g
REZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCisgICAgICAgICAgICB3b3Jr
bGlzdC0+bWFya0NvZGVCbG9ja3Modm0sIHNsb3RWaXNpdG9yKTsKKyAgICB9Cit9CisKIHZvaWQg
cmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6
Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKQEAgLTU2MSw3ICs1ODAsMjIgQEAgdm9pZCBy
ZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogICAgIH0KIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCisKK3ZvaWQgY29tcGxldGVBbGxQbGFu
c0ZvclZNKFZNJikKK3sKK30KKwordm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9y
JikKK3sKK30KKwordm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKQoreworfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZpc2lvbiAyMDg2NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDggKzI1LDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLQogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJERkdUaHJlYWREYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL0F1dG9tYXRpY1RocmVhZC5oPgpAQCAtNDIsNiArNDAsOCBAQCBjbGFzcyBT
bG90VmlzaXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwog
Y2xhc3MgV29ya2xpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrbGlzdD4gewogcHVibGljOgog
ICAgIGVudW0gU3RhdGUgeyBOb3RLbm93biwgQ29tcGlsaW5nLCBDb21waWxlZCB9OwpAQCAtNTcs
NiArNTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKHZtKTsKICAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCisgICAg
dm9pZCBtYXJrQ29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJik7CiAgICAgdm9pZCByZW1lbWJl
ckNvZGVCbG9ja3MoVk0mKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJl
YWR5KFZNJik7CkBAIC0xNjMsOSArMTY0LDExIEBAIGlubGluZSBXb3JrbGlzdCYgZXhpc3RpbmdX
b3JrbGlzdEZvckluZGUKICAgICByZXR1cm4gKnJlc3VsdDsKIH0KIAorI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCiB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwordm9pZCBtYXJr
Q29kZUJsb2NrcyhWTSYsIFNsb3RWaXNpdG9yJik7CiB2b2lkIHJlbWVtYmVyQ29kZUJsb2NrcyhW
TSYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzMsMTQgKzczLDE0IEBAIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0
SGVhcFJlcG8KICAgICAsIGFic29sdXRlKCZyb290LCAiYWJzb2x1dGUiKQogewogICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG91ciBleHBsaWNpdCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgU3RydWN0dXJl
SURCbG9iIG1hdGNoIHJlYWxpdHkuCi0gICAgUkVMRUFTRV9BU1NFUlQoIShKU0NlbGxfaW5kZXhp
bmdUeXBlLm9mZnNldCgpICYgKHNpemVvZihpbnQzMl90KSAtIDEpKSk7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5vZmZzZXQoKSArIDEgPT0gSlNDZWxsX3R5cGVJbmZv
VHlwZS5vZmZzZXQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4aW5nVHlwZS5v
ZmZzZXQoKSArIDIgPT0gSlNDZWxsX3R5cGVJbmZvRmxhZ3Mub2Zmc2V0KCkpOwotICAgIFJFTEVB
U0VfQVNTRVJUKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgKyAzID09IEpTQ2VsbF9jZWxs
U3RhdGUub2Zmc2V0KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEoSlNDZWxsX2luZGV4aW5nVHlw
ZUFuZE1pc2Mub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZzZXQoKSArIDEgPT0gSlNDZWxs
X3R5cGVJbmZvVHlwZS5vZmZzZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoSlNDZWxsX2luZGV4
aW5nVHlwZUFuZE1pc2Mub2Zmc2V0KCkgKyAyID09IEpTQ2VsbF90eXBlSW5mb0ZsYWdzLm9mZnNl
dCgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChKU0NlbGxfaW5kZXhpbmdUeXBlQW5kTWlzYy5vZmZz
ZXQoKSArIDMgPT0gSlNDZWxsX2NlbGxTdGF0ZS5vZmZzZXQoKSk7CiAKICAgICBKU0NlbGxfc3Ry
dWN0dXJlSUQuY2hhbmdlUGFyZW50KCZKU0NlbGxfaGVhZGVyKTsKICAgICBKU0NlbGxfdXNlZnVs
Qnl0ZXMuY2hhbmdlUGFyZW50KCZKU0NlbGxfaGVhZGVyKTsKLSAgICBKU0NlbGxfaW5kZXhpbmdU
eXBlLmNoYW5nZVBhcmVudCgmSlNDZWxsX3VzZWZ1bEJ5dGVzKTsKKyAgICBKU0NlbGxfaW5kZXhp
bmdUeXBlQW5kTWlzYy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAgSlND
ZWxsX3R5cGVJbmZvVHlwZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRlcyk7CiAgICAg
SlNDZWxsX3R5cGVJbmZvRmxhZ3MuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwog
ICAgIEpTQ2VsbF9jZWxsU3RhdGUuY2hhbmdlUGFyZW50KCZKU0NlbGxfdXNlZnVsQnl0ZXMpOwpA
QCAtMTM1LDIxICsxMzUsMjcgQEAgdm9pZCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Ojpjb21wdXRl
UmFuZwogICAgICAgICBkYXRhTG9nKCJBYnN0cmFjdCBIZWFwIFJlcG9zaXRvcnk6XG4iKTsKICAg
ICAgICAgcm9vdC5kZWVwRHVtcChXVEY6OmRhdGFGaWxlKCkpOwogICAgIH0KKyAgICAKKyAgICBh
dXRvIHJhbmdlRm9yID0gWyZdIChjb25zdCBBYnN0cmFjdEhlYXAqIGhlYXApIC0+IEhlYXBSYW5n
ZSB7CisgICAgICAgIGlmIChoZWFwKQorICAgICAgICAgICAgcmV0dXJuIGhlYXAtPnJhbmdlKCk7
CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoKTsKKyAgICB9OwogCiAgICAgZm9yIChIZWFwRm9y
VmFsdWUgZW50cnkgOiBtX2hlYXBGb3JNZW1vcnkpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxN
ZW1vcnlWYWx1ZT4oKS0+c2V0UmFuZ2UoZW50cnkuaGVhcC0+cmFuZ2UoKSk7CisgICAgICAgIGVu
dHJ5LnZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKS0+c2V0UmFuZ2UocmFuZ2VGb3IoZW50cnkuaGVh
cCkpOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yQ0NhbGxSZWFkKQot
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IGVu
dHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5hczxDQ2FsbFZhbHVlPigp
LT5lZmZlY3RzLnJlYWRzID0gcmFuZ2VGb3IoZW50cnkuaGVhcCk7CiAgICAgZm9yIChIZWFwRm9y
VmFsdWUgZW50cnkgOiBtX2hlYXBGb3JDQ2FsbFdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+
YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBlbnRyeS5oZWFwLT5yYW5nZSgpOwor
ICAgICAgICBlbnRyeS52YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKS0+ZWZmZWN0cy53cml0ZXMgPSBy
YW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6IG1faGVh
cEZvclBhdGNocG9pbnRSZWFkKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZh
bHVlPigpLT5lZmZlY3RzLnJlYWRzID0gZW50cnkuaGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50
cnkudmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKS0+ZWZmZWN0cy5yZWFkcyA9IHJhbmdlRm9y
KGVudHJ5LmhlYXApOwogICAgIGZvciAoSGVhcEZvclZhbHVlIGVudHJ5IDogbV9oZWFwRm9yUGF0
Y2hwb2ludFdyaXRlKQotICAgICAgICBlbnRyeS52YWx1ZS0+YXM8UGF0Y2hwb2ludFZhbHVlPigp
LT5lZmZlY3RzLndyaXRlcyA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZh
bHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPmVmZmVjdHMud3JpdGVzID0gcmFuZ2VGb3IoZW50
cnkuaGVhcCk7CiAgICAgZm9yIChIZWFwRm9yVmFsdWUgZW50cnkgOiBtX2hlYXBGb3JGZW5jZVJl
YWQpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVlPigpLT5yZWFkID0gZW50cnku
aGVhcC0+cmFuZ2UoKTsKKyAgICAgICAgZW50cnkudmFsdWUtPmFzPEZlbmNlVmFsdWU+KCktPnJl
YWQgPSByYW5nZUZvcihlbnRyeS5oZWFwKTsKICAgICBmb3IgKEhlYXBGb3JWYWx1ZSBlbnRyeSA6
IG1faGVhcEZvckZlbmNlV3JpdGUpCi0gICAgICAgIGVudHJ5LnZhbHVlLT5hczxGZW5jZVZhbHVl
PigpLT53cml0ZSA9IGVudHJ5LmhlYXAtPnJhbmdlKCk7CisgICAgICAgIGVudHJ5LnZhbHVlLT5h
czxGZW5jZVZhbHVlPigpLT53cml0ZSA9IHJhbmdlRm9yKGVudHJ5LmhlYXApOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA4NjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU5LDExICs1OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAgICAgbWFjcm8oSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9yLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9jZWxsU3RhdGUs
IEpTQ2VsbDo6Y2VsbFN0YXRlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0NlbGxfaGVhZGVyLCAw
KSBcCi0gICAgbWFjcm8oSlNDZWxsX2luZGV4aW5nVHlwZSwgSlNDZWxsOjppbmRleGluZ1R5cGVP
ZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTQ2VsbF9pbmRleGluZ1R5cGVBbmRNaXNjLCBKU0NlbGw6
OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTQ2VsbF9zdHJ1Y3R1
cmVJRCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNDZWxsX3R5
cGVJbmZvRmxhZ3MsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8o
SlNDZWxsX3R5cGVJbmZvVHlwZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSkgXAotICAg
IG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkg
XAorICAgIG1hY3JvKEpTQ2VsbF91c2VmdWxCeXRlcywgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRN
aXNjT2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9uX2V4ZWN1dGFibGUsIEpTRnVuY3Rp
b246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSBcCiAgICAgbWFjcm8oSlNGdW5jdGlvbl9zY29wZSwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpIFwKICAgICBtYWNybyhKU0Z1bmN0aW9u
X3JhcmVEYXRhLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKICAgICAgICAgZGF0YUxvZyhjb21tYSwgbV9iM0NvZGUpOwogICAgICAgICBkYXRh
TG9nKGNvbW1hLCBtX2FyaXR5Q2hlY2tFbnRyeXBvaW50KTsKKyAgICAgICAgZGF0YUxvZygiXG4i
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4Niw3ICsyNzg2
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKQogICAgIHsKICAg
ICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJl
VHJhbnNpdGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7Ci0KKyAgICAg
ICAgCiAgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9u
KCktPnByZXZpb3VzOwogICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwg
b2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKQEAgLTM5NDUsNiArMzk0NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZmFz
dE9iamVjdCwgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tpXSk7CiAgICAg
ICAgIH0KICAgICAgICAgCisgICAgICAgIG11dGF0b3JGZW5jZSgpOworICAgICAgICAKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKQEAgLTQwMDEsNiAr
NDAwMyw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKGV4
ZWN1dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7CiAg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVh
cHMuSlNGdW5jdGlvbl9yYXJlRGF0YSk7CiAgICAgICAgIAorICAgICAgICBtdXRhdG9yRmVuY2Uo
KTsKKyAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5h
bmNob3IoZmFzdE9iamVjdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgCkBAIC00MTI5LDYgKzQxMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZW5kLCBsYXN0TmV4dCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG11
dGF0b3JGZW5jZSgpOworICAgICAgICAKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAg
IH0KICAgICAKQEAgLTQxODIsNiArNDE4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuZXF1YWwoY3VycmVudE9mZnNldCwgbV9vdXQuY29uc3RJbnQzMigwKSks
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobG9vcFN0YXJ0KSk7CiAKICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgbXV0
YXRvckZlbmNlKCk7CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKGFycmF5KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNDIxNiw2ICs0MjIzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbXBpbGVOZXdPYmplY3QoKQogICAgIHsKICAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0
ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgICAgIG11dGF0b3JGZW5jZSgpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdBcnJheSgpCkBAIC00MjY4LDYgKzQyNzYs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKKyAgICAgICAgICAgIG11dGF0b3JGZW5jZSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDM3Niw2ICs0
Mzg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NDE3LDcgKzQ0MjcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKIAotICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nU2hhcGUgPSBtX291dC5sb2FkOFpl
cm9FeHQzMihhcmd1bWVudCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBpbmRleGluZ1NoYXBlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoYXJndW1lbnQs
IG1faGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAgICAgICAgaW5kZXhp
bmdTaGFwZSA9IG1fb3V0LmJpdEFuZChpbmRleGluZ1NoYXBlLCBtX291dC5jb25zdEludDMyKElu
ZGV4aW5nU2hhcGVNYXNrKSk7CiAgICAgICAgICAgICBMVmFsdWUgaXNPS0luZGV4aW5nVHlwZSA9
IG1fb3V0LmJlbG93T3JFcXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5zdWIoaW5kZXhpbmdT
aGFwZSwgbV9vdXQuY29uc3RJbnQzMihJbnQzMlNoYXBlKSksCkBAIC00NDg2LDYgKzQ0OTYsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisgICAgICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25TcHJlYWRHZW5lcmljKSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KTsKIApAQCAtNDUx
OCw2ICs0NTI5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5mb3JJ
bmRleGluZ1R5cGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSktPmF0KGluZGV4KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAgICAg
ICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5hcnJheSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTQ1NDIsNiArNDU1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpY0xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkuYXJyYXkpOworICAgICAgICAg
ICAgbXV0YXRvckZlbmNlKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC00NjA5LDYgKzQ2MjIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc3Rv
cmUzMihzaXplLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbGVu
Z3RoKTsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihGYXN0VHlw
ZWRBcnJheSksIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2Rl
KTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgbXV0YXRvckZlbmNlKCk7CiAgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1
ZSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKQEAgLTQ4NTEsNiAr
NDg2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdf
ZmxhZ3MpOwogICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aCwgcmVzdWx0LCBtX2hlYXBzLkpT
U3RyaW5nX2xlbmd0aCk7CiAgICAgICAgIAorICAgICAgICBtdXRhdG9yRmVuY2UoKTsKICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihyZXN1bHQpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtNTIyOSw2ICs1MjQ0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHko
CiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5jb2RlT3JpZ2luT3duZXIoKSwKICAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1
Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwpAQCAtNTIzNiw3
ICs1MjUyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VG
b3JUcmFuc2l0aW9uKAogICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgp
LAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFnZSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5p
bmRleGluZ1R5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlv
bigpLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJl
KCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOwogICAgICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkg
PT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtNTI0NCw3
ICs1MjY0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlE
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVy
dHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQo
KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC04MTAzLDYgKzgxMjIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZihJbmRleGluZ0hlYWRlcikpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBoYXZlQnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0
ZXJmbHlWYWx1ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3BsYXRXb3Jk
cygKKyAgICAgICAgICAgICAgICAgICAgZmFzdEJ1dHRlcmZseVZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKC1zdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
LSAxKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMigtMSksCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVt
YmVyKCkpOwogCiAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTgyNTcsNyArODI4Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBi
dXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9uJ3QgbmVlZCBvbmUuCiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgQml0VmVjdG9yIHNldElu
bGluZU9mZnNldHM7CiAgICAgICAgICAgICBmb3IgKFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBz
dHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgewogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgICAgICBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBkZXNjcmlwdG9yID0g
ZGF0YS5tX3Byb3BlcnRpZXNbaV07CkBAIC04MjY2LDExICs4MjkyLDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbZGVzY3JpcHRvci5p
bmZvKCldICE9IGVudHJ5LmtleSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBp
c0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5OworICAgICAg
ICAgICAgICAgICAgICBMVmFsdWUgYmFzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KGVudHJ5Lm9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldElu
bGluZU9mZnNldHMuc2V0KGVudHJ5Lm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
YXNlID0gb2JqZWN0OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJhc2UgPSBidXR0ZXJmbHk7CiAgICAgICAgICAgICAgICAgICAgIHN0b3JlUHJv
cGVydHkodmFsdWVzW2ldLCBiYXNlLCBkZXNjcmlwdG9yLmluZm8oKSwgZW50cnkub2Zmc2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZXRJbmxpbmVPZmZzZXRzLmdl
dChpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5pbnQ2NFplcm8s
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9iamVjdCwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2UoaSkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG9iamVjdCkpOwogICAgICAg
ICAgICAgbV9vdXQuanVtcChvdXRlckNvbnRpbnVhdGlvbik7CkBAIC04MjgxLDYgKzgzMTYsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0ZXJDb250aW51
YXRpb24sIG91dGVyTGFzdE5leHQpOwogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShwb2lu
dGVyVHlwZSgpLCByZXN1bHRzKSk7CisgICAgICAgIG11dGF0b3JGZW5jZSgpOwogICAgIH0KIAog
ICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbigpCkBAIC04MzU2LDYg
KzgzOTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAg
bXV0YXRvckZlbmNlKCk7CiAgICAgICAgIHNldEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgfQog
CkBAIC04OTM0LDcgKzg5NzEsOCBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShpbml0TG9vcCk7CiAgICAgICAgIAog
ICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbEluZGV4ID0gbV9vdXQuYW5jaG9yKGVuZCk7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsUG9pbnRlciA9IG1fb3V0LmFuY2hvcihi
YXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxQb2ludGVyID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKGJhc2UsIG1fb3V0LnNobChtX291dC5zaWduRXh0
MzJUb1B0cihiZWdpbiksIG1fb3V0LmNvbnN0SW50MzIoMykpKSk7CiAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5ub3RFcXVhbChlbmQsIGJlZ2luKSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJl
KGluaXREb25lKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpbml0TG9vcCwg
aW5pdERvbmUpOwpAQCAtODk2Myw3ICs5MDAxLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdp
dGhTaXplSW1wbChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOwotICAgICAgICBtX291dC5zdG9y
ZVB0cihyZXN1bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworCisgICAg
ICAgIHNwbGF0V29yZHMoCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKC1pbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgLSAxKSwgbV9vdXQuY29uc3RJbnQz
MigtMSksCisgICAgICAgICAgICBtX291dC5pbnQ2NFplcm8sIG1faGVhcHMucHJvcGVydGllcy5h
dEFueU51bWJlcigpKTsKKyAgICAgICAgCisgICAgICAgIHNldEJ1dHRlcmZseShyZXN1bHQsIG9i
amVjdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApAQCAtODk5MSw3ICs5
MDM1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQsIG1f
b3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zm
c2V0KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3Vs
dCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Cisg
ICAgICAgIHNwbGF0V29yZHMoCisgICAgICAgICAgICByZXN1bHQsCisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKC1uZXdTaXplIC0gMSksIG1fb3V0LmNvbnN0SW50MzIoLW9sZFNpemUgLSAx
KSwKKyAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywgbV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55
TnVtYmVyKCkpOworICAgICAgICAKKyAgICAgICAgc2V0QnV0dGVyZmx5KHJlc3VsdCwgb2JqZWN0
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtOTg2MSw2ICs5
OTEwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
CiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzdHJ1Y3R1
cmUsIHNsb3dQYXRoKTsKKyAgICAgICAgc3BsYXRXb3JkcygKKyAgICAgICAgICAgIHJlc3VsdCwK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNGaW5hbE9iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkgLyA4KSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNGaW5hbE9i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkgLyA4ICsgc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmludDY0WmVybywKKyAgICAgICAgICAgIG1faGVh
cHMucHJvcGVydGllcy5hdEFueU51bWJlcigpKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIoYnV0
dGVyZmx5LCByZXN1bHQsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xMTk0Myw3ICsxMTk5OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleGlu
Z1R5cGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGlu
Z1R5cGUpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZUFuZE1pc2MpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CkBAIC0xMjQzNiw3ICsxMjQ5MSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRl
R2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBM
YXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzRmVuY2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIG5vRmVuY2UgPSBqaXQuanVtcElmQmFycmllclN0b3JlTG9hZEZlbmNl
Tm90TmVlZGVkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIG5vRmVuY2UgPSBqaXQuanVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaml0Lm1lbW9yeUZlbmNlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0LmJhcnJpZXJCcmFuY2hXaXRo
b3V0RmVuY2UoYmFzZUdQUikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRmVuY2Uu
bGluaygmaml0KTsKQEAgLTEyNDk3LDYgKzEyNTUyLDY0IEBAIHByaXZhdGU6CiAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQorICAgIAorICAg
IHZvaWQgbXV0YXRvckZlbmNlKCkKKyAgICB7CisgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAg
ICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9v
dXQuYWJzb2x1dGUodm0oKS5oZWFwLmFkZHJlc3NPZk11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSks
CisgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuZmVuY2UoJm1faGVhcHMucm9vdCwgbnVsbHB0cik7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEJ1dHRlcmZs
eShMVmFsdWUgYnV0dGVyZmx5LCBMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKGlz
WDg2KCkpIHsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIp
OworICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIoYnV0dGVyZmx5LCBvYmplY3QsIG1faGVhcHMu
SlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJv
b3QsIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGZhc3RQ
YXRoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0
LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5hZGRyZXNzT2ZNdXRhdG9y
U2hvdWxkQmVGZW5jZWQoKSkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxs
eShmYXN0UGF0aCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgb2JqZWN0LCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmZlbmNlKCZtX2hlYXBzLnJvb3QsIG51bGxwdHIpOworICAgICAgICBtX291dC5z
dG9yZVB0cihidXR0ZXJmbHksIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwor
ICAgICAgICBtX291dC5mZW5jZSgmbV9oZWFwcy5yb290LCBudWxscHRyKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJncz4KICAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwg
QXJncy4uLiBhcmdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcs
NyArMjc3LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgICAgICBpZiAoQXJy
YXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9y
aWdpbiktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CiAgICAg
ICAgICAgICAgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAg
ICAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBhcnJheVByb2ZpbGUtPmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICAgICAgaml0LmxvYWQ4
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0NlbGw6OmluZGV4aW5n
VHlwZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgIGppdC5sb2Fk
OChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVBbmRNaXNjT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgICAgICAgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIp
OwogICAgICAgICAgICAgICAgIGppdC5sc2hpZnQzMihHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgICAgICAgICAgICAgIGppdC5vcjMyKEdQUkluZm86OnJlZ1QyLCBNYWNyb0Fz
c2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKGFycmF5UHJvZmlsZS0+YWRkcmVzc09mQXJyYXlNb2Rl
cygpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMTEgQEAgTFZhbHVlIE91dHB1dDo6c2lnbkV4
dDMyVG82NChMVmFsdWUgdmFsdQogICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7CiB9CiAKK0xWYWx1ZSBP
dXRwdXQ6OnNpZ25FeHQzMlRvUHRyKExWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2lnbkV4
dDMyVG82NCh2YWx1ZSk7Cit9CisKIExWYWx1ZSBPdXRwdXQ6Onplcm9FeHQoTFZhbHVlIHZhbHVl
LCBMVHlwZSB0eXBlKQogewogICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IHR5cGUpCkBAIC00NDYs
OSArNDUxLDEyIEBAIHZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG8KICAg
ICBtX2hlYXBzLT5kZWNvcmF0ZU1lbW9yeShwb2ludGVyLmhlYXAoKSwgc3RvcmUpOwogfQogCi1G
ZW5jZVZhbHVlKiBPdXRwdXQ6OmZlbmNlKCkKK0ZlbmNlVmFsdWUqIE91dHB1dDo6ZmVuY2UoY29u
c3QgQWJzdHJhY3RIZWFwKiByZWFkLCBjb25zdCBBYnN0cmFjdEhlYXAqIHdyaXRlKQogewotICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8RmVuY2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSk7
CisgICAgRmVuY2VWYWx1ZSogcmVzdWx0ID0gbV9ibG9jay0+YXBwZW5kTmV3PEZlbmNlVmFsdWU+
KG1fcHJvYywgb3JpZ2luKCkpOworICAgIG1faGVhcHMtPmRlY29yYXRlRmVuY2VSZWFkKHJlYWQs
IHJlc3VsdCk7CisgICAgbV9oZWFwcy0+ZGVjb3JhdGVGZW5jZVdyaXRlKHdyaXRlLCByZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgT3V0cHV0OjpzdG9yZTMyQXM4KExWYWx1
ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw2ICsxNzcsNyBAQCBwdWJs
aWM6CiAgICAgTFZhbHVlIGRvdWJsZVRvVUludChMVmFsdWUpOwogCiAgICAgTFZhbHVlIHNpZ25F
eHQzMlRvNjQoTFZhbHVlKTsKKyAgICBMVmFsdWUgc2lnbkV4dDMyVG9QdHIoTFZhbHVlKTsKICAg
ICBMVmFsdWUgemVyb0V4dChMVmFsdWUsIExUeXBlKTsKICAgICBMVmFsdWUgemVyb0V4dFB0cihM
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIHplcm9FeHQodmFsdWUsIEIzOjpJbnQ2NCk7IH0KICAgICBM
VmFsdWUgaW50VG9Eb3VibGUoTFZhbHVlKTsKQEAgLTE4OSw3ICsxOTAsNyBAQCBwdWJsaWM6CiAK
ICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlKTsKICAgICB2b2lkIHN0b3JlKExW
YWx1ZSwgVHlwZWRQb2ludGVyKTsKLSAgICBCMzo6RmVuY2VWYWx1ZSogZmVuY2UoKTsKKyAgICBC
Mzo6RmVuY2VWYWx1ZSogZmVuY2UoY29uc3QgQWJzdHJhY3RIZWFwKiByZWFkLCBjb25zdCBBYnN0
cmFjdEhlYXAqIHdyaXRlKTsKIAogICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50
ZXIpOwogICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbFN0YXRlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NlbGxTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCwxNCArNDAsOCBAQCBlbnVtIGNsYXNzIENlbGxTdGF0ZSA6IHVpbnQ4X3QgewogICAgIC8vIFRo
ZSBvYmplY3QgaXMgaW4gZWRlbi4gRHVyaW5nIEdDLCB0aGlzIG1lYW5zIHRoYXQgdGhlIG9iamVj
dCBoYXMgbm90IGJlZW4gbWFya2VkIHlldC4KICAgICBOZXdXaGl0ZSA9IDEsCiAKLSAgICAvLyBU
aGUgb2JqZWN0IGlzIGdyZXkgLSBpLmUuIGl0IHdpbGwgYmUgc2Nhbm5lZCAtIGFuZCB0aGlzIGlz
IHRoZSBmaXJzdCB0aW1lIGluIHRoaXMgR0MgdGhhdCB3ZSBhcmUKLSAgICAvLyBnb2luZyB0byBz
Y2FuIGl0LiBJZiB0aGlzIGlzIGFuIGVkZW4gR0MsIHRoaXMgYWxzbyBtZWFucyB0aGF0IHRoZSBv
YmplY3QgaXMgaW4gZWRlbi4KLSAgICBOZXdHcmV5ID0gMiwKLQotICAgIC8vIFRoZSBvYmplY3Qg
aXMgZ3JleSAtIGkuZS4gaXQgd2lsbCBiZSBzY2FubmVkIC0gYnV0IGl0IGVpdGhlciBiZWxvbmdz
IHRvIG9sZCBnZW4gKGlmIHRoaXMgaXMgZWRlbgotICAgIC8vIEdDKSBvciBpdCBpcyBncmV5IGEg
c2Vjb25kIHRpbWUgaW4gdGhpcyBjdXJyZW50IEdDIChiZWNhdXNlIGEgY29uY3VycmVudCBzdG9y
ZSBiYXJyaWVyIHJlcXVlc3RlZAotICAgIC8vIHJlLWdyZXlpbmcpLgotICAgIE9sZEdyZXkgPSAz
CisgICAgLy8gVGhlIG9iamVjdCBpcyBncmV5IC0gaS5lLiBpdCB3aWxsIGJlIHNjYW5uZWQuCisg
ICAgR3JleSA9IDIsCiB9OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmxhY2tUaHJlc2hvbGQg
PSAwOyAvLyB4IDw9IGJsYWNrVGhyZXNob2xkIG1lYW5zIHggaXMgQW50aHJhY2l0ZU9yQmxhY2su
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NTZWdtZW50ZWRBcnJheS5o
CShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21l
bnRlZEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNjIsMyArMTY0LDQgQEAgcHJpdmF0ZToKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDM1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIZWFwOjpSZXN1bWVUaGVXb3JsZFNjb3BlIHsK
K3B1YmxpYzoKKyAgICBSZXN1bWVUaGVXb3JsZFNjb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDog
bV9oZWFwKGhlYXApCisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUNvbmN1cnJlbnRH
QygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1f
aGVhcC5tX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKSwgIiBtcy4uLl1cbiIpOworICAgICAgICAK
KyAgICAgICAgbV9oZWFwLnJlc3VtZVRoZVdvcmxkKCk7CisgICAgfQorICAgIAorICAgIH5SZXN1
bWVUaGVXb3JsZFNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3Vy
cmVudEdDKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2hlYXAu
c3RvcFRoZVdvcmxkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgICAgIGRhdGFMb2coIltHQzogIik7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBIZWFwJiBtX2hlYXA7Cit9OworCiBuYW1lc3BhY2UgewogCiBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxhcmdlSGVhcFNpemUgPSAzMiAqIE1COyAvLyBBYm91dCAxLjVYIHRoZSBhdmVyYWdlIHdlYnBh
Z2UuCkBAIC0yNDQsNyArMjczLDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBU
eXBlKQogICAgICwgbV9leHRyYU1lbW9yeVNpemUoMCkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJh
TWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQotICAgICwgbV9zbG90
VmlzaXRvcigqdGhpcykKKyAgICAsIG1fY29sbGVjdG9yU2xvdFZpc2l0b3Ioc3RkOjptYWtlX3Vu
aXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpKQorICAgICwgbV9tdXRhdG9yTWFya1N0YWNrKHN0ZDo6
bWFrZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAg
ICAsIG1fY29kZUJsb2NrcyhzdGQ6Om1ha2VfdW5pcXVlPENvZGVCbG9ja1NldD4oKSkKICAgICAs
IG1faml0U3R1YlJvdXRpbmVzKHN0ZDo6bWFrZV91bmlxdWU8SklUU3R1YlJvdXRpbmVTZXQ+KCkp
CkBAIC0yNjYsNiArMjk2LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBl
KQogI2lmIFVTRShGT1VOREFUSU9OKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNv
dW50KDApCiAjZW5kaWYKKyAgICAsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKHN0ZDo6bWFr
ZV91bmlxdWU8TWFya1N0YWNrQXJyYXk+KCkpCisgICAgLCBtX3NoYXJlZE11dGF0b3JNYXJrU3Rh
Y2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAsIG1faGVscGVyQ2xp
ZW50KCZoZWFwSGVscGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6Y3Jl
YXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OmNyZWF0ZSgpKQpAQCAtMjgxLDYgKzMxMywxMSBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAKIEhlYXA6On5IZWFwKCkKIHsKKyAgICBmb3IgKGF1dG8mIHNsb3RWaXNp
dG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgc2xvdFZpc2l0b3ItPmNsZWFy
TWFya1N0YWNrcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNr
cygpOworICAgIG1fbXV0YXRvck1hcmtTdGFjay0+Y2xlYXIoKTsKKyAgICAKICAgICBmb3IgKFdl
YWtCbG9jayogYmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAgV2Vh
a0Jsb2NrOjpkZXN0cm95KCp0aGlzLCBibG9jayk7CiB9CkBAIC00MTYsMTIgKzQ1MywxMiBAQCB2
b2lkIEhlYXA6OmFkZFJlZmVyZW5jZShKU0NlbGwqIGNlbGwsIEFyCiAKIHZvaWQgSGVhcDo6aGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmhhcnZlc3RXZWFrUmVmZXJl
bmNlcygpOwogfQogCiB2b2lkIEhlYXA6OmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFsaXplcnMo
KQogewotICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbmNvbmRpdGlvbmFsRmluYWxpemVycygp
OworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmZpbmFsaXplVW5jb25kaXRpb25hbEZpbmFs
aXplcnMoKTsKIH0KIAogdm9pZCBIZWFwOjp3aWxsU3RhcnRJdGVyYXRpbmcoKQpAQCAtNDM5LDEx
NyArNDc2LDE2NCBAQCB2b2lkIEhlYXA6OmNvbXBsZXRlQWxsSklUUGxhbnMoKQogI2lmIEVOQUJM
RShKSVQpCiAgICAgSklUV29ya2xpc3Q6Omluc3RhbmNlKCktPmNvbXBsZXRlQWxsRm9yVk0oKm1f
dm0pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgREZH
Ojpjb21wbGV0ZUFsbFBsYW5zRm9yVk0oKm1fdm0pOwotI2VuZGlmCiB9CiAKLXZvaWQgSGVhcDo6
bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSkKK3ZvaWQgSGVhcDo6bWFya1RvRml4cG9pbnQo
ZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIFRpbWluZ1Njb3BlIG1hcmtSb290c1RpbWluZ1Nj
b3BlKCp0aGlzLCAiSGVhcDo6bWFya1Jvb3RzIik7CisgICAgVGltaW5nU2NvcGUgbWFya1RvRml4
cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50Iik7CiAgICAgCi0g
ICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9yKTsKKyAgICBI
ZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKCptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
ICAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIHByZUNvbnZlcmdlbmNlVGltaW5nU2Nv
cGUoKnRoaXMsICJIZWFwOjptYXJrUm9vdHMgYmVmb3JlIGNvbnZlcmdlbmNlIik7CisgICAgaWYg
KG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgeworICAgICAgICBt
X29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNs
ZWFyTWFya1N0YWNrcygpOworICAgICAgICBtX211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7Cisg
ICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIERGRzo6cmVtZW1iZXJDb2RlQmxv
Y2tzKCptX3ZtKTsKLSNlbmRpZgorICAgIGJlZ2luTWFya2luZygpOwogCi0jaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQotICAgICAgICBpZiAoU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQ
cm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIG5lZWQgdG8gb3duIHRoZSBsb2NrIGZyb20gbm93IHVudGlsIHdlJ3JlIGRvbmUK
LSAgICAgICAgICAgIC8vIG1hcmtpbmcgdGhlIFNhbXBsaW5nUHJvZmlsZXIncyBkYXRhIGJlY2F1
c2Ugb25jZSB3ZSB2ZXJpZnkgdGhlCi0gICAgICAgICAgICAvLyBTYW1wbGluZ1Byb2ZpbGVyJ3Mg
c3RhY2sgdHJhY2VzLCB3ZSBkb24ndCB3YW50IGl0IHRvIGFjY3VtdWxhdGUKLSAgICAgICAgICAg
IC8vIG1vcmUgc3RhY2sgdHJhY2VzIGJlZm9yZSB3ZSBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIGl0
LgotICAgICAgICAgICAgLy8gVGhpcyBsb2NrIGlzIHJlbGVhc2VkIGluc2lkZSB2aXNpdFNhbXBs
aW5nUHJvZmlsZXIoKS4KLSAgICAgICAgICAgIHNhbXBsaW5nUHJvZmlsZXItPmdldExvY2soKS5s
b2NrKCk7Ci0gICAgICAgICAgICBzYW1wbGluZ1Byb2ZpbGVyLT5wcm9jZXNzVW52ZXJpZmllZFN0
YWNrVHJhY2VzKCk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CiAKLSAgICAgICAg
aWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RnVsbCkgewotICAgICAg
ICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICAgICAgbV9zbG90VmlzaXRvci5j
bGVhck1hcmtTdGFjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmVnaW5NYXJraW5nKCk7Ci0K
LSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0KLSAgICAgICAg
bV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCi0gICAgICAgICAgICBbdGhpc10gKCkgewotICAg
ICAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90Vmlz
aXRvckxvY2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNs
b3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGTW92ZShuZXdWaXNp
dG9yKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0
KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgIG1faGVscGVyQ2xpZW50LnNldEZ1bmN0aW9uKAor
ICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9y
OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmIChtX2F2YWlsYWJsZVBh
cmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOworICAgICAgICAgICAg
ICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9
IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6
OkhlbHBlcik7CisgICAgICAgICAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoR0NUaHJlYWRUeXBl
OjpIZWxwZXIpOwogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQYXJh
bGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOwotICAgICAgICAg
ICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2
ZURyYWluKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgUGFyYWxsZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7
CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZl
RHJhaW4pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQo
c2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90
VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90Vmlz
aXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAK
LSAgICAgICAgbV9zbG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKLSAgICB9Ci0gICAgCi0g
ICAgewotICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJIZWFw
OjptYXJrUm9vdHMgY29udmVyZ2VuY2UiKTsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBl
bmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAgICAgICAgbV9zbG90VmlzaXRvci5k
b25hdGVBbmREcmFpbigpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFy
a2luZygpOwogCisgICAgU2Vjb25kcyBjb25jdXJyZW50VGltZTsKKyAgICBkb3VibGUgc3RvcHBl
ZE92ZXJDb25jdXJyZW50UmF0aW8gPSAwLjE7CisgICAgY29uc3QgZG91YmxlIHJhdGlvU3RlcCA9
IDEuMzsKKyAgICBNb25vdG9uaWNUaW1lIGluaXRpYWxUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CisgICAgTW9ub3RvbmljVGltZSB0b3BPZkxvb3BUaW1lID0gaW5pdGlhbFRpbWU7CisgICAg
Zm9yICh1bnNpZ25lZCBpdGVyYXRpb24gPSAxOyA7ICsraXRlcmF0aW9uKSB7CisgICAgICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICAgICAgZGF0YUxvZygiaSMiLCBpdGVyYXRpb24s
ICIgIik7CisgICAgICAgIE1vbm90b25pY1RpbWUgdGltZVRvUmVzdW1lID0gdG9wT2ZMb29wVGlt
ZSArIGNvbmN1cnJlbnRUaW1lICogc3RvcHBlZE92ZXJDb25jdXJyZW50UmF0aW87CisgICAgICAg
IHN0b3BwZWRPdmVyQ29uY3VycmVudFJhdGlvICo9IHJhdGlvU3RlcDsKICAgICAgICAgewotICAg
ICAgICAgICAgVGltaW5nU2NvcGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhl
YXA6Om1hcmtSb290cyBjb25zZXJ2YXRpdmUgc2NhbiIpOworICAgICAgICAgICAgVGltaW5nU2Nv
cGUgcHJlQ29udmVyZ2VuY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1hcmtUb0ZpeHBvaW50
IGNvbnNlcnZhdGl2ZSBzY2FuIik7CiAgICAgICAgICAgICBDb25zZXJ2YXRpdmVSb290cyBjb25z
ZXJ2YXRpdmVSb290cygqdGhpcyk7CiAgICAgICAgICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBl
clNhbXBsZXJTY29wZShmYWxzZSk7CiAgICAgICAgICAgICBnYXRoZXJTdGFja1Jvb3RzKGNvbnNl
cnZhdGl2ZVJvb3RzKTsKICAgICAgICAgICAgIGdhdGhlckpTU3RhY2tSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CiAgICAgICAgICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29uc2VydmF0
aXZlUm9vdHMpOwogICAgICAgICAgICAgdmlzaXRDb25zZXJ2YXRpdmVSb290cyhjb25zZXJ2YXRp
dmVSb290cyk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAvLyBOb3cgd2Ugdmlz
aXQgcm9vdHMgdGhhdCBkb24ndCBnZXQgYmFycmllcmVkLCBzbyBlYWNoIGZpeHBvaW50IGl0ZXJh
dGlvbiBqdXN0IHJldmlzaXRzCisgICAgICAgIC8vIGFsbCBvZiB0aGVtLgorI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisgICAgICAgIHNjYW5FeHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sICpt
X2NvbGxlY3RvclNsb3RWaXNpdG9yKTsKKyNlbmRpZgogICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBXZSB3YW50IHRvIGRvIHRoaXMgdG8gY29uc2VydmF0aXZlbHkgZW5zdXJlIHRoYXQgd2Ug
cmVzY2FuIGFueSBjb2RlIGJsb2NrcyB0aGF0IGFyZQotICAgICAgICAgICAgLy8gcnVubmluZyBy
aWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAqYWZ0ZXIqIHdl
IG1hcmsgdGhlIGNvZGUgYmxvY2sKLSAgICAgICAgICAgIC8vIHNvIHRoYXQgd2Uga25vdyBmb3Ig
c3VyZSBpZiBpdCByZWFsbHkgbmVlZHMgYSBiYXJyaWVyLgotICAgICAgICAgICAgbV9jb2RlQmxv
Y2tzLT53cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmcodGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwotICAgICAgICB2aXNpdFNtYWxs
U3RyaW5ncygpOwotICAgICAgICB2aXNpdFByb3RlY3RlZE9iamVjdHMoaGVhcFJvb3RWaXNpdG9y
KTsKLSAgICAgICAgdmlzaXRBcmd1bWVudEJ1ZmZlcnMoaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAg
ICAgdmlzaXRFeGNlcHRpb24oaGVhcFJvb3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTdHJvbmdI
YW5kbGVzKGhlYXBSb290VmlzaXRvcik7Ci0gICAgICAgIHZpc2l0SGFuZGxlU3RhY2soaGVhcFJv
b3RWaXNpdG9yKTsKLSAgICAgICAgdmlzaXRTYW1wbGluZ1Byb2ZpbGVyKCk7Ci0gICAgICAgIHZp
c2l0VHlwZVByb2ZpbGVyKCk7Ci0gICAgICAgIHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgICAg
ICB0cmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMoKTsKLSAgICAgICAgbV9zbG90Vmlz
aXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAgICB9Ci0g
ICAgCi0gICAgVGltaW5nU2NvcGUgcG9zdENvbnZlcmdlbmNlVGltaW5nU2NvcGUoKnRoaXMsICJI
ZWFwOjptYXJrUm9vdHMgYWZ0ZXIgY29udmVyZ2VuY2UiKTsKLQotICAgIC8vIFdlYWsgcmVmZXJl
bmNlcyBtdXN0IGJlIG1hcmtlZCBsYXN0IGJlY2F1c2UgdGhlaXIgbGl2ZW5lc3MgZGVwZW5kcyBv
bgotICAgIC8vIHRoZSBsaXZlbmVzcyBvZiB0aGUgcmVzdCBvZiB0aGUgb2JqZWN0IGdyYXBoLgot
ICAgIHZpc2l0V2Vha0hhbmRsZXMoaGVhcFJvb3RWaXNpdG9yKTsKKyAgICAgICAgaWYgKG1fdm0t
PnNtYWxsU3RyaW5ncy5uZWVkc1RvQmVWaXNpdGVkKCptX2NvbGxlY3Rpb25TY29wZSkpCisgICAg
ICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVuY2VzKCptX2NvbGxl
Y3RvclNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIAorICAgICAgICBmb3IgKGF1dG8mIHBhaXIg
OiBtX3Byb3RlY3RlZFZhbHVlcykKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgm
cGFpci5rZXkpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChtX21hcmtMaXN0U2V0ICYmIG1f
bWFya0xpc3RTZXQtPnNpemUoKSkKKyAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyOjpt
YXJrTGlzdHMoaGVhcFJvb3RWaXNpdG9yLCAqbV9tYXJrTGlzdFNldCk7CisgICAgICAgICAgICAK
KyAgICAgICAgaWYgKG1fdm0tPmV4Y2VwdGlvbigpKQorICAgICAgICAgICAgaGVhcFJvb3RWaXNp
dG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2VwdGlvbigpKTsKKyAgICAgICAgaWYgKG1fdm0t
Pmxhc3RFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdChtX3Zt
LT5hZGRyZXNzT2ZMYXN0RXhjZXB0aW9uKCkpOworICAgICAgICAgICAgCisgICAgICAgIG1faGFu
ZGxlU2V0LnZpc2l0U3Ryb25nSGFuZGxlcyhoZWFwUm9vdFZpc2l0b3IpOworICAgICAgICBtX2hh
bmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CisKKyNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCisgICAgICAgIGlmIChTYW1wbGluZ1Byb2ZpbGVyKiBzYW1wbGluZ1Byb2ZpbGVy
ID0gbV92bS0+c2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihzYW1wbGluZ1Byb2ZpbGVyLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgc2FtcGxpbmdQ
cm9maWxlci0+cHJvY2Vzc1VudmVyaWZpZWRTdGFja1RyYWNlcygpOworICAgICAgICAgICAgc2Ft
cGxpbmdQcm9maWxlci0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIlNhbXBsaW5nIFByb2ZpbGVyIGRhdGE6XG4iLCAqbV9jb2xsZWN0b3JT
bG90VmlzaXRvcik7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJPRklM
RVIpCisgICAgICAgIAorICAgICAgICBpZiAobV92bS0+dHlwZVByb2ZpbGVyKCkpCisgICAgICAg
ICAgICBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKS0+dmlzaXQoKm1fY29sbGVjdG9yU2xvdFZpc2l0
b3IpOworICAgICAgICAgICAgICAgIAorICAgICAgICBtX3ZtLT5zaGFkb3dDaGlja2VuKCkudmlz
aXRDaGlsZHJlbigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIG1faml0U3R1YlJvdXRpbmVzLT50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcygqbV9jb2xs
ZWN0b3JTbG90VmlzaXRvcik7CisKKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+bWVy
Z2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisgICAgICAgIGZvciAoYXV0byYgcGFyYWxsZWxW
aXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgICAgIHBhcmFsbGVsVmlz
aXRvci0+bWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgbV9vYmplY3RT
cGFjZS52aXNpdFdlYWtTZXRzKGhlYXBSb290VmlzaXRvcik7CisgICAgICAgIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpOworICAgICAgICB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNl
cygpOworICAgICAgICBERkc6Om1hcmtDb2RlQmxvY2tzKCptX3ZtLCAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcik7CisgICAgICAgIGJvb2wgc2hvdWxkVGVybWluYXRlID0gbV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+aXNFbXB0eSgpICYmIG1fbXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOworICAg
ICAgICAKKyAgICAgICAgLy8gV2Ugd2FudCB0byBkbyB0aGlzIHRvIGNvbnNlcnZhdGl2ZWx5IGVu
c3VyZSB0aGF0IHdlIHJlc2NhbiBhbnkgY29kZSBibG9ja3MgdGhhdCBhcmUKKyAgICAgICAgLy8g
cnVubmluZyByaWdodCBub3cuIEhvd2V2ZXIsIHdlIG5lZWQgdG8gYmUgc3VyZSB0byBkbyBpdCAq
YWZ0ZXIqIHdlIG1hcmsgdGhlIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBrbm93
IGZvciBzdXJlIGlmIGl0IHJlYWxseSBuZWVkcyBhIGJhcnJpZXIuIEFsc28sIHRoaXMgaGFzIHRv
IGhhcHBlbiBhZnRlciB0aGUKKyAgICAgICAgLy8gZml4cG9pbnQgY2hlY2sgLSBvdGhlcndpc2Ug
d2UgbWlnaHQgbG9vcCBmb3JldmVyLiBJbmNpZGVudGFsbHksIHdlIGFsc28gd2FudCB0byBkbyB0
aGlzCisgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgR0Mgc28gdGhhdCBhbnl0aGluZyBhdCB0aGUg
ZW5kIG9mIHRoZSBsYXN0IEdDIGdldHMgYmFycmllcmVkIGluIHRoZSBuZXh0CisgICAgICAgIC8v
IEdDLgorICAgICAgICBtX2NvZGVCbG9ja3MtPndyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGlu
Zyh0aGlzKTsKKyAgICAgICAgREZHOjpyZW1lbWJlckNvZGVCbG9ja3MoKm1fdm0pOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNob3VsZFRlcm1pbmF0ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhlIFNsb3RWaXNpdG9yJ3MgbWFyayBzdGFja3MgYXJlIGFjY2Vz
c2VkIGJ5IHRoZSBjb2xsZWN0b3IgdGhyZWFkIChpLmUuIHRoaXMgdGhyZWFkKQorICAgICAgICAv
LyB3aXRob3V0IGxvY2tzLiBUaGF0J3Mgd2h5IHdlIGRvdWJsZS1idWZmZXIuCisgICAgICAgIG1f
bXV0YXRvck1hcmtTdGFjay0+dHJhbnNmZXJUbyhtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5tdXRh
dG9yTWFya1N0YWNrKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkg
PT0gR0NMb2dnaW5nOjpWZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBXZWFrIEhh
bmRsZXM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgIAorICAgICAgICBp
ZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2cobV9jb2xsZWN0b3JTbG90
VmlzaXRvci0+Y29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPm11dGF0b3JNYXJrU3RhY2soKS5zaXplKCksICIgIik7CisKKyAgICAgICAgewor
ICAgICAgICAgICAgVGltaW5nU2NvcGUgdHJhY2VUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50IHRyYWNpbmciKTsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIg
ZW5hYmxlcigqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CisgICAgICAgICAgICBtX2NvbGxlY3Rv
clNsb3RWaXNpdG9yLT5kb25hdGVBbmREcmFpbih0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAg
U2xvdFZpc2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IGRyYWluUmVzdWx0ID0KKyAgICAgICAgICAg
ICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6
Ok1hc3RlckRyYWluLCB0aW1lVG9SZXN1bWUpOworICAgICAgICAgICAgaWYgKGRyYWluUmVzdWx0
ICE9IFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdDo6RG9uZSkgeworICAgICAgICAgICAg
ICAgIFJlc3VtZVRoZVdvcmxkU2NvcGUgcmVzdW1lVGhlV29ybGRTY29wZSgqdGhpcyk7CisgICAg
ICAgICAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+ZG9uYXRlQW5kRHJhaW4oKTsKKyAg
ICAgICAgICAgICAgICBtX2NvbGxlY3RvclNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xv
dFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTW9ub3RvbmljVGltZSB0aW1lT2ZTdG9wID0gTW9ub3RvbmljVGltZTo6bm93
KCk7CisgICAgICAgIGNvbmN1cnJlbnRUaW1lID0gdGltZU9mU3RvcCAtIHRpbWVUb1Jlc3VtZTsK
KyAgICAgICAgdG9wT2ZMb29wVGltZSA9IHRpbWVPZlN0b3A7CisgICAgfQogCiAgICAgewogICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtpbmdNdXRleCk7CkBAIC01NjMs
NyArNjQ3LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lKQogCiB2
b2lkIEhlYXA6OmdhdGhlclN0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJvb3RzKQogewot
ICAgIG1faml0U3R1YlJvdXRpbmVzLT5jbGVhck1hcmtzKCk7CiAgICAgbV9tYWNoaW5lVGhyZWFk
cy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9j
b2RlQmxvY2tzKTsKIH0KIApAQCAtNTkwLDQ5ICs2NzMsMjggQEAgdm9pZCBIZWFwOjpiZWdpbk1h
cmtpbmcoKQogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6YmVnaW5N
YXJraW5nIik7CiAgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6
RnVsbCkKICAgICAgICAgbV9jb2RlQmxvY2tzLT5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24o
KTsKLSAgICAKLSAgICB7Ci0gICAgICAgIFRpbWluZ1Njb3BlIGNsZWFyTWFya3NUaW1pbmdTY29w
ZSgqdGhpcywgIm1fb2JqZWN0U3BhY2UuYmVnaW5NYXJraW5nIik7Ci0gICAgICAgIG1fb2JqZWN0
U3BhY2UuYmVnaW5NYXJraW5nKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0RXh0ZXJu
YWxSZW1lbWJlcmVkU2V0KCkKLXsKLSNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAotICAgIHNjYW5F
eHRlcm5hbFJlbWVtYmVyZWRTZXQoKm1fdm0sIG1fc2xvdFZpc2l0b3IpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSGVhcDo6dmlzaXRTbWFsbFN0cmluZ3MoKQotewotICAgIGlmICghbV92bS0+c21hbGxT
dHJpbmdzLm5lZWRzVG9CZVZpc2l0ZWQoKm1fY29sbGVjdGlvblNjb3BlKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNlcyhtX3Ns
b3RWaXNpdG9yKTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlNtYWxsIHN0cmluZ3M6XG4iLCBtX3Nsb3RWaXNpdG9yKTsK
LSAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CisgICAgbV9qaXRTdHViUm91dGlu
ZXMtPmNsZWFyTWFya3MoKTsKKyAgICBtX29iamVjdFNwYWNlLmJlZ2luTWFya2luZygpOworICAg
IG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gdHJ1ZTsKKyAgICBtX2JhcnJpZXJUaHJlc2hvbGQg
PSB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQ7CiB9CiAKIHZvaWQgSGVhcDo6dmlzaXRDb25zZXJ2YXRp
dmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgcm9vdHMpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5h
cHBlbmQocm9vdHMpOworICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmFwcGVuZChyb290cyk7
CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2coIkNvbnNlcnZhdGl2ZSBSb290czpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0g
ICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOworICAgICAgICBkYXRhTG9nKCJDb25z
ZXJ2YXRpdmUgUm9vdHM6XG4iLCAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcik7CiB9CiAKIHZvaWQg
SGVhcDo6dmlzaXRDb21waWxlcldvcmtsaXN0V2Vha1JlZmVyZW5jZXMoKQogewogI2lmIEVOQUJM
RShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMo
KTsgaS0tOykKLSAgICAgICAgREZHOjpleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXgoaSkudmlzaXRX
ZWFrUmVmZXJlbmNlcyhtX3Nsb3RWaXNpdG9yKTsKKyAgICAgICAgREZHOjpleGlzdGluZ1dvcmts
aXN0Rm9ySW5kZXgoaSkudmlzaXRXZWFrUmVmZXJlbmNlcygqbV9jb2xsZWN0b3JTbG90VmlzaXRv
cik7CiAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIkRGRyBXb3JrbGlzdHM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKKyAgICAg
ICAgZGF0YUxvZygiREZHIFdvcmtsaXN0czpcbiIsICptX2NvbGxlY3RvclNsb3RWaXNpdG9yKTsK
ICNlbmRpZgogfQogCkBAIC03MDUsMTMyICs3NjcsMTAgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFk
SGVhcFNuYXBzaG90Tm9kZXMoSAogICAgIH0KIH0KIAotdm9pZCBIZWFwOjp2aXNpdFByb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFwUm9vdFZpc2l0b3IpCi17Ci0gICAgZm9yIChh
dXRvJiBwYWlyIDogbV9wcm90ZWN0ZWRWYWx1ZXMpCi0gICAgICAgIGhlYXBSb290VmlzaXRvci52
aXNpdCgmcGFpci5rZXkpOwotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5n
OjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJQcm90ZWN0ZWQgT2JqZWN0czpcbiIsIG1fc2xv
dFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotfQotCi12
b2lkIEhlYXA6OnZpc2l0QXJndW1lbnRCdWZmZXJzKEhlYXBSb290VmlzaXRvciYgdmlzaXRvcikK
LXsKLSAgICBpZiAoIW1fbWFya0xpc3RTZXQgfHwgIW1fbWFya0xpc3RTZXQtPnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXI6Om1hcmtMaXN0cyh2aXNp
dG9yLCAqbV9tYXJrTGlzdFNldCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xv
Z2dpbmc6OlZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IEJ1ZmZlcnM6XG4iLCBt
X3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0K
LQotdm9pZCBIZWFwOjp2aXNpdEV4Y2VwdGlvbihIZWFwUm9vdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgaWYgKCFtX3ZtLT5leGNlcHRpb24oKSAmJiAhbV92bS0+bGFzdEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkV4Y2Vw
dGlvbigpKTsKLSAgICB2aXNpdG9yLnZpc2l0KG1fdm0tPmFkZHJlc3NPZkxhc3RFeGNlcHRpb24o
KSk7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJvc2UpCi0g
ICAgICAgIGRhdGFMb2coIkV4Y2VwdGlvbnM6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1f
c2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFN0cm9u
Z0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIG1faGFuZGxlU2V0LnZp
c2l0U3Ryb25nSGFuZGxlcyh2aXNpdG9yKTsKLQotICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09
IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZygiU3Ryb25nIEhhbmRsZXM6XG4i
LCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsK
LX0KLQotdm9pZCBIZWFwOjp2aXNpdEhhbmRsZVN0YWNrKEhlYXBSb290VmlzaXRvciYgdmlzaXRv
cikKLXsKLSAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KHZpc2l0b3IpOwotCi0gICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJIYW5k
bGUgU3RhY2s6XG4iLCBtX3Nsb3RWaXNpdG9yKTsKLQotICAgIG1fc2xvdFZpc2l0b3IuZG9uYXRl
QW5kRHJhaW4oKTsKLX0KLQotdm9pZCBIZWFwOjp2aXNpdFNhbXBsaW5nUHJvZmlsZXIoKQotewot
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKLSAgICBpZiAoU2FtcGxpbmdQcm9maWxlciog
c2FtcGxpbmdQcm9maWxlciA9IG1fdm0tPnNhbXBsaW5nUHJvZmlsZXIoKSkgewotICAgICAgICBB
U1NFUlQoc2FtcGxpbmdQcm9maWxlci0+Z2V0TG9jaygpLmlzTG9ja2VkKCkpOwotICAgICAgICBz
YW1wbGluZ1Byb2ZpbGVyLT52aXNpdChtX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkgPT0gR0NMb2dnaW5nOjpWZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygi
U2FtcGxpbmcgUHJvZmlsZXIgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgICAgIG1f
c2xvdFZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKLSAgICAgICAgc2FtcGxpbmdQcm9maWxlci0+
Z2V0TG9jaygpLnVubG9jaygpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoU0FNUExJTkdfUFJP
RklMRVIpCi19Ci0KLXZvaWQgSGVhcDo6dmlzaXRUeXBlUHJvZmlsZXIoKQotewotICAgIGlmICh2
bSgpLT50eXBlUHJvZmlsZXIoKSkgewotICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+
dmlzaXQobV9zbG90VmlzaXRvcik7Ci0gICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdD
TG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIlR5cGUgUHJvZmlsZXIgdmlz
aXQgZGF0YTpcbiIsIG1fc2xvdFZpc2l0b3IpOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmRvbmF0
ZUFuZERyYWluKCk7Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnZpc2l0U2hhZG93Q2hpY2tlbigp
Ci17Ci0gICAgbV92bS0+c2hhZG93Q2hpY2tlbigpLnZpc2l0Q2hpbGRyZW4obV9zbG90VmlzaXRv
cik7Ci19Ci0KLXZvaWQgSGVhcDo6dHJhY2VDb2RlQmxvY2tzQW5kSklUU3R1YlJvdXRpbmVzKCkK
LXsKLSAgICBtX2ppdFN0dWJSb3V0aW5lcy0+dHJhY2VNYXJrZWRTdHViUm91dGluZXMobV9zbG90
VmlzaXRvcik7Ci0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dpbmc6OlZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIkNvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lczpc
biIsIG1fc2xvdFZpc2l0b3IpOwotCi0gICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigp
OwotfQotCi12b2lkIEhlYXA6OnZpc2l0V2Vha0hhbmRsZXMoSGVhcFJvb3RWaXNpdG9yJiB2aXNp
dG9yKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAiSGVhcDo6dmlzaXRX
ZWFrSGFuZGxlcyIpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCp0aGlzLCAibV9vYmplY3RTcGFjZS52aXNpdFdlYWtT
ZXRzIik7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLnZpc2l0V2Vha1NldHModmlzaXRvcik7
Ci0gICAgICAgIH0KLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIHZp
c2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7Ci0gICAgICAgIGlmIChtX3Nsb3RW
aXNpdG9yLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChPcHRp
b25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IkxpdmUgV2VhayBIYW5kbGVzOlxuIiwgbV9zbG90VmlzaXRvcik7Ci0KLSAgICAgICAgewotICAg
ICAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKG1fc2xvdFZpc2l0b3IpOwotICAg
ICAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwotICAgICAgICAgICAgbV9z
bG90VmlzaXRvci5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6Ok1hc3RlckRyYWluKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RDb3VudHMoZG91Ymxl
IGdjU3RhcnRUaW1lKQogewogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6
VmVyYm9zZSkgewotICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fc2xvdFZpc2l0b3Iudmlz
aXRDb3VudCgpOworICAgICAgICBzaXplX3QgdmlzaXRDb3VudCA9IG1fY29sbGVjdG9yU2xvdFZp
c2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICAgICAgdmlzaXRDb3VudCArPSB0aHJlYWRWaXNpdENv
dW50KCk7CiAgICAgICAgIGRhdGFMb2dGKCJcbk51bWJlciBvZiBsaXZlIE9iamVjdHMgYWZ0ZXIg
R0MgJWx1LCB0b29rICUuNmYgc2Vjc1xuIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmlz
aXRDb3VudCksIFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgLSBnY1N0YXJ0VGlt
ZSk7CiAgICAgfQpAQCAtODM4LDIyICs3NzgsMjcgQEAgdm9pZCBIZWFwOjp1cGRhdGVPYmplY3RD
b3VudHMoZG91YmxlIGdjUwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpCiAgICAgICAgIG1fdG90YWxCeXRlc1Zpc2l0ZWQgPSAwOwogCi0gICAgbV90
b3RhbEJ5dGVzVmlzaXRlZFRoaXNDeWNsZSA9IG1fc2xvdFZpc2l0b3IuYnl0ZXNWaXNpdGVkKCkg
KyB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKKyAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkVGhpc0N5Y2xl
ID0KKyAgICAgICAgbV9jb2xsZWN0b3JTbG90VmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCkgKworICAg
ICAgICB0aHJlYWRCeXRlc1Zpc2l0ZWQoKTsKICAgICAKICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVk
ICs9IG1fdG90YWxCeXRlc1Zpc2l0ZWRUaGlzQ3ljbGU7CiB9CiAKIHZvaWQgSGVhcDo6ZW5kTWFy
a2luZygpCiB7Ci0gICAgbV9zbG90VmlzaXRvci5yZXNldCgpOworICAgIG1fY29sbGVjdG9yU2xv
dFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1f
cGFyYWxsZWxTbG90VmlzaXRvcnMpCiAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsK
IAotICAgIEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkpOworICAgIFJFTEVB
U0VfQVNTRVJUKG1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpKTsKICAgICBtX3dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogICAgIAogICAgIG1fb2JqZWN0U3Bh
Y2UuZW5kTWFya2luZygpOworICAgIG1fbXV0YXRvclNob3VsZEJlRmVuY2VkID0gT3B0aW9uczo6
Zm9yY2VGZW5jZWRCYXJyaWVyKCk7CisgICAgbV9iYXJyaWVyVGhyZXNob2xkID0gT3B0aW9uczo6
Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVz
aG9sZDsKIH0KIAogc2l6ZV90IEhlYXA6Om9iamVjdENvdW50KCkKQEAgLTk4OCwxNCArOTMzLDIw
IEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKIHsKICAgICBBU1NF
UlQoY2VsbCk7CiAgICAgQVNTRVJUKCFPcHRpb25zOjp1c2VDb25jdXJyZW50SklUKCkgfHwgIWlz
Q29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKGNlbGwtPmNlbGxTdGF0ZSgpID09IENl
bGxTdGF0ZTo6QW50aHJhY2l0ZU9yQmxhY2spOwotICAgIC8vIEluZGljYXRlIHRoYXQgdGhpcyBv
YmplY3QgaXMgZ3JleSBhbmQgdGhhdCBpdCdzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIC8v
IC0gQSByZS1ncmV5ZWQgb2JqZWN0IGR1cmluZyBhIGNvbmN1cnJlbnQgY29sbGVjdGlvbi4KLSAg
ICAvLyAtIEFuIG9sZCByZW1lbWJlcmVkIG9iamVjdC4KLSAgICAvLyAiT2xkR3JleSIgZG9lc24n
dCB0ZWxsIHVzIHdoaWNoIG9mIHRoZXNlIHRoaW5ncyBpcyB0cnVlLCBidXQgd2UgdXN1YWxseSB0
cmVhdCB0aGUgdHdvIGNhc2VzIHRoZQotICAgIC8vIHNhbWUuCi0gICAgY2VsbC0+c2V0Q2VsbFN0
YXRlKENlbGxTdGF0ZTo6T2xkR3JleSk7Ci0gICAgbV9zbG90VmlzaXRvci5hcHBlbmRUb01hcmtT
dGFjayhjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpKTsKKyAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
Q29uY3VycmVudGx5KGNlbGwpKSB7CisgICAgICAgIC8vIER1cmluZyBhIGZ1bGwgY29sbGVjdGlv
biBhIHN0b3JlIGludG8gYW4gdW5tYXJrZWQgb2JqZWN0IHRoYXQgaGFkIHN1cml2aXZlZCBwYXN0
CisgICAgICAgIC8vIGNvbGxlY3Rpb25zIHdpbGwgbWFuaWZlc3QgYXMgYSBzdG9yZSB0byBhbiB1
bm1hcmtlZCBibGFjayBvYmplY3QuIElmIHRoZSBvYmplY3QgZ2V0cworICAgICAgICAvLyBtYXJr
ZWQgYXQgc29tZSB0aW1lIGFmdGVyIHRoaXMgdGhlbiBpdCB3aWxsIGdvIGRvd24gdGhlIG5vcm1h
bCBtYXJraW5nIHBhdGguIFdlIGNhbgorICAgICAgICAvLyBzYWZlbHkgaWdub3JlIHRoZXNlIHN0
b3Jlcy4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJdCBjb3VsZCBiZSB0aGF0IHRo
ZSBvYmplY3Qgd2FzICpqdXN0KiBtYXJrZWQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29sbGVjdG9y
IG1heSBzZXQgdGhlCisgICAgLy8gc3RhdGUgdG8gR3JleSBhbmQgdGhlbiB0byBBbnRocmFjaXRl
T3JCbGFjayBhdCBhbnkgdGltZS4gSXQncyBPSyBmb3IgdXMgdG8gcmFjZSB3aXRoIHRoZQorICAg
IC8vIGNvbGxlY3RvciBoZXJlLiBJZiB3ZSB3aW4gdGhlbiB0aGlzIGlzIGFjY3VyYXRlIGJlY2F1
c2UgdGhlIG9iamVjdCBfd2lsbF8gZ2V0IHNjYW5uZWQgYWdhaW4uCisgICAgLy8gSWYgd2UgbG9z
ZSB0aGVuIHNvbWVvbmUgZWxzZSB3aWxsIGJhcnJpZXIgdGhlIG9iamVjdCBhZ2Fpbi4gVGhhdCB3
b3VsZCBiZSB1bmZvcnR1bmF0ZSBidXQgbm90CisgICAgLy8gdGhlIGVuZCBvZiB0aGUgd29ybGQu
CisgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6R3JleSk7CisgICAgbV9tdXRhdG9y
TWFya1N0YWNrLT5hcHBlbmQoY2VsbCk7CiB9CiAKIHZvaWQgSGVhcDo6Y29sbGVjdEFsbEdhcmJh
Z2UoKQpAQCAtMTA5NCwyNCArMTA0NSwxNCBAQCB2b2lkIEhlYXA6OmNvbGxlY3RJblRocmVhZCgp
CiAgICAgCiAgICAgc3RvcFRoZVdvcmxkKCk7CiAKLSAgICBkb3VibGUgYmVmb3JlID0gMDsKKyAg
ICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAg
ICAgICBkYXRhTG9nKCJbR0M6ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAiIGtiICIpOwotICAgICAg
ICBiZWZvcmUgPSBjdXJyZW50VGltZU1TKCk7CisgICAgICAgIGRhdGFMb2coIltHQzogU1RBUlQg
IiwgY2FwYWNpdHkoKSAvIDEwMjQsICIga2IgIik7CisgICAgICAgIGJlZm9yZSA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogICAgIH0KICAgICAKICAgICBkb3VibGUgZ2NTdGFydFRpbWU7CiAgICAg
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxl
KCp0aGlzKTsKLSAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5jb21wbGV0ZUFs
bEZvclZNKCptX3ZtKSkKLSAgICAgICAgICAgIHNldEdDRGlkSklUKCk7Ci0gICAgfQotI2VuZGlm
IC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm0oKS0+c2hhZG93Q2hpY2tlbigpLnVwZGF0ZSgq
dm0oKSwgdm0oKS0+dG9wQ2FsbEZyYW1lKTsKLSAgICAKICAgICBBU1NFUlQobV9pc1NhZmVUb0Nv
bGxlY3QpOwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewogICAgICAgICBkYXRhTG9nKCJD
b2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgbV9jb2xsZWN0aW9uU2Nv
cGUsICJcbiIpOwpAQCAtMTEzMSwxMiArMTA3Miw5IEBAIHZvaWQgSGVhcDo6Y29sbGVjdEluVGhy
ZWFkKCkKICAgICAgICAgbV92ZXJpZmllci0+Z2F0aGVyTGl2ZU9iamVjdHMoSGVhcFZlcmlmaWVy
OjpQaGFzZTo6QmVmb3JlTWFya2luZyk7CiAgICAgfQogICAgICAgICAKLSAgICBmbHVzaE9sZFN0
cnVjdHVyZUlEVGFibGVzKCk7Ci0gICAgc3RvcEFsbG9jYXRpb24oKTsKICAgICBwcmVwYXJlRm9y
TWFya2luZygpOwotICAgIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKCk7CiAgICAgICAgIAotICAg
IG1hcmtSb290cyhnY1N0YXJ0VGltZSk7CisgICAgbWFya1RvRml4cG9pbnQoZ2NTdGFydFRpbWUp
OwogICAgICAgICAKICAgICBpZiAobV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5n
YXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwpAQCAt
MTE3Myw4ICsxMTExLDggQEAgdm9pZCBIZWFwOjpjb2xsZWN0SW5UaHJlYWQoKQogICAgIH0KICAg
ICAKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBkb3VibGUgYWZ0ZXIgPSBj
dXJyZW50VGltZU1TKCk7Ci0gICAgICAgIGRhdGFMb2coYWZ0ZXIgLSBiZWZvcmUsICIgbXNdXG4i
KTsKKyAgICAgICAgTW9ub3RvbmljVGltZSBhZnRlciA9IE1vbm90b25pY1RpbWU6Om5vdygpOwor
ICAgICAgICBkYXRhTG9nKChhZnRlciAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpLCAiIG1z
LCBjeWNsZSAiLCAoYWZ0ZXIgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAiIG1zIEVORF1cbiIp
OwogICAgIH0KICAgICAKICAgICB7CkBAIC0xMTk2LDEwICsxMTM0LDMzIEBAIHZvaWQgSGVhcDo6
c3RvcFRoZVdvcmxkKCkKICAgICBzdG9wVGhlTXV0YXRvcigpOwogICAgIHN1c3BlbmRDb21waWxl
clRocmVhZHMoKTsKICAgICBtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVk
ID0gdHJ1ZTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgeworICAgICAgICBEZWZlckdDRm9yQVdo
aWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2UoKS0+
Y29tcGxldGVBbGxGb3JWTSgqbV92bSkpCisgICAgICAgICAgICBzZXRHQ0RpZEpJVCgpOworICAg
IH0KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorICAgIAorICAgIHZtKCktPnNoYWRvd0NoaWNrZW4o
KS51cGRhdGUoKnZtKCksIHZtKCktPnRvcENhbGxGcmFtZSk7CisgICAgCisgICAgZmx1c2hXcml0
ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICBtX3N0cnVjdHVyZUlEVGFibGUuZmx1c2hPbGRUYWJsZXMo
KTsKKyAgICBtX29iamVjdFNwYWNlLnN0b3BBbGxvY2F0aW5nKCk7CisgICAgCisgICAgbV9zdG9w
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCiB2b2lkIEhlYXA6OnJlc3VtZVRoZVdv
cmxkKCkKIHsKKyAgICAvLyBDYWxsaW5nIHJlc3VtZUFsbG9jYXRpbmcgZG9lcyB0aGUgUmlnaHQg
VGhpbmcgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhpcyBpcyB0aGUgZW5kIG9mIGEKKyAgICAvLyBj
b2xsZWN0aW9uIGN5Y2xlIG9yIHRoaXMgaXMganVzdCBhIGNvbmN1cnJlbnQgcGhhc2Ugd2l0aGlu
IGEgY29sbGVjdGlvbiBjeWNsZToKKyAgICAvLyAtIEF0IGVuZCBvZiBjb2xsZWN0aW9uIGN5Y2xl
OiBpdCdzIGEgbm8tb3AgYmVjYXVzZSBwcmVwYXJlRm9yQWxsb2NhdGlvbiBhbHJlYWR5IGNsZWFy
ZWQgdGhlCisgICAgLy8gICBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICAvLyAtIER1cmluZyBjb2xs
ZWN0aW9uIGN5Y2xlOiBpdCByZWluc3RhdGVzIHRoZSBsYXN0IGFjdGl2ZSBibG9jay4KKyAgICBt
X29iamVjdFNwYWNlLnJlc3VtZUFsbG9jYXRpbmcoKTsKKyAgICAKICAgICBSRUxFQVNFX0FTU0VS
VChtX2NvbGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkKTsKICAgICBtX2NvbGxl
Y3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkID0gZmFsc2U7CiAgICAgcmVzdW1lQ29t
cGlsZXJUaHJlYWRzKCk7CkBAIC0xNDA4LDIzICsxMzY5LDE4IEBAIHZvaWQgSGVhcDo6aGFuZGxl
TmVlZEZpbmFsaXplKCkKIAogdm9pZCBIZWFwOjpzZXRHQ0RpZEpJVCgpCiB7Ci0gICAgZm9yICg7
OykgewotICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgc3RvcHBlZEJpdCk7Ci0gICAgICAgIGlm
IChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgb2xkU3RhdGUgfCBn
Y0RpZEpJVEJpdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fd29ybGRTdGF0
ZS50cmFuc2FjdGlvbigKKyAgICAgICAgWyZdICh1bnNpZ25lZCYgc3RhdGUpIHsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlICYgc3RvcHBlZEJpdCk7CisgICAgICAgICAgICBzdGF0
ZSB8PSBnY0RpZEpJVEJpdDsKKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgSGVhcDo6c2V0TmVlZEZp
bmFsaXplKCkKIHsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0g
bV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSB8IG5lZWRGaW5hbGl6ZUJpdCkpIHsKLSAgICAg
ICAgICAgIG1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29vbigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZU9y
KG5lZWRGaW5hbGl6ZUJpdCk7CisgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX3dvcmxkU3Rh
dGUpOworICAgIG1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29vbigpOwogfQogCiB2
b2lkIEhlYXA6OndhaXRXaGlsZU5lZWRGaW5hbGl6ZSgpCkBAIC0xNDQxLDIzICsxMzk3LDE0IEBA
IHZvaWQgSGVhcDo6d2FpdFdoaWxlTmVlZEZpbmFsaXplKCkKICAgICB9CiB9CiAKLXVuc2lnbmVk
IEhlYXA6OnNldE11dGF0b3JXYWl0aW5nKCkKK3ZvaWQgSGVhcDo6c2V0TXV0YXRvcldhaXRpbmco
KQogewotICAgIGZvciAoOzspIHsKLSAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxk
U3RhdGUubG9hZCgpOwotICAgICAgICB1bnNpZ25lZCBuZXdTdGF0ZSA9IG9sZFN0YXRlIHwgbXV0
YXRvcldhaXRpbmdCaXQ7Ci0gICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdl
V2VhayhvbGRTdGF0ZSwgbmV3U3RhdGUpKQotICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwot
ICAgIH0KKyAgICBtX3dvcmxkU3RhdGUuZXhjaGFuZ2VPcihtdXRhdG9yV2FpdGluZ0JpdCk7CiB9
CiAKIHZvaWQgSGVhcDo6Y2xlYXJNdXRhdG9yV2FpdGluZygpCiB7Ci0gICAgZm9yICg7Oykgewot
ICAgICAgICB1bnNpZ25lZCBvbGRTdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2FkKCk7Ci0gICAgICAg
IGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgb2xkU3RhdGUg
JiB+bXV0YXRvcldhaXRpbmdCaXQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBt
X3dvcmxkU3RhdGUuZXhjaGFuZ2VBbmQofm11dGF0b3JXYWl0aW5nQml0KTsKIH0KIAogdm9pZCBI
ZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMb2NrSG9sZGVyJikKQEAgLTE0NjksMTAg
KzE0MTYsMTUgQEAgdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25zdCBMbwogCiB2
b2lkIEhlYXA6OmZpbmFsaXplKCkKIHsKLSAgICBIZWxwaW5nR0NTY29wZSBoZWxwaW5nR0NTY29w
ZSgqdGhpcyk7Ci0gICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKLSAgICBkZWxldGVT
b3VyY2VQcm92aWRlckNhY2hlcygpOwotICAgIHN3ZWVwTGFyZ2VBbGxvY2F0aW9ucygpOworICAg
IHsKKyAgICAgICAgSGVscGluZ0dDU2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOworICAgICAg
ICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOworICAgICAgICBkZWxldGVTb3VyY2VQcm92
aWRlckNhY2hlcygpOworICAgICAgICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKE9wdGlvbnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29s
bGVjdEFzeW5jKCk7CiAgICAgaWYgKEhhc093blByb3BlcnR5Q2FjaGUqIGNhY2hlID0gdm0oKS0+
aGFzT3duUHJvcGVydHlDYWNoZSgpKQogICAgICAgICBjYWNoZS0+Y2xlYXIoKTsKIH0KQEAgLTE1
NTQsMjMgKzE1MDYsOSBAQCB2b2lkIEhlYXA6OndpbGxTdGFydENvbGxlY3Rpb24oT3B0aW9uYWw8
CiAgICAgICAgIG9ic2VydmVyLT53aWxsR2FyYmFnZUNvbGxlY3QoKTsKIH0KIAotdm9pZCBIZWFw
OjpmbHVzaE9sZFN0cnVjdHVyZUlEVGFibGVzKCkKLXsKLSAgICBtX3N0cnVjdHVyZUlEVGFibGUu
Zmx1c2hPbGRUYWJsZXMoKTsKLX0KLQogdm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZl
cigpCiB7Ci0gICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxlY3Rpb25TY29wZTo6RWRl
bikgewotICAgICAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVzaCgqdGhpcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV93cml0ZUJhcnJpZXJCdWZmZXIucmVzZXQoKTsKLX0KLQot
dm9pZCBIZWFwOjpzdG9wQWxsb2NhdGlvbigpCi17Ci0gICAgbV9vYmplY3RTcGFjZS5zdG9wQWxs
b2NhdGluZygpOworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKIH0KIAog
dm9pZCBIZWFwOjpwcmVwYXJlRm9yTWFya2luZygpCkBAIC0xOTM3LDcgKzE4NzUsNyBAQCB2b2lk
IEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJbXBsKGNvbnN0IFNjCiAKIHZvaWQgSGVhcDo6d3JpdGVC
YXJyaWVyU2xvd1BhdGgoY29uc3QgSlNDZWxsKiBmcm9tKQogewotICAgIGlmIChVTkxJS0VMWShi
YXJyaWVyU2hvdWxkQmVGZW5jZWQoKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkobXV0YXRvclNob3Vs
ZEJlRmVuY2VkKCkpKSB7CiAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGJhcnJpZXJUaHJl
c2hvbGQgaXMgdGhlIHRhdXRvbG9naWNhbCB0aHJlc2hvbGQsIHNvIGZyb20gY291bGQgc3RpbGwg
YmUKICAgICAgICAgLy8gbm90IGJsYWNrLiBCdXQgd2UgY2FuJ3Qga25vdyBmb3Igc3VyZSB1bnRp
bCB3ZSBmaXJlIG9mZiBhIGZlbmNlLgogICAgICAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7CkBA
IC0xOTU0LDcgKzE4OTIsNyBAQCBib29sIEhlYXA6OmNhbkNvbGxlY3QoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChjb2xsZWN0aW9uU2NvcGUoKSB8fCBtdXRhdG9yU3RhdGUoKSA9PSBNdXRh
dG9yU3RhdGU6OkhlbHBpbmdHQykKKyAgICBpZiAobXV0YXRvclN0YXRlKCkgPT0gTXV0YXRvclN0
YXRlOjpIZWxwaW5nR0MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTE5NzYsMTIgKzE5MTQsOCBAQCBib29sIEhlYXA6OmlzQ3VycmVudFRocmVhZEJ1c3ko
KQogICAgIHJldHVybiBtYXlCZUdDVGhyZWFkKCkgfHwgbXV0YXRvclN0YXRlKCkgIT0gTXV0YXRv
clN0YXRlOjpSdW5uaW5nOwogfQogCi12b2lkIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChDZWxsU3RhdGUgb2xkU3RhdGUsIHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRy
YU1lbW9yeVZpc2l0ZWQoc2l6ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBk
b3VibGUtY291bnQgdGhlIGV4dHJhIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91
cyBjb2xsZWN0aW9ucy4KLSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNj
b3BlOjpFZGVuICYmIG9sZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgc2l6ZV90KiBjb3VudGVyID0gJm1fZXh0cmFNZW1vcnlTaXplOwogICAgIAog
ICAgIGZvciAoOzspIHsKQEAgLTE5OTIsMTIgKzE5MjYsOCBAQCB2b2lkIEhlYXA6OnJlcG9ydEV4
dHJhTWVtb3J5VmlzaXRlZChDZWxsCiB9CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12
b2lkIEhlYXA6OnJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUgb2xkU3RhdGUs
IHNpemVfdCBzaXplKQordm9pZCBIZWFwOjpyZXBvcnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6
ZV90IHNpemUpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBkb3VibGUtY291bnQgdGhlIGV4
dGVybmFsIG1lbW9yeSB0aGF0IHdhcyByZXBvcnRlZCBpbiBwcmV2aW91cyBjb2xsZWN0aW9ucy4K
LSAgICBpZiAoY29sbGVjdGlvblNjb3BlKCkgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuICYmIG9s
ZFN0YXRlID09IENlbGxTdGF0ZTo6T2xkR3JleSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2l6
ZV90KiBjb3VudGVyID0gJm1fZXh0ZXJuYWxNZW1vcnlTaXplOwogCiAgICAgZm9yICg7OykgewpA
QCAtMjA5MSw0ICsyMDIxLDExIEBAIHZvaWQgSGVhcDo6c2V0UnVuTG9vcChDRlJ1bkxvb3BSZWYg
cnVuTG8KIH0KICNlbmRpZiAvLyBVU0UoQ0YpCiAKK3ZvaWQgSGVhcDo6bm90aWZ5SXNTYWZlVG9D
b2xsZWN0KCkKK3sKKyAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IHRydWU7CisgICAgaWYgKE9wdGlv
bnM6OmNvbGxlY3RDb250aW51b3VzbHkoKSkKKyAgICAgICAgY29sbGVjdEFzeW5jKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFy
cmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2VsbFN0YXRlLmgiCiAjaW5jbHVkZSAiQ29sbGVjdGlv
blNjb3BlLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRl
ICJIYW5kbGVTZXQuaCIKQEAgLTM1LDcgKzM2LDYgQEAKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5o
IgogI2luY2x1ZGUgIk11dGF0b3JTdGF0ZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNs
dWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlEVGFibGUuaCIKICNpbmNs
dWRlICJUaW55Qmxvb21GaWx0ZXIuaCIKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVy
LmgiCkBAIC03MCw3ICs3MCw5IEBAIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogY2xhc3MgSlND
ZWxsOwogY2xhc3MgSlNWYWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKK2NsYXNz
IE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CitjbGFzcyBTbG90
VmlzaXRvcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwogY2xhc3MgVk07CiAKQEAgLTEy
OSw3ICsxMzEsOCBAQCBwdWJsaWM6CiAgICAgTWFya2VkU3BhY2UmIG9iamVjdFNwYWNlKCkgeyBy
ZXR1cm4gbV9vYmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBtYWNoaW5lVGhyZWFk
cygpIHsgcmV0dXJuIG1fbWFjaGluZVRocmVhZHM7IH0KIAotICAgIGNvbnN0IFNsb3RWaXNpdG9y
JiBzbG90VmlzaXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2xvdFZpc2l0b3I7IH0KKyAgICBTbG90
VmlzaXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90
VmlzaXRvcjsgfQorICAgIE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFya1N0YWNrKCkgeyByZXR1
cm4gKm1fbXV0YXRvck1hcmtTdGFjazsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgR0NBY3Rp
dml0eUNhbGxiYWNrKiBmdWxsQWN0aXZpdHlDYWxsYmFjaygpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEdDQWN0aXZpdHlDYWxsYmFjayogZWRlbkFjdGl2aXR5Q2FsbGJhY2soKTsKQEAgLTE2OCw3
ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRGaW5hbGl6
ZXIoSlNDZWxsKiwgRmluYWxpemVyKTsKICAgICB2b2lkIGFkZEV4ZWN1dGFibGUoRXhlY3V0YWJs
ZUJhc2UqKTsKIAotICAgIHZvaWQgbm90aWZ5SXNTYWZlVG9Db2xsZWN0KCkgeyBtX2lzU2FmZVRv
Q29sbGVjdCA9IHRydWU7IH0KKyAgICB2b2lkIG5vdGlmeUlzU2FmZVRvQ29sbGVjdCgpOwogICAg
IGJvb2wgaXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7
IH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29u
c3Q7CkBAIC0yMDMsMTEgKzIwNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gY2FsbCBib3RoIG9mIHRo
ZXNlIGZ1bmN0aW9uczogQ2FsbGluZyBvbmx5IG9uZSBtYXkgdHJpZ2dlciBjYXRhc3Ryb3BpYwog
ICAgIC8vIG1lbW9yeSBncm93dGguCiAgICAgdm9pZCByZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRl
ZChzaXplX3QpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVwb3J0RXh0cmFNZW1vcnlW
aXNpdGVkKENlbGxTdGF0ZSBvbGRTdGF0ZSwgc2l6ZV90KTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXplX3QpOwogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX1VTQUdFKQogICAgIC8vIFVzZSB0aGlzIEFQSSB0byByZXBvcnQgdGhlIHN1YnNldCBv
ZiBleHRyYSBtZW1vcnkgdGhhdCBsaXZlcyBvdXRzaWRlIHRoaXMgcHJvY2Vzcy4KLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIHJlcG9ydEV4dGVybmFsTWVtb3J5VmlzaXRlZChDZWxsU3RhdGUg
b2xkU3RhdGUsIHNpemVfdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRl
cm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKICAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlTaXpl
KCkgeyByZXR1cm4gbV9leHRlcm5hbE1lbW9yeVNpemU7IH0KICNlbmRpZgogCkBAIC0yODMsOCAr
Mjg2LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkQWxsb2NhdGVCbG9jayhzaXplX3QgY2FwYWNp
dHkpOwogICAgIHZvaWQgZGlkRnJlZUJsb2NrKHNpemVfdCBjYXBhY2l0eSk7CiAgICAgCi0gICAg
Ym9vbCBiYXJyaWVyU2hvdWxkQmVGZW5jZWQoKSBjb25zdCB7IHJldHVybiBtX2JhcnJpZXJTaG91
bGRCZUZlbmNlZDsgfQotICAgIGNvbnN0IGJvb2wqIGFkZHJlc3NPZkJhcnJpZXJTaG91bGRCZUZl
bmNlZCgpIGNvbnN0IHsgcmV0dXJuICZtX2JhcnJpZXJTaG91bGRCZUZlbmNlZDsgfQorICAgIGJv
b2wgbXV0YXRvclNob3VsZEJlRmVuY2VkKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU2hvdWxk
QmVGZW5jZWQ7IH0KKyAgICBjb25zdCBib29sKiBhZGRyZXNzT2ZNdXRhdG9yU2hvdWxkQmVGZW5j
ZWQoKSBjb25zdCB7IHJldHVybiAmbV9tdXRhdG9yU2hvdWxkQmVGZW5jZWQ7IH0KICAgICAKICAg
ICB1bnNpZ25lZCBiYXJyaWVyVGhyZXNob2xkKCkgY29uc3QgeyByZXR1cm4gbV9iYXJyaWVyVGhy
ZXNob2xkOyB9CiAgICAgY29uc3QgdW5zaWduZWQqIGFkZHJlc3NPZkJhcnJpZXJUaHJlc2hvbGQo
KSBjb25zdCB7IHJldHVybiAmbV9iYXJyaWVyVGhyZXNob2xkOyB9CkBAIC0zOTEsNiArMzk0LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHN0b3BUaGVXb3JsZCgpOwogICAgIHZvaWQgcmVzdW1lVGhl
V29ybGQoKTsKICAgICAKKyAgICBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIGZyaWVu
ZCBjbGFzcyBSZXN1bWVUaGVXb3JsZFNjb3BlOworICAgIAogICAgIHZvaWQgc3RvcFRoZU11dGF0
b3IoKTsKICAgICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKQEAgLTQxMiw3ICs0MTgs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZEZpbmFsaXplKCk7CiAgICAgdm9pZCB3YWl0
V2hpbGVOZWVkRmluYWxpemUoKTsKICAgICAKLSAgICB1bnNpZ25lZCBzZXRNdXRhdG9yV2FpdGlu
ZygpOworICAgIHZvaWQgc2V0TXV0YXRvcldhaXRpbmcoKTsKICAgICB2b2lkIGNsZWFyTXV0YXRv
cldhaXRpbmcoKTsKICAgICB2b2lkIG5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xk
ZXImKTsKICAgICAKQEAgLTQyMiwzMSArNDI4LDE4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBzdXNwZW5kQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9u
KE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4pOwotICAgIHZvaWQgZmx1c2hPbGRTdHJ1Y3R1cmVJ
RFRhYmxlcygpOwogICAgIHZvaWQgZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICB2b2lk
IHN0b3BBbGxvY2F0aW9uKCk7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAot
ICAgIHZvaWQgbWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CisgICAgdm9pZCBtYXJrVG9G
aXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgZ2F0aGVyU3RhY2tSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVySlNTdGFja1Jvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7CiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2VydmF0
aXZlUm9vdHMmKTsKICAgICB2b2lkIGJlZ2luTWFya2luZygpOwotICAgIHZvaWQgdmlzaXRFeHRl
cm5hbFJlbWVtYmVyZWRTZXQoKTsKLSAgICB2b2lkIHZpc2l0U21hbGxTdHJpbmdzKCk7CiAgICAg
dm9pZCB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9p
ZCB2aXNpdENvbXBpbGVyV29ya2xpc3RXZWFrUmVmZXJlbmNlcygpOwogICAgIHZvaWQgcmVtb3Zl
RGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7Ci0gICAgdm9pZCB2aXNpdFByb3RlY3RlZE9i
amVjdHMoSGVhcFJvb3RWaXNpdG9yJik7Ci0gICAgdm9pZCB2aXNpdEFyZ3VtZW50QnVmZmVycyhI
ZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0RXhjZXB0aW9uKEhlYXBSb290VmlzaXRv
ciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdIYW5kbGVzKEhlYXBSb290VmlzaXRvciYpOwotICAg
IHZvaWQgdmlzaXRIYW5kbGVTdGFjayhIZWFwUm9vdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0
U2FtcGxpbmdQcm9maWxlcigpOwotICAgIHZvaWQgdmlzaXRUeXBlUHJvZmlsZXIoKTsKLSAgICB2
b2lkIHZpc2l0U2hhZG93Q2hpY2tlbigpOwotICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzQW5kSklU
U3R1YlJvdXRpbmVzKCk7Ci0gICAgdm9pZCB2aXNpdFdlYWtIYW5kbGVzKEhlYXBSb290VmlzaXRv
ciYpOworICAgIHZvaWQgbWFya1RvRml4cG9pbnQoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgdm9p
ZCB1cGRhdGVPYmplY3RDb3VudHMoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGVuZE1h
cmtpbmcoKTsKIApAQCAtNTE4LDcgKzUxMSw4IEBAIHByaXZhdGU6CiAKICAgICBNYWNoaW5lVGhy
ZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAotICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0
b3I7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBtX2NvbGxlY3RvclNsb3RWaXNp
dG9yOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJheT4gbV9tdXRhdG9yTWFya1N0
YWNrOwogCiAgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVs
IG1hcmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bwogICAgIC8vIGVudW1l
cmF0ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBz
bWFsbCBhbW91bnQgb2YgbWVtb3J5IGZyb20KQEAgLTUzNyw3ICs1MzEsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93
cml0ZUJhcnJpZXJCdWZmZXI7Ci0gICAgYm9vbCBtX2JhcnJpZXJTaG91bGRCZUZlbmNlZCB7IE9w
dGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CisgICAgYm9vbCBtX211dGF0b3JTaG91bGRC
ZUZlbmNlZCB7IE9wdGlvbnM6OmZvcmNlRmVuY2VkQmFycmllcigpIH07CiAgICAgdW5zaWduZWQg
bV9iYXJyaWVyVGhyZXNob2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0
b2xvZ2ljYWxUaHJlc2hvbGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07CkBA
IC01NzIsNyArNTY2LDggQEAgcHJpdmF0ZToKIAogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAg
ICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlOwotICAgIE1hcmtTdGFja0Fy
cmF5IG1fc2hhcmVkTWFya1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrU3RhY2tBcnJh
eT4gbV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2s7CisgICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtT
dGFja0FycmF5PiBtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2s7CiAgICAgdW5zaWduZWQgbV9udW1i
ZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX251bWJlck9m
V2FpdGluZ1BhcmFsbGVsTWFya2VycyB7IDAgfTsKICAgICBib29sIG1fcGFyYWxsZWxNYXJrZXJz
U2hvdWxkRXhpdCB7IGZhbHNlIH07CkBAIC02MDAsNiArNTk1LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbXV0YXRvcldhaXRpbmdCaXQgPSAxdSA8PCA1dTsgLy8gQWxs
b3dzIHRoZSBtdXRhdG9yIHRvIHVzZSB0aGlzIGFzIGEgY29uZGl0aW9uIHZhcmlhYmxlLgogICAg
IEF0b21pYzx1bnNpZ25lZD4gbV93b3JsZFN0YXRlOwogICAgIGJvb2wgbV9jb2xsZWN0b3JCZWxp
ZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgTW9ub3RvbmljVGltZSBt
X3N0b3BUaW1lOwogICAgIAogICAgIERlcXVlPE9wdGlvbmFsPENvbGxlY3Rpb25TY29wZT4+IG1f
cmVxdWVzdHM7CiAgICAgVGlja2V0IG1fbGFzdFNlcnZlZFRpY2tldCB7IDAgfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMjA4NjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNiw2ICszNiwzNCBAQCBNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkoKQogewogfQogCit2b2lkIE1hcmtTdGFja0FycmF5Ojp0cmFuc2ZlclRvKE1hcmtTdGFja0Fy
cmF5JiBvdGhlcikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzICE9ICZvdGhlcik7CisgICAg
CisgICAgLy8gUmVtb3ZlIG91ciBoZWFkIGFuZCB0aGUgaGVhZCBvZiB0aGUgb3RoZXIgbGlzdC4K
KyAgICBHQ0FycmF5U2VnbWVudDxjb25zdCBKU0NlbGwqPiogbXlIZWFkID0gbV9zZWdtZW50cy5y
ZW1vdmVIZWFkKCk7CisgICAgR0NBcnJheVNlZ21lbnQ8Y29uc3QgSlNDZWxsKj4qIG90aGVySGVh
ZCA9IG90aGVyLm1fc2VnbWVudHMucmVtb3ZlSGVhZCgpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50
cy0tOworICAgIG90aGVyLm1fbnVtYmVyT2ZTZWdtZW50cy0tOworICAgIAorICAgIG90aGVyLm1f
c2VnbWVudHMuYXBwZW5kKG1fc2VnbWVudHMpOworICAgIAorICAgIG90aGVyLm1fbnVtYmVyT2ZT
ZWdtZW50cyArPSBtX251bWJlck9mU2VnbWVudHM7CisgICAgbV9udW1iZXJPZlNlZ21lbnRzID0g
MDsKKyAgICAKKyAgICAvLyBQdXQgdGhlIG9yaWdpbmFsIGhlYWRzIGJhY2sgaW4gdGhlaXIgcGxh
Y2VzLgorICAgIG1fc2VnbWVudHMucHVzaChteUhlYWQpOworICAgIG90aGVyLm1fc2VnbWVudHMu
cHVzaChvdGhlckhlYWQpOworICAgIG1fbnVtYmVyT2ZTZWdtZW50cysrOworICAgIG90aGVyLm1f
bnVtYmVyT2ZTZWdtZW50cysrOworICAgIAorICAgIHdoaWxlICghaXNFbXB0eSgpKSB7CisgICAg
ICAgIHJlZmlsbCgpOworICAgICAgICB3aGlsZSAoY2FuUmVtb3ZlTGFzdCgpKQorICAgICAgICAg
ICAgb3RoZXIuYXBwZW5kKHJlbW92ZUxhc3QoKSk7CisgICAgfQorfQorCiB2b2lkIE1hcmtTdGFj
a0FycmF5Ojpkb25hdGVTb21lQ2VsbHNUbyhNYXJrU3RhY2tBcnJheSYgb3RoZXIpCiB7CiAgICAg
Ly8gVHJ5IHRvIGRvbmF0ZSBhYm91dCAxIC8gMiBvZiBvdXIgY2VsbHMuIFRvIHJlZHVjZSBjb3B5
aW5nIGNvc3RzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDktMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDggKzM1LDkgQEAgY2xhc3MgTWFya1N0YWNrQXJyYXkg
OiBwdWJsaWMgR0NTZWdtZW50ZQogcHVibGljOgogICAgIE1hcmtTdGFja0FycmF5KCk7CiAKLSAg
ICB2b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5JiBvdGhlcik7Ci0gICAgdm9p
ZCBzdGVhbFNvbWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmIG90aGVyLCBzaXplX3QgaWRsZVRo
cmVhZENvdW50KTsKKyAgICB2b2lkIHRyYW5zZmVyVG8oTWFya1N0YWNrQXJyYXkmKTsKKyAgICB2
b2lkIGRvbmF0ZVNvbWVDZWxsc1RvKE1hcmtTdGFja0FycmF5Jik7CisgICAgdm9pZCBzdGVhbFNv
bWVDZWxsc0Zyb20oTWFya1N0YWNrQXJyYXkmLCBzaXplX3QgaWRsZVRocmVhZENvdW50KTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzcsNyArMTM3LDYgQEAgdm9pZCogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZAog
dm9pZCogTWFya2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUq
IGJsb2NrKQogewogICAgIEFTU0VSVChibG9jayk7Ci0gICAgQVNTRVJUKCFibG9jay0+aGFzQW55
TmV3bHlBbGxvY2F0ZWQoKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNGcmVlTGlzdGVkKCkpOwog
ICAgIAogICAgIEZyZWVMaXN0IGZyZWVMaXN0ID0gYmxvY2stPnN3ZWVwKE1hcmtlZEJsb2NrOjpI
YW5kbGU6OlN3ZWVwVG9GcmVlTGlzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEyICs4Miwx
NCBAQCBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmCiAgICAgLCBtX2hh
bmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKIHsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7CiB9CiAKLXRlbXBs
YXRlPE1hcmtlZEJsb2NrOjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OlN3ZWVwTW9kZSBzd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSBkZXN0cnVjdGlv
bk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9kZSBzY3JpYmJsZU1vZGUsIE1h
cmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBuZXdseUFsbG9jYXRlZE1vZGUs
IE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01vZGU+Cit0ZW1wbGF0ZTxNYXJr
ZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTd2VlcERlc3RydWN0
aW9uTW9kZSBkZXN0cnVjdGlvbk1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlNjcmliYmxlTW9k
ZSBzY3JpYmJsZU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok5ld2x5QWxsb2NhdGVkTW9kZSBu
ZXdseUFsbG9jYXRlZE1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ok1hcmtzTW9kZSBtYXJrc01v
ZGU+CiBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghKGRlc3RydWN0aW9uTW9kZSA9PSBEb2VzTm90TmVlZERlc3Ry
dWN0aW9uICYmIHN3ZWVwTW9kZSA9PSBTd2VlcE9ubHkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
KGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMgJiYgc3dlZXBNb2RlID09
IFN3ZWVwT25seSkpOwogICAgIAogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKIApAQCAtOTksNyArMTAxLDcgQEAgRnJlZUxpc3QgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZQogICAgIGlmIChPcHRpb25zOjp1c2VCdW1wQWxsb2NhdG9yKCkKICAg
ICAgICAgJiYgZW1wdHlNb2RlID09IElzRW1wdHkKICAgICAgICAgJiYgbmV3bHlBbGxvY2F0ZWRN
b2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKLSAgICAgICAgQVNTRVJUKG1hcmtz
TW9kZSA9PSBNYXJrc1N0YWxlKTsKKyAgICAgICAgQVNTRVJUKG1hcmtzTW9kZSA9PSBNYXJrc1N0
YWxlIHx8IGJsb2NrLm1fbWFya3MuaXNFbXB0eSgpKTsKICAgICAgICAgCiAgICAgICAgIGNoYXIq
IHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxsQWxpZ24oYmxvY2suYXRv
bXMoKSArIG1fZW5kQXRvbSAtIDEpKTsKICAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0
T2ZMYXN0Q2VsbCArIGNlbGxTaXplKCk7CkBAIC0xMTEsNiArMTEzLDggQEAgRnJlZUxpc3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZQogICAgICAgICAgICAgc2V0SXNGcmVlTGlzdGVk
KCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYWxsb2NhdG9yLT5zZXRJc0VtcHR5KHRo
aXMsIHRydWUpOworICAgICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgICAg
ICBibG9jay5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgIEZyZWVMaXN0IHJlc3VsdCA9IEZyZWVM
aXN0OjpidW1wKHBheWxvYWRFbmQsIHBheWxvYWRFbmQgLSBwYXlsb2FkQmVnaW4pOwogICAgICAg
ICBpZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJRdWlja2x5IHN3ZXB0IGJsb2NrICIs
IFJhd1BvaW50ZXIodGhpcyksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUoKSwgIiBhbmQg
YXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHJlc3VsdCwgIlxuIik7CkBAIC0xMjMs
MTcgKzEyNywxMSBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplCiAg
ICAgRnJlZUNlbGwqIGhlYWQgPSAwOwogICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgYm9vbCBp
c0VtcHR5ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2Vu
ZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKLSAgICAgICAgaWYgKGVtcHR5TW9kZSA9PSBO
b3RFbXB0eQotICAgICAgICAgICAgJiYgKChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBi
bG9jay5tX21hcmtzLmdldChpKSkKLSAgICAgICAgICAgICAgICB8fCAobmV3bHlBbGxvY2F0ZWRN
b2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0ZWQuZ2V0KGkpKSkpIHsK
LSAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0gICAgICAgIAorICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxsczsKKyAgICBhdXRv
IGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAgICBIZWFwQ2VsbCogY2Vs
bCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2NrLmF0b21zKClbaV0pOwog
Ci0gICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gTmVlZHNEZXN0cnVjdGlvbiAmJiBlbXB0
eU1vZGUgPT0gTm90RW1wdHkpCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tI
YXNOb0Rlc3RydWN0b3JzICYmIGVtcHR5TW9kZSA9PSBOb3RFbXB0eSkKICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEpTQ2VsbCo+KGNlbGwpLT5jYWxsRGVzdHJ1Y3Rvcigqdm0oKSk7CiAKICAgICAg
ICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKQEAgLTE0NCwxMiArMTQyLDMz
IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemUKICAgICAgICAgICAg
IGhlYWQgPSBmcmVlQ2VsbDsKICAgICAgICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KKyAgICB9
OworICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBt
X2F0b21zUGVyQ2VsbCkgeworICAgICAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5CisgICAg
ICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGJsb2NrLm1fbWFya3Mu
Z2V0KGkpKQorICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgeworICAgICAgICAgICAg
aXNFbXB0eSA9IGZhbHNlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNEZXN0cnVjdG9yc0Fu
ZENvbGxlY3RvcklzUnVubmluZykKKyAgICAgICAgICAgIGRlYWRDZWxscy5hcHBlbmQoaSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGhhbmRsZURlYWRDZWxsKGkpOwogICAgIH0KLQorICAg
IAogICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBuZXdseUFsbG9jYXRlZCBiaXRz
IGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCiAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxk
IGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2ZS4KICAgICBpZiAoc3dl
ZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQpCiAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gTWFya2VkU3Bh
Y2U6Om51bGxWZXJzaW9uOworICAgIAorICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKKyAg
ICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgIAorICAgIGlmIChkZXN0cnVjdGlvbk1v
ZGUgPT0gQmxvY2tIYXNEZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZykgeworICAgICAg
ICBmb3IgKHNpemVfdCBpIDogZGVhZENlbGxzKQorICAgICAgICAgICAgaGFuZGxlRGVhZENlbGwo
aSk7CisgICAgfQogCiAgICAgRnJlZUxpc3QgcmVzdWx0ID0gRnJlZUxpc3Q6Omxpc3QoaGVhZCwg
Y291bnQgKiBjZWxsU2l6ZSgpKTsKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlz
dCkKQEAgLTE3NywxMiArMTk2LDE4IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3
ZWVwKFN3ZWUKICAgICAKICAgICBBU1NFUlQoIW1fYWxsb2NhdG9yLT5pc0FsbG9jYXRlZCh0aGlz
KSk7CiAgICAgCi0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXN0cnVjdGlvbiA9PSBOZWVkc0Rlc3Ry
dWN0aW9uKQotICAgICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8TmVl
ZHNEZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKLSAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RT
Y3JpYmJsZU1vZGU8RG9lc05vdE5lZWREZXN0cnVjdGlvbj4oc3dlZXBNb2RlKTsKKyAgICBpZiAo
c3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGJsb2NrKCkubV9sb2NrLmxvY2soKTsKKyAg
ICAKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5lZWRzRGVzdHJ1Y3Rpb24p
IHsKKyAgICAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQorICAgICAgICAgICAgcmV0dXJu
IHN3ZWVwSGVscGVyU2VsZWN0U2NyaWJibGVNb2RlPEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xs
ZWN0b3JJc1J1bm5pbmc+KHN3ZWVwTW9kZSk7CisgICAgICAgIHJldHVybiBzd2VlcEhlbHBlclNl
bGVjdFNjcmliYmxlTW9kZTxCbG9ja0hhc0Rlc3RydWN0b3JzPihzd2VlcE1vZGUpOworICAgIH0K
KyAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGU8QmxvY2tIYXNOb0Rlc3Ry
dWN0b3JzPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlv
bk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dl
ZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9kZSkKIHsKICAgICBp
ZiAoc2NyaWJibGVGcmVlQ2VsbHMoKSkKQEAgLTE5MCw3ICsyMTUsNyBAQCBGcmVlTGlzdCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVwSGVscGVyU2VsZWN0
RW1wdHlNb2RlPGRlc3RydWN0aW9uTW9kZSwgRG9udFNjcmliYmxlPihzd2VlcE1vZGUpOwogfQog
Ci10ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgordGVtcGxhdGU8TWFya2VkQmxvY2s6
OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGUoU3dlZXBNb2RlIHN3ZWVwTW9k
ZSkKIHsKICAgICAvLyBJdCdzIG5vdCBvYnZpb3VzLCBidXQgdGhpcyBpcyB0aGUgb25seSB3YXkg
dG8ga25vdyBpZiB0aGUgYmxvY2sgaXMgZW1wdHkuIEl0J3MgdGhlIG9ubHkKQEAgLTIwNSw3ICsy
MzAsNyBAQCBGcmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0
dXJuIHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQ8Tm90RW1wdHksIGRlc3RydWN0
aW9uTW9kZSwgc2NyaWJibGVNb2RlPihzd2VlcE1vZGUpOwogfQogCi10ZW1wbGF0ZTxNYXJrZWRC
bG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1
Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2Rl
PgordGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6U3dlZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlPgogRnJlZUxpc3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXBIZWxwZXJTZWxlY3RIYXNOZXdseUFsbG9jYXRlZChT
d2VlcE1vZGUgc3dlZXBNb2RlKQogewogICAgIGlmIChoYXNBbnlOZXdseUFsbG9jYXRlZCgpKQpA
QCAtMjEzLDcgKzIzOCw3IEBAIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwSGVs
cGUKICAgICByZXR1cm4gc3dlZXBIZWxwZXJTZWxlY3RTd2VlcE1vZGU8ZW1wdHlNb2RlLCBkZXN0
cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgRG9lc05vdEhhdmVOZXdseUFsbG9jYXRlZD4oc3dl
ZXBNb2RlKTsKIH0KIAotdGVtcGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVt
cHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6Okhh
bmRsZTo6U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3
bHlBbGxvY2F0ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KK3RlbXBsYXRlPE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OkVtcHR5TW9kZSBlbXB0eU1vZGUsIE1hcmtlZEJsb2NrOjpIYW5kbGU6OlN3ZWVw
RGVzdHJ1Y3Rpb25Nb2RlIGRlc3RydWN0aW9uTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U2Ny
aWJibGVNb2RlIHNjcmliYmxlTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6TmV3bHlBbGxvY2F0
ZWRNb2RlIG5ld2x5QWxsb2NhdGVkTW9kZT4KIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7CiAgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpCkBAIC0yMjEsMTAgKzI0NiwxNiBAQCBG
cmVlTGlzdCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcEhlbHBlCiAgICAgcmV0dXJuIHN3ZWVw
SGVscGVyU2VsZWN0TWFya3NNb2RlPGVtcHR5TW9kZSwgU3dlZXBPbmx5LCBkZXN0cnVjdGlvbk1v
ZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlPigpOwogfQogCi10ZW1wbGF0ZTxN
YXJrZWRCbG9jazo6SGFuZGxlOjpFbXB0eU1vZGUgZW1wdHlNb2RlLCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpTd2VlcE1vZGUgc3dlZXBNb2RlLCBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2Rl
LCBNYXJrZWRCbG9jazo6SGFuZGxlOjpTY3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpOZXdseUFsbG9jYXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgordGVt
cGxhdGU8TWFya2VkQmxvY2s6OkhhbmRsZTo6RW1wdHlNb2RlIGVtcHR5TW9kZSwgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6U3dlZXBNb2RlIHN3ZWVwTW9kZSwgTWFya2VkQmxvY2s6OkhhbmRsZTo6U3dl
ZXBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb25Nb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpT
Y3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlLCBNYXJrZWRCbG9jazo6SGFuZGxlOjpOZXdseUFsbG9j
YXRlZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlPgogRnJlZUxpc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6c3dlZXBIZWxwZXJTZWxlY3RNYXJrc01vZGUoKQogewotICAgIGlmIChhcmVNYXJrc1N0YWxl
KCkpCisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24gPSBzcGFjZSgpLT5tYXJraW5nVmVy
c2lvbigpOworICAgIGJvb2wgbWFya3NBcmVVc2VmdWwgPSAhYmxvY2soKS5hcmVNYXJrc1N0YWxl
KG1hcmtpbmdWZXJzaW9uKTsKKyAgICAKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisg
ICAgICAgIG1hcmtzQXJlVXNlZnVsIHw9IGJsb2NrKCkubWFya3NDb252ZXlMaXZlbmVzc0R1cmlu
Z01hcmtpbmcobWFya2luZ1ZlcnNpb24pOworICAgIAorICAgIGlmICghbWFya3NBcmVVc2VmdWwp
CiAgICAgICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9kZSwgc3dlZXBNb2RlLCBk
ZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc1N0
YWxlPigpOwogICAgIHJldHVybiBzcGVjaWFsaXplZFN3ZWVwPGVtcHR5TW9kZSwgc3dlZXBNb2Rl
LCBkZXN0cnVjdGlvbk1vZGUsIHNjcmliYmxlTW9kZSwgbmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJr
c05vdFN0YWxlPigpOwogfQpAQCAtMjQxLDI0ICsyNzIsNiBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNldElzRnJlZUxpc3RlCiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSB0cnVlOwogfQogCi1j
bGFzcyBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IgOiBwdWJsaWMgTWFya2VkQmxvY2s6OlZvaWRG
dW5jdG9yIHsKLXB1YmxpYzoKLSAgICBTZXROZXdseUFsbG9jYXRlZEZ1bmN0b3IoTWFya2VkQmxv
Y2s6OkhhbmRsZSogYmxvY2spCi0gICAgICAgIDogbV9ibG9jayhibG9jaykKLSAgICB7Ci0gICAg
fQotCi0gICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSGVhcENlbGwqIGNlbGwsIEhlYXBD
ZWxsOjpLaW5kKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjpibG9j
a0ZvcihjZWxsKSA9PSAmbV9ibG9jay0+YmxvY2soKSk7Ci0gICAgICAgIG1fYmxvY2stPnNldE5l
d2x5QWxsb2NhdGVkKGNlbGwpOwotICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9ibG9j
azsKLX07Ci0KIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcoY29uc3Qg
RnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIGlmIChmYWxzZSkKQEAgLTI2NiwxMiArMjc5LDE3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICBBU1NFUlQo
IWFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCh0aGlzKSk7CiAKICAgICBpZiAoIWlzRnJlZUxpc3Rl
ZCgpKSB7CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRoZXJlIGFp
bid0IG5vIG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
d2UgZWl0aGVyIGRpZG4ndCB1c2UgdGhpcyBibG9jayBhdCBhbGwgZm9yIGFsbG9jYXRpb24gc2lu
Y2UgbGFzdCBHQywKICAgICAgICAgLy8gb3Igc29tZW9uZSBoYWQgYWxyZWFkeSBkb25lIHN0b3BB
bGxvY2F0aW5nKCkgYmVmb3JlLgogICAgICAgICBBU1NFUlQoZnJlZUxpc3QuYWxsb2NhdGlvbldp
bGxGYWlsKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChmYWxzZSkK
KyAgICAgICAgZGF0YUxvZygiRnJlZSBsaXN0OiAiLCBmcmVlTGlzdCwgIlxuIik7CisgICAgCiAg
ICAgLy8gUm9sbCBiYWNrIHRvIGEgY29oZXJlbnQgc3RhdGUgZm9yIEhlYXAgaW50cm9zcGVjdGlv
bi4gQ2VsbHMgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgZnJvbSBvdXIgZnJlZSBsaXN0IGFyZSBu
b3QgY3VycmVudGx5IG1hcmtlZCwgc28gd2UgbmVlZCBhbm90aGVyCiAgICAgLy8gd2F5IHRvIHRl
bGwgd2hhdCdzIGxpdmUgdnMgZGVhZC4gCkBAIC0yNzksMTIgKzI5NywxNyBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nCiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVh
ckFsbCgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFj
ZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lvbigpOwogCi0gICAgU2V0TmV3bHlBbGxvY2F0ZWRGdW5j
dG9yIGZ1bmN0b3IodGhpcyk7Ci0gICAgZm9yRWFjaENlbGwoZnVuY3Rvcik7CisgICAgZm9yRWFj
aENlbGwoCisgICAgICAgIFsmXSAoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kKSAtPiBJ
dGVyYXRpb25TdGF0dXMgeworICAgICAgICAgICAgc2V0TmV3bHlBbGxvY2F0ZWQoY2VsbCk7Cisg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7
CiAKICAgICBmb3JFYWNoRnJlZUNlbGwoCiAgICAgICAgIGZyZWVMaXN0LAogICAgICAgICBbJl0g
KEhlYXBDZWxsKiBjZWxsKSB7CisgICAgICAgICAgICBpZiAoZmFsc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiRnJlZSBjZWxsOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsKICAgICAg
ICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb24gPT0gTmVlZHNEZXN0cnVjdGlvbikK
ICAgICAgICAgICAgICAgICBjZWxsLT56YXAoKTsKICAgICAgICAgICAgIGNsZWFyTmV3bHlBbGxv
Y2F0ZWQoY2VsbCk7CkBAIC0zMDcsMTAgKzMzMCwxNCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6Omxhc3RDaGFuY2VUb0ZpCiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3Vt
ZUFsbG9jYXRpbmcoKQogeworICAgIGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQb2lu
dGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nIVxuIik7
CiAgICAgQVNTRVJUKCFhbGxvY2F0b3IoKS0+aXNBbGxvY2F0ZWQodGhpcykpOwogICAgIEFTU0VS
VCghaXNGcmVlTGlzdGVkKCkpOwogCiAgICAgaWYgKCFoYXNBbnlOZXdseUFsbG9jYXRlZCgpKSB7
CisgICAgICAgIGlmIChmYWxzZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlRoZXJlIGFpbid0IG5v
IG5ld2x5IGFsbG9jYXRlZC5cbiIpOwogICAgICAgICAvLyBUaGlzIG1lYW5zIHdlIGhhZCBhbHJl
YWR5IGV4aGF1c3RlZCB0aGUgYmxvY2sgd2hlbiB3ZSBzdG9wcGVkIGFsbG9jYXRpb24uCiAgICAg
ICAgIHJldHVybiBGcmVlTGlzdCgpOwogICAgIH0KQEAgLTM1NCw2ICszODEsOCBAQCB2b2lkIE1h
cmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgCiAgICAgaWYgKGhhbmRsZSgp
LmFsbG9jYXRvcigpLT5pc0FsbG9jYXRlZCgmaGFuZGxlKCkpCiAgICAgICAgIHx8ICFtYXJrc0Nv
bnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtYXJraW5nVmVyc2lvbikpIHsKKyAgICAgICAgaWYg
KGZhbHNlKQorICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBDbGVhcmlu
ZyBtYXJrcyB3aXRob3V0IGRvaW5nIGFueXRoaW5nIGVsc2UuXG4iKTsKICAgICAgICAgLy8gV2Ug
YWxyZWFkeSBrbm93IHRoYXQgdGhlIGJsb2NrIGlzIGZ1bGwgYW5kIGlzIGFscmVhZHkgcmVjb2du
aXplZCBhcyBzdWNoLCBvciB0aGF0IHRoZQogICAgICAgICAvLyBibG9jayBkaWQgbm90IHN1cnZp
dmUgdGhlIHByZXZpb3VzIEdDLiBTbywgd2UgY2FuIGNsZWFyIG1hcmsgYml0cyB0aGUgb2xkIGZh
c2hpb25lZAogICAgICAgICAvLyB3YXkuIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciBzdWNo
IGEgYmxvY2sgdG8gaGF2ZSBuZXdseUFsbG9jYXRlZCB3aXRoIGFuIHVwLXRvLQpAQCAtMzYyLDYg
KzM5MSw4IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAg
ICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgogICAgICAgICBtX21hcmtzLmNsZWFy
QWxsKCk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZhbHNlKQorICAgICAgICAgICAgZGF0
YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4iKTsKICAgICAgICAgSGVh
cFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gc3BhY2UoKS0+bmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKCk7CiAgICAgICAgIGlmIChoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9
PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAgIC8vIE1lcmdlIHRoZSBjb250
ZW50cyBvZiBtYXJrZWQgaW50byBuZXdseUFsbG9jYXRlZC4gSWYgd2UgZ2V0IHRoZSBmdWxsIHNl
dCBvZiBiaXRzCkBAIC00MjksNyArNDYwLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpk
aWRDb25zdW1lRnJlZQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCFcbiIpOwogICAgIEFTU0VSVChpc0Zy
ZWVMaXN0ZWQoKSk7CiAgICAgbV9pc0ZyZWVMaXN0ZWQgPSBmYWxzZTsKLSAgICBhbGxvY2F0b3Io
KS0+c2V0SXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CisgICAgYWxsb2NhdG9yKCktPmF0b21pY1Nl
dEFuZENoZWNrSXNBbGxvY2F0ZWQodGhpcywgdHJ1ZSk7CiB9CiAKIHNpemVfdCBNYXJrZWRCbG9j
azo6bWFya0NvdW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDMwICsxOTAsMzIgQEAgcHVibGljOgog
ICAgIHByaXZhdGU6CiAgICAgICAgIEhhbmRsZShIZWFwJiwgdm9pZCopOwogICAgICAgICAKLSAg
ICAgICAgdGVtcGxhdGU8RGVzdHJ1Y3Rpb25Nb2RlPgorICAgICAgICBlbnVtIFN3ZWVwRGVzdHJ1
Y3Rpb25Nb2RlIHsgQmxvY2tIYXNOb0Rlc3RydWN0b3JzLCBCbG9ja0hhc0Rlc3RydWN0b3JzLCBC
bG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nIH07CisgICAgICAgIAorICAg
ICAgICB0ZW1wbGF0ZTxTd2VlcERlc3RydWN0aW9uTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dl
ZXBIZWxwZXJTZWxlY3RTY3JpYmJsZU1vZGUoU3dlZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAg
ICAgICAgIAogICAgICAgICBlbnVtIFNjcmliYmxlTW9kZSB7IERvbnRTY3JpYmJsZSwgU2NyaWJi
bGUgfTsKICAgICAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxEZXN0cnVjdGlvbk1vZGUsIFNj
cmliYmxlTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8U3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmli
YmxlTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxwZXJTZWxlY3RFbXB0eU1vZGUoU3dl
ZXBNb2RlID0gU3dlZXBPbmx5KTsKICAgICAgICAgICAgIAogICAgICAgICBlbnVtIEVtcHR5TW9k
ZSB7IElzRW1wdHksIE5vdEVtcHR5IH07CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0
eU1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlPgorICAgICAgICB0ZW1wbGF0ZTxF
bXB0eU1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGU+CiAgICAgICAgIEZy
ZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0SGFzTmV3bHlBbGxvY2F0ZWQoU3dlZXBNb2RlID0gU3dl
ZXBPbmx5KTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTmV3bHlBbGxvY2F0ZWRNb2RlIHsgSGFz
TmV3bHlBbGxvY2F0ZWQsIERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQgfTsKICAgICAgICAgCi0g
ICAgICAgIHRlbXBsYXRlPEVtcHR5TW9kZSwgRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUs
IE5ld2x5QWxsb2NhdGVkTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcERl
c3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXdseUFsbG9jYXRlZE1vZGU+CiAgICAgICAg
IEZyZWVMaXN0IHN3ZWVwSGVscGVyU2VsZWN0U3dlZXBNb2RlKFN3ZWVwTW9kZSA9IFN3ZWVwT25s
eSk7CiAgICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTxFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgRGVz
dHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KKyAgICAgICAg
dGVtcGxhdGU8RW1wdHlNb2RlLCBTd2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3Jp
YmJsZU1vZGUsIE5ld2x5QWxsb2NhdGVkTW9kZT4KICAgICAgICAgRnJlZUxpc3Qgc3dlZXBIZWxw
ZXJTZWxlY3RNYXJrc01vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGVudW0gTWFya3NNb2RlIHsg
TWFya3NTdGFsZSwgTWFya3NOb3RTdGFsZSB9OwogICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8
RW1wdHlNb2RlLCBTd2VlcE1vZGUsIERlc3RydWN0aW9uTW9kZSwgU2NyaWJibGVNb2RlLCBOZXds
eUFsbG9jYXRlZE1vZGUsIE1hcmtzTW9kZT4KKyAgICAgICAgdGVtcGxhdGU8RW1wdHlNb2RlLCBT
d2VlcE1vZGUsIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlLCBTY3JpYmJsZU1vZGUsIE5ld2x5QWxsb2Nh
dGVkTW9kZSwgTWFya3NNb2RlPgogICAgICAgICBGcmVlTGlzdCBzcGVjaWFsaXplZFN3ZWVwKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEyLDcgKzQxMiw2IEBAIHZvaWQgTWFya2VkU3BhY2U6OnByZXBhcmVGb3JN
YXJraW5nKCkKIAogdm9pZCBNYXJrZWRTcGFjZTo6cmVzdW1lQWxsb2NhdGluZygpCiB7Ci0gICAg
QVNTRVJUKGlzSXRlcmF0aW5nKCkpOwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsm
XSAoTWFya2VkQWxsb2NhdG9yJiBhbGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAg
ICAgICAgICBhbGxvY2F0b3IucmVzdW1lQWxsb2NhdGluZygpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw5ICs3NSw3IEBAIHN0YXRpYyB2b2lkIHZhbGlkYXRlKEpTQ2VsbCogY2VsbCkKICNlbmRp
ZgogCiBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKLSAgICA6IG1fc3RhY2so
KQotICAgICwgbV9ieXRlc1Zpc2l0ZWQoMCkKLSAgICAsIG1fYnl0ZXNDb3BpZWQoMCkKKyAgICA6
IG1fYnl0ZXNWaXNpdGVkKDApCiAgICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJblBh
cmFsbGVsTW9kZShmYWxzZSkKICAgICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6Omlu
aXRpYWxWZXJzaW9uKQpAQCAtOTEsNyArODksNyBAQCBTbG90VmlzaXRvcjo6U2xvdFZpc2l0b3Io
SGVhcCYgaGVhcCkKIAogU2xvdFZpc2l0b3I6On5TbG90VmlzaXRvcigpCiB7Ci0gICAgY2xlYXJN
YXJrU3RhY2soKTsKKyAgICBjbGVhck1hcmtTdGFja3MoKTsKIH0KIAogdm9pZCBTbG90VmlzaXRv
cjo6ZGlkU3RhcnRNYXJraW5nKCkKQEAgLTEwOSwxNiArMTA3LDE3IEBAIHZvaWQgU2xvdFZpc2l0
b3I6OmRpZFN0YXJ0TWFya2luZygpCiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKIHsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghbV9vcGFxdWVSb290cy5zaXplKCkpOwogICAgIG1fYnl0ZXNWaXNp
dGVkID0gMDsKLSAgICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwog
ICAgIG1faGVhcFNuYXBzaG90QnVpbGRlciA9IG51bGxwdHI7Ci0gICAgQVNTRVJUKCFtX2N1cnJl
bnRDZWxsKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiB9CiAKLXZvaWQg
U2xvdFZpc2l0b3I6OmNsZWFyTWFya1N0YWNrKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmNsZWFyTWFy
a1N0YWNrcygpCiB7Ci0gICAgbV9zdGFjay5jbGVhcigpOworICAgIG1fY29sbGVjdG9yU3RhY2su
Y2xlYXIoKTsKKyAgICBtX211dGF0b3JTdGFjay5jbGVhcigpOwogfQogCiB2b2lkIFNsb3RWaXNp
dG9yOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAtMTQ4
LDcgKzE0Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEpTQ2VsbE9yQXV4aWxpYXIKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAganNDZWxsLT5z
ZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAgICAganNDZWxsLT5zZXRDZWxs
U3RhdGUoQ2VsbFN0YXRlOjpHcmV5KTsKIAogICAgICAgICBhcHBlbmRUb01hcmtTdGFjayhqc0Nl
bGwpOwogICAgICAgICByZXR1cm47CkBAIC0yMTAsNyArMjA5LDcgQEAgQUxXQVlTX0lOTElORSB2
b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZQogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG9iamVj
dCBpcyBncmV5IGFuZCB0aGF0OgogICAgIC8vIEluIGNhc2Ugb2YgY29uY3VycmVudCBHQzogaXQn
cyB0aGUgZmlyc3QgdGltZSBpdCBpcyBncmV5IGluIHRoaXMgR0MgY3ljbGUuCiAgICAgLy8gSW4g
Y2FzZSBvZiBlZGVuIGNvbGxlY3Rpb246IGl0J3MgYSBuZXcgb2JqZWN0IHRoYXQgYmVjYW1lIGdy
ZXkgcmF0aGVyIHRoYW4gYW4gb2xkIHJlbWVtYmVyZWQgb2JqZWN0LgotICAgIGNlbGwtPnNldENl
bGxTdGF0ZShDZWxsU3RhdGU6Ok5ld0dyZXkpOworICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxs
U3RhdGU6OkdyZXkpOwogICAgIAogICAgIGFwcGVuZFRvTWFya1N0YWNrKGNvbnRhaW5lciwgY2Vs
bCk7CiB9CkBAIC0yMjgsMTYgKzIyNywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFRvCiB7CiAgICAgQVNTRVJUKEhlYXA6OmlzTWFya2VkQ29uY3VycmVudGx5KGNl
bGwpKTsKICAgICBBU1NFUlQoIWNlbGwtPmlzWmFwcGVkKCkpOwotICAgIEFTU0VSVChjZWxsLT5j
ZWxsU3RhdGUoKSA9PSBDZWxsU3RhdGU6Ok5ld0dyZXkgfHwgY2VsbC0+Y2VsbFN0YXRlKCkgPT0g
Q2VsbFN0YXRlOjpPbGRHcmV5KTsKKyAgICBBU1NFUlQoY2VsbC0+Y2VsbFN0YXRlKCkgPT0gQ2Vs
bFN0YXRlOjpHcmV5KTsKICAgICAKICAgICBjb250YWluZXIubm90ZU1hcmtlZCgpOwogICAgIAot
ICAgIC8vIEZJWE1FOiBUaGVzZSAianVzdCB3b3JrIiBiZWNhdXNlIHRoZSBHQyByZXNldHMgdGhl
c2UgZmllbGRzIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiBCdXQKLSAgICAvLyB0aGF0IHdv
bid0IGJlIHRoZSBjYXNlIHdoZW4gd2UgZG8gY29uY3VycmVudCBHQy4KICAgICBtX3Zpc2l0Q291
bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBjb250YWluZXIuY2VsbFNpemUoKTsKICAgICAK
LSAgICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKyAgICBtX2NvbGxlY3RvclN0YWNrLmFwcGVuZChj
ZWxsKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kVG9NdXRhdG9yTWFya1N0YWNrKGNv
bnN0IEpTQ2VsbCogY2VsbCkKK3sKKyAgICBtX211dGF0b3JTdGFjay5hcHBlbmQoY2VsbCk7CiB9
CiAKIHZvaWQgU2xvdFZpc2l0b3I6Om1hcmtBdXhpbGlhcnkoY29uc3Qgdm9pZCogYmFzZSkKQEAg
LTI5NCwxMiArMjk2LDE3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRD
aGkKICAgICAKICAgICBTZXRDdXJyZW50Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMs
IGNlbGwpOwogICAgIAotICAgIG1fb2xkQ2VsbFN0YXRlID0gY2VsbC0+Y2VsbFN0YXRlKCk7Cisg
ICAgaWYgKGZhbHNlKSB7CisgICAgICAgIGRhdGFMb2coIlZpc2l0aW5nICIsIFJhd1BvaW50ZXIo
Y2VsbCkpOworICAgICAgICBpZiAobV9pc1Zpc2l0aW5nTXV0YXRvclN0YWNrKQorICAgICAgICAg
ICAgZGF0YUxvZygiIChtdXRhdG9yKSIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0K
ICAgICAKLSAgICAvLyBUaGVyZSBpcyBubyByYWNlIGhlcmUgLSB0aGUgY2VsbCBzdGF0ZSBjYW5u
b3QgY2hhbmdlIHJpZ2h0IG5vdy4gR3JleSBvYmplY3RzIGNhbiBvbmx5IGJlCi0gICAgLy8gdmlz
aXRlZCBieSBvbmUgbWFya2luZyB0aHJlYWQuIE5laXRoZXIgdGhlIGJhcnJpZXIgbm9yIG1hcmtp
bmcgd2lsbCBjaGFuZ2UgdGhlIHN0YXRlIG9mIGFuCi0gICAgLy8gb2JqZWN0IHRoYXQgaXMgYWxy
ZWFkeSBncmV5LgotICAgIEFTU0VSVChtX29sZENlbGxTdGF0ZSA9PSBDZWxsU3RhdGU6Ok9sZEdy
ZXkgfHwgbV9vbGRDZWxsU3RhdGUgPT0gQ2VsbFN0YXRlOjpOZXdHcmV5KTsKKyAgICAvLyBGdW5u
eSBzdG9yeTogaXQncyBwb3NzaWJsZSBmb3IgdGhlIG9iamVjdCB0byBiZSBibGFjayBhbHJlYWR5
LCBpZiB3ZSBiYXJyaWVyIHRoZSBvYmplY3QgYXQKKyAgICAvLyBhYm91dCB0aGUgc2FtZSB0aW1l
IHRoYXQgaXQncyBtYXJrZWQuIFRoYXQncyBmaW5lLiBJdCdzIGEgZ25hcmx5IGFuZCBzdXBlci1y
YXJlIHJhY2UuIEl0J3MKKyAgICAvLyBub3QgY2xlYXIgdG8gbWUgdGhhdCBpdCB3b3VsZCBiZSBj
b3JyZWN0IG9yIHByb2ZpdGFibGUgdG8gYmFpbCBoZXJlIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFk
eQorICAgIC8vIGJsYWNrLgogICAgIAogICAgIGNlbGwtPnNldENlbGxTdGF0ZShDZWxsU3RhdGU6
OkFudGhyYWNpdGVPckJsYWNrKTsKICAgICAKQEAgLTMyNiwyMyArMzMzLDIzIEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRDaGkKICAgICB9CiAgICAgCiAgICAgaWYgKFVO
TElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpIHsKLSAgICAgICAgaWYgKG1fb2xkQ2VsbFN0
YXRlID09IENlbGxTdGF0ZTo6TmV3R3JleSkKKyAgICAgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRh
dG9yU3RhY2spCiAgICAgICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5vZGUo
Y29uc3RfY2FzdDxKU0NlbGwqPihjZWxsKSk7CiAgICAgfQogfQogCi12b2lkIFNsb3RWaXNpdG9y
Ojpkb25hdGVLbm93blBhcmFsbGVsKCkKK3ZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFy
YWxsZWwoTWFya1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0bykKIHsKICAgICAv
LyBOT1RFOiBCZWNhdXNlIHdlIHJlLXRyeSBvZnRlbiwgd2UgY2FuIGFmZm9yZCB0byBiZSBjb25z
ZXJ2YXRpdmUsIGFuZAogICAgIC8vIGFzc3VtZSB0aGF0IGRvbmF0aW5nIGlzIG5vdCBwcm9maXRh
YmxlLgogCiAgICAgLy8gQXZvaWQgbG9ja2luZyB3aGVuIGEgdGhyZWFkIHJlYWNoZXMgYSBkZWFk
IGVuZCBpbiB0aGUgb2JqZWN0IGdyYXBoLgotICAgIGlmIChtX3N0YWNrLnNpemUoKSA8IDIpCisg
ICAgaWYgKGZyb20uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgdGhl
cmUncyBhbHJlYWR5IHNvbWUgc2hhcmVkIHdvcmsgcXVldWVkIHVwLCBiZSBjb25zZXJ2YXRpdmUg
YW5kIGFzc3VtZQogICAgIC8vIHRoYXQgZG9uYXRpbmcgbW9yZSBpcyBub3QgcHJvZml0YWJsZS4K
LSAgICBpZiAobV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLnNpemUoKSkKKyAgICBpZiAodG8uc2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB3ZSdyZSBjb250ZW5kaW5nIG9uIHRo
ZSBsb2NrLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGFzc3VtZSB0aGF0IGFub3RoZXIKQEAgLTM1Miwy
NiArMzU5LDQzIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdp
bGwgZ28gaWRsZSBzb29uLCBhbmQgZG9uYXRlLgotICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxz
VG8obV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrKTsKKyAgICBmcm9tLmRvbmF0ZVNvbWVDZWxsc1Rv
KHRvKTsKIAogICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKIH0KIAotdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQordm9pZCBTbG90VmlzaXRvcjo6ZG9u
YXRlS25vd25QYXJhbGxlbCgpCit7CisgICAgZG9uYXRlS25vd25QYXJhbGxlbChtX2NvbGxlY3Rv
clN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrKTsKKyAgICBkb25hdGVL
bm93blBhcmFsbGVsKG1fbXV0YXRvclN0YWNrLCAqbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtT
dGFjayk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91
dCkKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgIAotICAgIHdoaWxlICgh
bV9zdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0Jl
dHdlZW5SZWJhbGFuY2UoKTsgbV9zdGFjay5jYW5SZW1vdmVMYXN0KCkgJiYgY291bnRkb3duLS07
KQotICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CisgICAg
d2hpbGUgKCghbV9jb2xsZWN0b3JTdGFjay5pc0VtcHR5KCkgfHwgIW1fbXV0YXRvclN0YWNrLmlz
RW1wdHkoKSkgJiYgIWhhc0VsYXBzZWQodGltZW91dCkpIHsKKyAgICAgICAgaWYgKCFtX2NvbGxl
Y3RvclN0YWNrLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5yZWZp
bGwoKTsKKyAgICAgICAgICAgIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayA9IGZhbHNlOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVy
T2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UoKTsgbV9jb2xsZWN0b3JTdGFjay5jYW5SZW1vdmVMYXN0
KCkgJiYgY291bnRkb3duLS07KQorICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4obV9jb2xs
ZWN0b3JTdGFjay5yZW1vdmVMYXN0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFtX211dGF0b3JT
dGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fbXV0YXRvclN0YWNrLnJlZmlsbCgpOwor
ICAgICAgICAgICAgLy8gV2Uga25vdyBmb3Igc3VyZSB0aGF0IHdlIGFyZSB2aXNpdGluZyBvYmpl
Y3RzIGJlY2F1c2Ugb2YgdGhlIGJhcnJpZXIsIG5vdCBiZWNhdXNlIG9mCisgICAgICAgICAgICAv
LyBtYXJraW5nLiBNYXJraW5nIHdpbGwgdmlzaXQgYW4gb2JqZWN0IGV4YWN0bHkgb25jZS4gVGhl
IGJhcnJpZXIgd2lsbCB2aXNpdCBpdAorICAgICAgICAgICAgLy8gcG9zc2libHkgbWFueSB0aW1l
cywgYW5kIGFsd2F5cyBhZnRlciBpdCB3YXMgYWxyZWFkeSBtYXJrZWQuCisgICAgICAgICAgICBt
X2lzVmlzaXRpbmdNdXRhdG9yU3RhY2sgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFu
Y2UoKTsgbV9tdXRhdG9yU3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAg
ICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKG1fbXV0YXRvclN0YWNrLnJlbW92ZUxhc3QoKSk7
CisgICAgICAgIH0KICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgpOwogICAgIH0KICAgICAK
ICAgICBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSBzaGFyZWREcmFpbk1vZGUpCitTbG90
VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChT
aGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7
CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAgCkBAIC0zOTIsNDggKzQxNiw2
MCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAg
ICAgICAgLy8gV2FpdCB1bnRpbCBlaXRoZXIgdGVybWluYXRpb24gaXMgcmVhY2hlZCwgb3IgdW50
aWwgdGhlcmUgaXMgc29tZSB3b3JrCiAgICAgICAgICAgICAgICAgLy8gZm9yIHVzIHRvIGRvLgog
ICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICho
YXNFbGFwc2VkKHRpbWVvdXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJl
ZERyYWluUmVzdWx0OjpUaW1lZE91dDsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIERpZCB3ZSByZWFjaCB0ZXJtaW5hdGlvbj8KICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycwotICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0
YWNrLT5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1faGVhcC5tX3NoYXJl
ZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTGV0IGFueSBzbGVlcGluZyBzbGF2ZXMga25vdyBpdCdzIHRpbWUgZm9yIHRoZW0gdG8gcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwLm1fbWFya2luZ0NvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNoYXJlZERyYWluUmVzdWx0OjpEb25lOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAvLyBJcyB0aGVyZSB3b3JrIHRvIGJlIGRvbmU/Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2hlYXAubV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2st
PmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHdhaXQuCi0gICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2sp
OworICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUu
d2FpdFVudGlsKGxvY2ssIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHNoYXJlZERyYWluTW9kZSA9PSBTbGF2
ZURyYWluKTsKKworICAgICAgICAgICAgICAgIGlmIChoYXNFbGFwc2VkKHRpbWVvdXQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gU2hhcmVkRHJhaW5SZXN1bHQ6OlRpbWVkT3V0OwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIERpZCB3ZSBkZXRlY3QgdGVybWluYXRp
b24/IElmIHNvLCBsZXQgdGhlIG1hc3RlciBrbm93LgogICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMKLSAgICAgICAgICAgICAgICAgICAg
JiYgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbV9oZWFwLm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCkKKyAgICAg
ICAgICAgICAgICAgICAgJiYgbV9oZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7CiAKLSAgICAgICAgICAgICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUud2FpdCgKLSAgICAgICAgICAgICAgICAgICAgbG9jaywKKyAgICAgICAgICAg
ICAgICBtX2hlYXAubV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGUud2FpdFVudGlsKAorICAgICAg
ICAgICAgICAgICAgICBsb2NrLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBbdGhpc10g
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2hlYXAubV9zaGFyZWRNYXJrU3Rh
Y2suaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1faGVhcC5tX3No
YXJlZENvbGxlY3Rvck1hcmtTdGFjay0+aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgIW1faGVhcC5tX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8vIElzIHRoZSBjdXJyZW50IHBoYXNlIGRvbmU/IElmIHNvLCByZXR1cm4gZnJv
bSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6RG9uZTsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCi0gICAgICAgICAgICAg
ICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJh
bGxlbE1hcmtlcnMpOworICAgICAgICAgICAgbV9jb2xsZWN0b3JTdGFjay5zdGVhbFNvbWVDZWxs
c0Zyb20oCisgICAgICAgICAgICAgICAgKm1faGVhcC5tX3NoYXJlZENvbGxlY3Rvck1hcmtTdGFj
aywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKKyAgICAgICAgICAg
IG1fbXV0YXRvclN0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKKyAgICAgICAgICAgICAgICAqbV9o
ZWFwLm1fc2hhcmVkTXV0YXRvck1hcmtTdGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFy
YWxsZWxNYXJrZXJzKTsKICAgICAgICAgICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxs
ZWxNYXJrZXJzKys7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxl
bE1hcmtlcnMtLTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZHJhaW4oKTsKKyAgICAg
ICAgZHJhaW4odGltZW91dCk7CiAgICAgfQogfQogCkBAIC00NTMsNyArNDg5LDYgQEAgdm9pZCBT
bG90VmlzaXRvcjo6YWRkT3BhcXVlUm9vdCh2b2lkKiBybwogYm9vbCBTbG90VmlzaXRvcjo6Y29u
dGFpbnNPcGFxdWVSb290KHZvaWQqIHJvb3QpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2lzSW5Q
YXJhbGxlbE1vZGUpOwotICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAgICAg
cmV0dXJuIG1faGVhcC5tX29wYXF1ZVJvb3RzLmNvbnRhaW5zKHJvb3QpOwogfQogCkBAIC00Njcs
MTMgKzUwMiw2IEBAIFRyaVN0YXRlIFNsb3RWaXNpdG9yOjpjb250YWluc09wYXF1ZVJvb3QKICAg
ICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKIH0KIAotaW50IFNsb3RWaXNpdG9yOjpvcGFxdWVSb290
Q291bnQoKQotewotICAgIEFTU0VSVCghbV9pc0luUGFyYWxsZWxNb2RlKTsKLSAgICBBU1NFUlQo
bV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOwotICAgIHJldHVybiBtX2hlYXAubV9vcGFxdWVSb290
cy5zaXplKCk7Ci19Ci0KIHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZk5lY2Vz
c2FyeSgpCiB7CiAgICAgaWYgKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKQpAQCAtNDk3LDE1ICs1
MjUsMTQgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKICAgICBkb25hdGVLbm93blBhcmFs
bGVsKCk7CiB9CiAKLXZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKCkKK3ZvaWQgU2xv
dFZpc2l0b3I6OmRvbmF0ZUFuZERyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkKIHsKICAgICBk
b25hdGUoKTsKLSAgICBkcmFpbigpOworICAgIGRyYWluKHRpbWVvdXQpOwogfQogCiB2b2lkIFNs
b3RWaXNpdG9yOjptZXJnZU9wYXF1ZVJvb3RzKCkKIHsKLSAgICBBU1NFUlQoIW1fb3BhcXVlUm9v
dHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gb3BhcXVlIHJvb3Rz
IGFyZSBub24tZW1wdHkuCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2hlYXAubV9vcGFxdWVSb290c011dGV4KTsKICAgICAgICAgZm9yIChhdXRvKiByb290IDog
bV9vcGFxdWVSb290cykKQEAgLTUyNiwxMCArNTUzLDkgQEAgdm9pZCBTbG90VmlzaXRvcjo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsRgogICAgICAgICBtX2hlYXAubV91bmNvbmRpdGlvbmFsRmluYWxp
emVycy5yZW1vdmVOZXh0KCktPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCk7CiB9CiAKLXZvaWQg
U2xvdFZpc2l0b3I6OmR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdAordm9pZCBTbG90VmlzaXRvcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIGZvciAoY29uc3QgSlNDZWxsKiBj
ZWxsIDogbWFya1N0YWNrKCkpCi0gICAgICAgIGRhdGFMb2coKmNlbGwsICJcbiIpOworICAgIG91
dC5wcmludCgiQ29sbGVjdG9yOiBbIiwgcG9pbnRlckxpc3REdW1wKGNvbGxlY3Rvck1hcmtTdGFj
aygpKSwgIl0sIE11dGF0b3I6IFsiLCBwb2ludGVyTGlzdER1bXAobXV0YXRvck1hcmtTdGFjaygp
KSwgIl0iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgog
I2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTcsOSArNTgsMTEgQEAgcHVibGljOgogICAgIFNs
b3RWaXNpdG9yKEhlYXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsKIAotICAgIE1hcmtTdGFja0Fy
cmF5JiBtYXJrU3RhY2soKSB7IHJldHVybiBtX3N0YWNrOyB9Ci0gICAgY29uc3QgTWFya1N0YWNr
QXJyYXkmIG1hcmtTdGFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2s7IH0KLQorICAgIE1hcmtT
dGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNr
OyB9CisgICAgTWFya1N0YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX211
dGF0b3JTdGFjazsgfQorICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3Rh
Y2soKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3RvclN0YWNrOyB9CisgICAgY29uc3QgTWFya1N0
YWNrQXJyYXkmIG11dGF0b3JNYXJrU3RhY2soKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGFj
azsgfQorICAgIAogICAgIFZNJiB2bSgpOwogICAgIGNvbnN0IFZNJiB2bSgpIGNvbnN0OwogICAg
IEhlYXAqIGhlYXAoKSBjb25zdDsKQEAgLTg0LDI0ICs4NywyMyBAQCBwdWJsaWM6CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRPcGFxdWVSb290KHZvaWQqKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CiAgICAgVHJpU3Rh
dGUgY29udGFpbnNPcGFxdWVSb290VHJpU3RhdGUodm9pZCopIGNvbnN0OwotICAgIGludCBvcGFx
dWVSb290Q291bnQoKTsKIAotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNF
bXB0eSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gbV9jb2xsZWN0b3JTdGFjay5p
c0VtcHR5KCkgJiYgbV9tdXRhdG9yU3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICB2b2lkIGRpZFN0
YXJ0TWFya2luZygpOwogICAgIHZvaWQgcmVzZXQoKTsKLSAgICB2b2lkIGNsZWFyTWFya1N0YWNr
KCk7CisgICAgdm9pZCBjbGVhck1hcmtTdGFja3MoKTsKIAogICAgIHNpemVfdCBieXRlc1Zpc2l0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVzVmlzaXRlZDsgfQotICAgIHNpemVfdCBieXRlc0Nv
cGllZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNDb3BpZWQ7IH0KICAgICBzaXplX3QgdmlzaXRD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlzaXRDb3VudDsgfQogCiAgICAgdm9pZCBkb25hdGUo
KTsKLSAgICB2b2lkIGRyYWluKCk7Ci0gICAgdm9pZCBkb25hdGVBbmREcmFpbigpOworICAgIHZv
aWQgZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0ID0gTW9ub3RvbmljVGltZTo6aW5maW5pdHko
KSk7CisgICAgdm9pZCBkb25hdGVBbmREcmFpbihNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25v
dG9uaWNUaW1lOjppbmZpbml0eSgpKTsKICAgICAKICAgICBlbnVtIFNoYXJlZERyYWluTW9kZSB7
IFNsYXZlRHJhaW4sIE1hc3RlckRyYWluIH07Ci0gICAgdm9pZCBkcmFpbkZyb21TaGFyZWQoU2hh
cmVkRHJhaW5Nb2RlKTsKKyAgICBlbnVtIGNsYXNzIFNoYXJlZERyYWluUmVzdWx0IHsgRG9uZSwg
VGltZWRPdXQgfTsKKyAgICBTaGFyZWREcmFpblJlc3VsdCBkcmFpbkZyb21TaGFyZWQoU2hhcmVk
RHJhaW5Nb2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQgPSBNb25vdG9uaWNUaW1lOjppbmZpbml0
eSgpKTsKIAogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCBmaW5h
bGl6ZVVuY29uZGl0aW9uYWxGaW5hbGl6ZXJzKCk7CkBAIC0xMjQsNiArMTI2LDggQEAgcHVibGlj
OgogICAgIAogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bV9tYXJraW5nVmVyc2lvbjsgfQogCisgICAgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzSWZOZWNlc3Nh
cnkoKTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsK
ICAgICAKQEAgLTE0MSwyMSArMTQ1LDIzIEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29udGFpbmVyVHlwZT4KICAgICB2b2lkIGFwcGVuZFRvTWFya1N0YWNrKENvbnRhaW5lclR5
cGUmLCBKU0NlbGwqKTsKICAgICAKKyAgICB2b2lkIGFwcGVuZFRvTXV0YXRvck1hcmtTdGFjayhj
b25zdCBKU0NlbGwqKTsKKyAgICAKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFw
Q2VsbCopOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290
cygpOwotICAgIHZvaWQgbWVyZ2VPcGFxdWVSb290c0lmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBt
ZXJnZU9wYXF1ZVJvb3RzSWZQcm9maXRhYmxlKCk7CiAKICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
Y29uc3QgSlNDZWxsKik7CiAgICAgCiAgICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKCk7Cisg
ICAgdm9pZCBkb25hdGVLbm93blBhcmFsbGVsKE1hcmtTdGFja0FycmF5JiBmcm9tLCBNYXJrU3Rh
Y2tBcnJheSYgdG8pOwogCi0gICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKKyAgICBNYXJrU3Rh
Y2tBcnJheSBtX2NvbGxlY3RvclN0YWNrOworICAgIE1hcmtTdGFja0FycmF5IG1fbXV0YXRvclN0
YWNrOwogICAgIE9wYXF1ZVJvb3RTZXQgbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBk
YXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogICAg
IAogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKLSAgICBzaXplX3QgbV9ieXRlc0NvcGllZDsK
ICAgICBzaXplX3QgbV92aXNpdENvdW50OwogICAgIGJvb2wgbV9pc0luUGFyYWxsZWxNb2RlOwog
ICAgIApAQCAtMTY1LDcgKzE3MSw3IEBAIHByaXZhdGU6CiAKICAgICBIZWFwU25hcHNob3RCdWls
ZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgeyBudWxscHRyIH07CiAgICAgSlNDZWxsKiBtX2N1
cnJlbnRDZWxsIHsgbnVsbHB0ciB9OwotICAgIENlbGxTdGF0ZSBtX29sZENlbGxTdGF0ZTsKKyAg
ICBib29sIG1faXNWaXNpdGluZ011dGF0b3JTdGFjayB7IGZhbHNlIH07CiAKIHB1YmxpYzoKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
NSwxMyArMTA1LDE1IEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphZGRVbmNvbmRpdGlvbmEK
IAogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChzaXpl
X3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChtX29sZENl
bGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlzaXRpbmdNdXRhdG9yU3RhY2spCisgICAg
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemUpOwogfQogCiAjaWYgRU5B
QkxFKFJFU09VUkNFX1VTQUdFKQogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChzaXplX3Qgc2l6ZSkKIHsKLSAgICBoZWFwKCktPnJlcG9ydEV4dGVy
bmFsTWVtb3J5VmlzaXRlZChtX29sZENlbGxTdGF0ZSwgc2l6ZSk7CisgICAgaWYgKCFtX2lzVmlz
aXRpbmdNdXRhdG9yU3RhY2spCisgICAgICAgIGhlYXAoKS0+cmVwb3J0RXh0ZXJuYWxNZW1vcnlW
aXNpdGVkKHNpemUpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAxLDcgKzQwMSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUK
ICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihBSFN0cnVjdHVyZUlESXNWYWxpZCk7CiAgICAg
ICAgIGNvcnJlY3RTdHJ1Y3R1cmUubGluaygmaml0KTsKIAotICAgICAgICBKdW1wIGNvcnJlY3RJ
bmRleGluZ1R5cGUgPSBqaXQuYnJhbmNoOChFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZGVzdCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1
cmVQdHItPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIEp1bXAgY29ycmVjdEluZGV4aW5nVHlw
ZSA9IGppdC5icmFuY2g4KEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBKU0Nl
bGw6OmluZGV4aW5nVHlwZUFuZE1pc2NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihzdHJ1Y3R1cmVQ
dHItPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkpOwogICAgICAgICBqaXQuYWJvcnRX
aXRoUmVhc29uKEFISW5kZXhpbmdUeXBlSXNWYWxpZCk7CiAgICAgICAgIGNvcnJlY3RJbmRleGlu
Z1R5cGUubGluaygmaml0KTsKIApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjplbWl0U3RvcmVTdHJ1Y3R1cmUKICAgICB9CiAjZWxzZQogICAgIC8vIERvIGEgMzItYml0
IHdpZGUgc3RvcmUgdG8gaW5pdGlhbGl6ZSB0aGUgY2VsbCdzIGZpZWxkcy4KLSAgICBqaXQuc3Rv
cmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5vYmplY3RJbml0aWFsaXphdGlvbkJsb2Io
KSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpKTsKKyAgICBqaXQuc3RvcmUzMihUcnVzdGVkSW1tMzIoc3RydWN0dXJlUHRyLT5vYmpl
Y3RJbml0aWFsaXphdGlvbkJsb2IoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpT
Q2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSk7CiAgICAgaml0LnN0b3JlUHRyKHN0
cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOCw4ICsx
MzE4LDggQEAgcHVibGljOgogICAgICAgICBzdG9yZTY0KHNjcmF0Y2gsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwogI2Vsc2UKICAg
ICAgICAgLy8gU3RvcmUgYWxsIHRoZSBpbmZvIGZsYWdzIHVzaW5nIGEgc2luZ2xlIDMyLWJpdCB3
aWRlIGxvYWQgYW5kIHN0b3JlLgotICAgICAgICBsb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7
Ci0gICAgICAgIHN0b3JlMzIoc2NyYXRjaCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwg
SlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQoKSkpOworICAgICAgICBsb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICBzdG9yZTMyKHNjcmF0Y2gsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRlc3QsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09m
ZnNldCgpKSk7CiAKICAgICAgICAgLy8gU3RvcmUgdGhlIFN0cnVjdHVyZUlECiAgICAgICAgIHN0
b3JlUHRyKHN0cnVjdHVyZSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7CkBAIC0xMzU2LDE0ICsxMzU2LDQwIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlQ29uY3VycmVudEJhcnJpZXJzKCkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEp1bXAgb2sgPSBqdW1wSWZCYXJyaWVyU3RvcmVMb2Fk
RmVuY2VOb3ROZWVkZWQoKTsKKyAgICAgICAgSnVtcCBvayA9IGp1bXBJZk11dGF0b3JGZW5jZU5v
dE5lZWRlZCgpOwogICAgICAgICBtZW1vcnlGZW5jZSgpOwogICAgICAgICBvay5saW5rKHRoaXMp
OwogICAgIH0KICAgICAKLSAgICBKdW1wIGp1bXBJZkJhcnJpZXJTdG9yZUxvYWRGZW5jZU5vdE5l
ZWRlZCgpCisgICAgdm9pZCBtdXRhdG9yRmVuY2UoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5oZWFwLmFkZHJlc3NPZkJhcnJp
ZXJTaG91bGRCZUZlbmNlZCgpKSk7CisgICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBKdW1wIG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7
CisgICAgICAgIHN0b3JlRmVuY2UoKTsKKyAgICAgICAgb2subGluayh0aGlzKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzdG9yZUJ1dHRlcmZseShHUFJSZWcgYnV0dGVyZmx5LCBHUFJSZWcgb2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgaWYgKGlzWDg2KCkpIHsKKyAgICAgICAgICAgIHN0b3JlUHRy
KGJ1dHRlcmZseSwgQWRkcmVzcyhvYmplY3QsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKdW1w
IG9rID0ganVtcElmTXV0YXRvckZlbmNlTm90TmVlZGVkKCk7CisgICAgICAgIHN0b3JlRmVuY2Uo
KTsKKyAgICAgICAgc3RvcmVQdHIoYnV0dGVyZmx5LCBBZGRyZXNzKG9iamVjdCwgSlNPYmplY3Q6
OmJ1dHRlcmZseU9mZnNldCgpKSk7CisgICAgICAgIHN0b3JlRmVuY2UoKTsKKyAgICAgICAgSnVt
cCBkb25lID0ganVtcCgpOworICAgICAgICBvay5saW5rKHRoaXMpOworICAgICAgICBzdG9yZVB0
cihidXR0ZXJmbHksIEFkZHJlc3Mob2JqZWN0LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0KKyAgICAKKyAgICBKdW1wIGp1bXBJ
Zk11dGF0b3JGZW5jZU5vdE5lZWRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gYnJhbmNoVGVz
dDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmhlYXAuYWRkcmVzc09mTXV0YXRvclNob3Vs
ZEJlRmVuY2VkKCkpKTsKICAgICB9CiAgICAgCiAgICAgLy8gRW1pdHMgdGhlIGJyYW5jaCBzdHJ1
Y3R1cmUgZm9yIHR5cGVvZi4gVGhlIGNvZGUgZW1pdHRlZCBieSB0aGlzIGRvZXNuJ3QgZmFsbCB0
aHJvdWdoLiBUaGUKQEAgLTE1ODksNyArMTYxNSwyOSBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRB
bGxvY2F0ZUpTT2JqZWN0PENsYXNzVHlwZT4ocmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSksIFRydXN0ZWRJbW1QdHIoMCksIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1Bh
dGgpOwogICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCkpLCBBZGRyZXNzKHJlc3VsdEdQUiwgSlNEZXN0cnVjdGlibGVPYmplY3Q6OmNsYXNzSW5mb09m
ZnNldCgpKSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9y
YWdlKEdQUlJlZyBiYXNlR1BSLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmxpbmVDYXBhY2l0eTsgKytpKQorICAgICAg
ICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoSlNWYWx1ZSgpLCBBZGRyZXNzKGJhc2VHUFIsIEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSArIGkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSk7CisgICAgfQogCisgICAgdm9pZCBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UoR1BSUmVn
IGJhc2VHUFIsIEdQUlJlZyBpbmxpbmVDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIEp1bXAgZW1w
dHkgPSBicmFuY2hUZXN0MzIoWmVybywgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMYWJlbCBs
b29wID0gbGFiZWwoKTsKKyAgICAgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmxpbmVDYXBh
Y2l0eSk7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKEpTVmFsdWUoKSwgQmFzZUluZGV4KGJh
c2VHUFIsIGlubGluZUNhcGFjaXR5LCBUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkpKTsKKyAgICAgICAgYnJhbmNoVGVzdDMyKE5vblplcm8sIGlubGluZUNhcGFj
aXR5KS5saW5rVG8obG9vcCwgdGhpcyk7CisgICAgICAgIGVtcHR5LmxpbmsodGhpcyk7CisgICAg
fQorCisgICAgdm9pZCBlbWl0SW5pdGlhbGl6ZU91dE9mTGluZVN0b3JhZ2UoR1BSUmVnIGJ1dHRl
cmZseUdQUiwgdW5zaWduZWQgb3V0T2ZMaW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgb3V0T2ZMaW5lQ2FwYWNpdHk7ICsraSkKKyAgICAgICAgICAg
IHN0b3JlVHJ1c3RlZFZhbHVlKEpTVmFsdWUoKSwgQWRkcmVzcyhidXR0ZXJmbHlHUFIsIC1zaXpl
b2YoSW5kZXhpbmdIZWFkZXIpIC0gKGkgKyAxKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
KyAgICB9CisgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIHdhbmdzSW50NjRIYXNo
KEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTk5Niw3ICs5OTYsNyBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRBcnJheVByb2ZpbGluZ1NpdGVX
CiAgICAgICAgIHN0b3JlMzIoaW5kZXhpbmdUeXBlLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxh
c3RTZWVuU3RydWN0dXJlSUQoKSk7CiAgICAgfQogCi0gICAgbG9hZDgoQWRkcmVzcyhjZWxsLCBK
U0NlbGw6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgaW5kZXhpbmdUeXBlKTsKKyAgICBsb2FkOChB
ZGRyZXNzKGNlbGwsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpKSwgaW5kZXhp
bmdUeXBlKTsKIH0KIAogaW5saW5lIHZvaWQgSklUOjplbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9y
Qnl0ZWNvZGVJbmRleFdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBpbmRleGlu
Z1R5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
MDEsOCArMjIwMSwxMCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVC
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogCiAgICAgQVNT
RVJUKCFvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBCdXR0
ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+Z3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSk7Ci0gICAgb2JqZWN0LT5zZXRCdXR0ZXJmbHlXaXRob3V0Q2hh
bmdpbmdTdHJ1Y3R1cmUodm0sIHJlc3VsdCk7CisgICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmpl
Y3QtPmFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIDAsIGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBvYmplY3QtPnNldEJ1
dHRlcmZseSh2bSwgcmVzdWx0KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0yMjExLDggKzIy
MTMsMTAgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9jYXRlQgogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0s
IGV4ZWMpOwogCi0gICAgQnV0dGVyZmx5KiByZXN1bHQgPSBvYmplY3QtPmdyb3dPdXRPZkxpbmVT
dG9yYWdlKHZtLCBvYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCBuZXdT
aXplKTsKLSAgICBvYmplY3QtPnNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2
bSwgcmVzdWx0KTsKKyAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IG9iamVjdC0+YWxsb2NhdGVNb3Jl
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSwgbmV3U2l6ZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBvYmplY3Qt
PnNldEJ1dHRlcmZseSh2bSwgcmVzdWx0KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGkKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlw
ZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdFdyaXRlQmFy
cmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CiAgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0
dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbi4KICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAgICAgICAgICAg
IApAQCAtMTAxNiw2ICsxMDE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aQogICAgICAgICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwogICAgICAg
ICAgICAgbmVnUHRyKHJlZ1QxKTsKICAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBA
IC0xMDI0LDcgKzEwMjQsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1
Y3RpCiAgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFu
dFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJh
cnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAg
ICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZl
VHlwZSkpOwogICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5p
dGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8
IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkg
ewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNh
dXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0
aWNhbGx5LgpAQCAtMTAzOCwxNCArMTAzNywxNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoSW5zdHJ1Y3RpCiAgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5k
aXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgYml0d2lz
ZV9jYXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlvbls1XSkpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3Rh
bnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
VmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CiAgICAgICAgICAgICBlbWl0UHV0Q2xvc3VyZVZhcihz
Y29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hw
b2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3BlLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxl
VmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0xMTU3LDExICsxMTU3LDExIEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHIKICAgICBpbnQgaW5kZXggPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVu
dHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgCiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMSk7CiAgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJn
dW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5r
bm93bj4pKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3Vs
ZEZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA4NjUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw2ICsxNzgsMTUgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYg
dm0pCiAgICAgU1RBVElDX0FTU0VSVChFdmFsQ29kZSA9PSAxKTsKICAgICBTVEFUSUNfQVNTRVJU
KEZ1bmN0aW9uQ29kZSA9PSAyKTsKICAgICBTVEFUSUNfQVNTRVJUKE1vZHVsZUNvZGUgPT0gMyk7
CisgICAgCisgICAgU1RBVElDX0FTU0VSVChJc0FycmF5ID09IDB4MDEpOworICAgIFNUQVRJQ19B
U1NFUlQoSW5kZXhpbmdTaGFwZU1hc2sgPT0gMHgwRSk7CisgICAgU1RBVElDX0FTU0VSVChOb0lu
ZGV4aW5nU2hhcGUgPT0gMHgwMCk7CisgICAgU1RBVElDX0FTU0VSVChJbnQzMlNoYXBlID09IDB4
MDQpOworICAgIFNUQVRJQ19BU1NFUlQoRG91YmxlU2hhcGUgPT0gMHgwNik7CisgICAgU1RBVElD
X0FTU0VSVChDb250aWd1b3VzU2hhcGUgPT0gMHgwOCk7CisgICAgU1RBVElDX0FTU0VSVChBcnJh
eVN0b3JhZ2VTaGFwZSA9PSAweDBBKTsKKyAgICBTVEFUSUNfQVNTRVJUKFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZSA9PSAweDBDKTsKIAogICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8cHRy
ZGlmZl90PigocmVpbnRlcnByZXRfY2FzdDxXcml0ZUJhcnJpZXI8SlNDZWxsPio+KDB4NDAwMCkt
PnNsb3QoKSkpIC0gMHg0MDAwKSk7CiAgICAgc3RhdGljX2Fzc2VydChQdXRCeUlkUHJpbWFyeVR5
cGVNYXNrID09IDB4NiwgIkxMSW50IGFzc3VtZXMgUHV0QnlJZFByaW1hcnlUeXBlTWFzayBpcyA9
PSAweDYiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTUwNSw2ICsxNTA1LDcgQEAgX2xsaW50X29wX2dldF9ieV92YWw6CiAub3BHZXRCeVZh
bE91dE9mQm91bmRzOgogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDQsIHQwKQogICAgIHN0b3Jl
YiAxLCBBcnJheVByb2ZpbGU6Om1fb3V0T2ZCb3VuZHNbdDBdCisgICAgam1wIC5vcEdldEJ5VmFs
U2xvdwogCiAub3BHZXRCeVZhbE5vdEluZGV4ZWRTdG9yYWdlOgogICAgICMgRmlyc3QgbGV0cyBj
aGVjayBpZiB3ZSBldmVuIGhhdmUgYSB0eXBlZCBhcnJheS4gVGhpcyBsZXRzIHVzIGRvIHNvbWUg
Ym9pbGVycGxhdGUgdXAgZnJvbnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDg2NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtp
bmcgY29weSkKQEAgLTMzMywxNCArMzMzLDE0IEBAIGVsc2UKIGVuZAogCiAjIENvbnN0YW50IGZv
ciByZWFzb25pbmcgYWJvdXQgYnV0dGVyZmxpZXMuCi1jb25zdCBJc0FycmF5ICAgICAgICAgICAg
ICAgICAgPSAxCi1jb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAzMAotY29uc3QgTm9J
bmRleGluZ1NoYXBlICAgICAgICAgID0gMAotY29uc3QgSW50MzJTaGFwZSAgICAgICAgICAgICAg
ID0gMjAKLWNvbnN0IERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDIyCi1jb25zdCBDb250aWd1
b3VzU2hhcGUgICAgICAgICAgPSAyNgotY29uc3QgQXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0g
MjgKLWNvbnN0IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDMwCitjb25zdCBJc0FycmF5ICAg
ICAgICAgICAgICAgICAgPSAweDAxCitjb25zdCBJbmRleGluZ1NoYXBlTWFzayAgICAgICAgPSAw
eDBFCitjb25zdCBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgPSAweDAwCitjb25zdCBJbnQzMlNo
YXBlICAgICAgICAgICAgICAgPSAweDA0Citjb25zdCBEb3VibGVTaGFwZSAgICAgICAgICAgICAg
PSAweDA2Citjb25zdCBDb250aWd1b3VzU2hhcGUgICAgICAgICAgPSAweDA4Citjb25zdCBBcnJh
eVN0b3JhZ2VTaGFwZSAgICAgICAgPSAweDBBCitjb25zdCBTbG93UHV0QXJyYXlTdG9yYWdlU2hh
cGUgPSAweDBDCiAKICMgVHlwZSBjb25zdGFudHMuCiBjb25zdCBTdHJpbmdUeXBlID0gNgpAQCAt
ODg3LDcgKzg4Nyw3IEBAIG1hY3JvIGFycmF5UHJvZmlsZShjZWxsQW5kSW5kZXhpbmdUeXBlLCAK
ICAgICBjb25zdCBpbmRleGluZ1R5cGUgPSBjZWxsQW5kSW5kZXhpbmdUeXBlIAogICAgIGxvYWRp
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFtjZWxsXSwgc2NyYXRjaAogICAgIHN0b3JlaSBzY3JhdGNo
LCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1cmVJRFtwcm9maWxlXQotICAgIGxvYWRi
IEpTQ2VsbDo6bV9pbmRleGluZ1R5cGVbY2VsbF0sIGluZGV4aW5nVHlwZQorICAgIGxvYWRiIEpT
Q2VsbDo6bV9pbmRleGluZ1R5cGVBbmRNaXNjW2NlbGxdLCBpbmRleGluZ1R5cGUKIGVuZAogCiBt
YWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzbG93UGF0aCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZs
eUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQCBpbmxpbmUgQnV0dGVy
Zmx5KiBCdXR0ZXJmbHk6OmNyZWF0ZShWTSYgCiAgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzKTsKICAgICBpZiAoaGFzSW5kZXhpbmdIZWFkZXIpCiAgICAgICAgICpyZXN1bHQtPmlu
ZGV4aW5nSGVhZGVyKCkgPSBpbmRleGluZ0hlYWRlcjsKKyAgICBtZW1zZXQocmVzdWx0LT5wcm9w
ZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5Q2FwYWNpdHksIDAsIHByb3BlcnR5Q2FwYWNpdHkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDUs
NiArMTA2LDEwIEBAIGlubGluZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm8KICAg
ICAgICAgcmVzdWx0LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIG9sZFByb3BlcnR5Q2FwYWNpdHksCiAg
ICAgICAgIG9sZEJ1dHRlcmZseS0+cHJvcGVydHlTdG9yYWdlKCkgLSBvbGRQcm9wZXJ0eUNhcGFj
aXR5LAogICAgICAgICB0b3RhbFNpemUoMCwgb2xkUHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhp
bmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKSk7CisgICAgbWVtc2V0KAorICAg
ICAgICByZXN1bHQtPnByb3BlcnR5U3RvcmFnZSgpIC0gbmV3UHJvcGVydHlDYXBhY2l0eSwKKyAg
ICAgICAgMCwKKyAgICAgICAgKG5ld1Byb3BlcnR5Q2FwYWNpdHkgLSBvbGRQcm9wZXJ0eUNhcGFj
aXR5KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTUgKzk0LDcgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCiAg
ICAgRGVmZXJHQyBtX2RlZmVyR0M7Ci0jZWxzZQotICAgIHN0cnVjdCBOb0RlZmVyIHsKLSAgICAg
ICAgTm9EZWZlcihIZWFwJiBoZWFwKSA6IG1faGVhcChoZWFwKSB7IH0KLSAgICAgICAgSGVhcCYg
bV9oZWFwOwotICAgIH07Ci0gICAgTm9EZWZlciBtX2RlZmVyR0M7Ci0jZW5kaWYKIH07CiAKIGNs
YXNzIENvbmN1cnJlbnRKSVRMb2NrZXIgOiBwdWJsaWMgQ29uY3VycmVudEpJVExvY2tlckJhc2Ug
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5l
cmljQXJndW1lbnRzSW5saW5lcy5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NiwxMSArNjYsMTMgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+OjpnZXRPd25Q
cm9wZQogICAgIFR5cGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8VHlwZSo+KG9iamVjdCk7CiAgICAg
CiAgICAgaWYgKHRoaXNPYmplY3QtPmNhbkFjY2Vzc0luZGV4UXVpY2tseShpbmRleCkpIHsKLSAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0LCBOb25lLCB0aGlzT2JqZWN0LT5nZXRJbmRl
eFF1aWNrbHkoaW5kZXgpKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaW5kZXgpOworICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3Qs
IE5vbmUsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gQmFzZTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmplY3QsIGV4ZWMsIGluZGV4
LCBzbG90KTsKKyAgICBib29sIHJlc3VsdCA9IEJhc2U6OmdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgob2JqZWN0LCBleGVjLCBpbmRleCwgc2xvdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTEyOSw3ICsxMzEsNyBAQCBib29sIEdlbmVyaWNB
cmd1bWVudHM8VHlwZT46OnB1dEJ5SW5kZXgoCiB7CiAgICAgVHlwZSogdGhpc09iamVjdCA9IGpz
Q2FzdDxUeXBlKj4oY2VsbCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLQorICAgIAogICAg
IGlmICh0aGlzT2JqZWN0LT5jYW5BY2Nlc3NJbmRleFF1aWNrbHkoaW5kZXgpKSB7CiAgICAgICAg
IHRoaXNPYmplY3QtPnNldEluZGV4UXVpY2tseSh2bSwgaW5kZXgsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRleGlu
Z1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmRl
eGluZ1R5cGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5kZXhpbmdUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
TG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC01MiwyMSArNTMsMjUgQEAgdHlwZWRlZiB1aW50OF90IEluZGV4aW5nVHlw
ZTsKIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgSXNBcnJheSAgICAgICAgICAgICAgICAgID0g
MHgwMTsKIAogLy8gVGhlIHNoYXBlIG9mIHRoZSBpbmRleGVkIHByb3BlcnR5IHN0b3JhZ2UuCi1z
dGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICA9IDB4MEU7
Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIE5vSW5kZXhpbmdTaGFwZSAgICAgICAgICA9IDB4
MDA7Ci1zdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIFVuZGVjaWRlZFNoYXBlICAgICAgICAgICA9
IDB4MDI7IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJheXMuCi1zdGF0aWMgY29uc3QgSW5kZXhpbmdU
eXBlIEludDMyU2hhcGUgICAgICAgICAgICAgICA9IDB4MDQ7Ci1zdGF0aWMgY29uc3QgSW5kZXhp
bmdUeXBlIERvdWJsZVNoYXBlICAgICAgICAgICAgICA9IDB4MDY7Ci1zdGF0aWMgY29uc3QgSW5k
ZXhpbmdUeXBlIENvbnRpZ3VvdXNTaGFwZSAgICAgICAgICA9IDB4MDg7Ci1zdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFycmF5U3RvcmFnZVNoYXBlICAgICAgICA9IDB4MEE7Ci1zdGF0aWMgY29u
c3QgSW5kZXhpbmdUeXBlIFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSA9IDB4MEM7CitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEluZGV4aW5nU2hhcGVNYXNrICAgICAgICAgICAgICAgPSAweDBF
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBOb0luZGV4aW5nU2hhcGUgICAgICAgICAgICAg
ICAgID0gMHgwMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgVW5kZWNpZGVkU2hhcGUgICAg
ICAgICAgICAgICAgICA9IDB4MDI7IC8vIE9ubHkgdXNlZnVsIGZvciBhcnJheXMuCitzdGF0aWMg
Y29uc3QgSW5kZXhpbmdUeXBlIEludDMyU2hhcGUgICAgICAgICAgICAgICAgICAgICAgPSAweDA0
Oworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlwZSBEb3VibGVTaGFwZSAgICAgICAgICAgICAgICAg
ICAgID0gMHgwNjsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgQ29udGlndW91c1NoYXBlICAg
ICAgICAgICAgICAgICA9IDB4MDg7CitzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFycmF5U3Rv
cmFnZVNoYXBlICAgICAgICAgICAgICAgPSAweDBBOworc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgICAgICAgID0gMHgwQzsKIAotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgPSAxOwotc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBOdW1iZXJPZkluZGV4aW5nU2hhcGVzICAgPSA3Oworc3RhdGljIGNvbnN0
IEluZGV4aW5nVHlwZSBJbmRleGluZ1NoYXBlU2hpZnQgICAgICAgICAgICAgID0gMTsKK3N0YXRp
YyBjb25zdCBJbmRleGluZ1R5cGUgTnVtYmVyT2ZJbmRleGluZ1NoYXBlcyAgICAgICAgICA9IDc7
CiAKIC8vIEFkZGl0aW9uYWwgZmxhZ3MgZm9yIHRyYWNraW5nIHRoZSBoaXN0b3J5IG9mIHRoZSB0
eXBlLiBUaGVzZSBhcmUgdXN1YWxseQogLy8gbWFza2VkIG9mZiB1bmxlc3MgeW91IGFzayBmb3Ig
dGhlbSBkaXJlY3RseS4KLXN0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4ZWRB
Y2Nlc3NvcnMgID0gMHgxMDsKK3N0YXRpYyBjb25zdCBJbmRleGluZ1R5cGUgTWF5SGF2ZUluZGV4
ZWRBY2Nlc3NvcnMgICAgICAgICA9IDB4MTA7CisKKy8vIFRoZSBJbmRleGluZ1R5cGUgZmllbGQg
b2YgSlNDZWxscyBpcyBzdG9sZW4gZm9yIGxvY2tzLgorc3RhdGljIGNvbnN0IEluZGV4aW5nVHlw
ZSBJbmRleGluZ1R5cGVMb2NrSXNIZWxkICAgICAgICAgID0gMHgyMDsKK3N0YXRpYyBjb25zdCBJ
bmRleGluZ1R5cGUgSW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZCAgICAgICA9IDB4NDA7CiAKIC8v
IExpc3Qgb2YgYWNjZXB0YWJsZSBhcnJheSB0eXBlcy4KIHN0YXRpYyBjb25zdCBJbmRleGluZ1R5
cGUgTm9uQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDsKQEAgLTE3Nyw0ICsxODIs
NiBAQCBzdGF0aWMgY29uc3QgSW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXMgCiAvLyBNYXNrIG9m
IGFsbCBwb3NzaWJsZSB0eXBlcyBpbmNsdWRpbmcgdGhlIGhpc3RvcnkuCiBzdGF0aWMgY29uc3Qg
SW5kZXhpbmdUeXBlIEFsbEFycmF5VHlwZXNBbmRIaXN0b3J5ICA9IEFsbEFycmF5VHlwZXMgfCBN
YXlIYXZlSW5kZXhlZEFjY2Vzc29yczsKIAordHlwZWRlZiBMb2NrQWxnb3JpdGhtPEluZGV4aW5n
VHlwZSwgSW5kZXhpbmdUeXBlTG9ja0lzSGVsZCwgSW5kZXhpbmdUeXBlTG9ja0hhc1BhcmtlZD4g
SW5kZXhpbmdUeXBlTG9ja0FsZ29yaXRobTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5MCw3ICszOTAsOSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dD
YXNlKFZNJiB2CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVu
Z3RoKG5ld1ZlY3Rvckxlbmd0aCk7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+
bV9pbmRleEJpYXMgPSBuZXdJbmRleEJpYXM7CiAgICAgCi0gICAgc2V0QnV0dGVyZmx5V2l0aG91
dENoYW5naW5nU3RydWN0dXJlKHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgCisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMDYzLDEzICsxMDY1LDE1IEBAIGJvb2wgSlNBcnJheTo6
dW5zaGlmdENvdW50V2l0aEFycmF5U3RvcmEKICAgICAvLyBOZWVkIHRvIGhhdmUgR0MgZGVmZXJy
ZWQgYXJvdW5kIHRoZSB1bnNoaWZ0Q291bnRTbG93Q2FzZSgpLCBzaW5jZSB0aGF0IGxlYXZlcyB0
aGUgYnV0dGVyZmx5IGluCiAgICAgLy8gYSB3ZWlyZCBzdGF0ZTogc29tZSBwYXJ0cyBvZiBpdCB3
aWxsIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgd2hpY2ggd2Ugd2lsbCBmaWxsIGluIGhlcmUuCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIEpTQ2VsbDo6SW50ZXJuYWxMb2NrZXIg
bG9ja2VyKHRoaXMpOwogICAgIAogICAgIGlmIChtb3ZlRnJvbnQgJiYgc3RvcmFnZS0+bV9pbmRl
eEJpYXMgPj0gY291bnQpIHsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBzdG9y
YWdlLT5idXR0ZXJmbHkoKS0+dW5zaGlmdChzdHJ1Y3R1cmUoKSwgY291bnQpOwogICAgICAgICBz
dG9yYWdlID0gbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKTsKICAgICAgICAgc3RvcmFnZS0+
bV9pbmRleEJpYXMgLT0gY291bnQ7CiAgICAgICAgIHN0b3JhZ2UtPnNldFZlY3Rvckxlbmd0aCh2
ZWN0b3JMZW5ndGggKyBjb3VudCk7Ci0gICAgICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2lu
Z1N0cnVjdHVyZSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogICAgIH0gZWxz
ZSBpZiAoIW1vdmVGcm9udCAmJiB2ZWN0b3JMZW5ndGggLSBsZW5ndGggPj0gY291bnQpCiAgICAg
ICAgIHN0b3JhZ2UgPSBzdG9yYWdlLT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CiAgICAg
ZWxzZSBpZiAodW5zaGlmdENvdW50U2xvd0Nhc2Uodm0sIGRlZmVyR0MsIG1vdmVGcm9udCwgY291
bnQpKQpAQCAtMTA5MCw2ICsxMDk0LDcgQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnRXaXRo
QXJyYXlTdG9yYQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAg
ICAgICAgIHZlY3RvcltpICsgc3RhcnRJbmRleF0uY2xlYXIoKTsKKyAgICAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJl
dmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsOCArMTAwLDMyIEBAIHB1YmxpYzoKICAgICBib29sIGlz
UHJveHkoKSBjb25zdDsKICAgICBib29sIGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0
OwogICAgIGJvb2wgaXNBUElWYWx1ZVdyYXBwZXIoKSBjb25zdDsKKyAgICAKKyAgICAvLyBFYWNo
IGNlbGwgaGFzIGEgYnVpbHQtaW4gbG9jay4gQ3VycmVudGx5IGl0J3Mgc2ltcGx5IGF2YWlsYWJs
ZSBmb3IgdXNlIGlmIHlvdSBuZWVkIGl0LiBJdCdzCisgICAgLy8gYSBmdWxsLWJsb3duIFdURjo6
TG9jay4gTm90ZSB0aGF0IHRoaXMgbG9jayBpcyBjdXJyZW50bHkgdXNlZCBpbiBKU0FycmF5IGFu
ZCB0aGF0IGxvY2sncworICAgIC8vIG9yZGVyaW5nIHdpdGggdGhlIFN0cnVjdHVyZSBsb2NrIGlz
IHRoYXQgdGhlIFN0cnVjdHVyZSBsb2NrIG11c3QgYmUgYWNxdWlyZWQgZmlyc3QuCisgICAgdm9p
ZCBsb2NrSW50ZXJuYWxMb2NrKCk7CisgICAgdm9pZCB1bmxvY2tJbnRlcm5hbExvY2soKTsKKyAg
ICAKKyAgICBjbGFzcyBJbnRlcm5hbExvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICBJbnRl
cm5hbExvY2tlcihKU0NlbGwqIGNlbGwpCisgICAgICAgICAgICA6IG1fY2VsbChjZWxsKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2NlbGwtPmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgfkludGVybmFsTG9ja2VyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9jZWxsLT51bmxvY2tJbnRlcm5hbExvY2soKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBKU0NlbGwqIG1fY2VsbDsKKyAgICB9OwogCiAgICAgSlNU
eXBlIHR5cGUoKSBjb25zdDsKKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygp
IGNvbnN0OwogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1
Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0OwpAQCAtMTY3LDYgKzE5MSwxNiBAQCBwdWJs
aWM6CiAgICAgQ2VsbFN0YXRlIGNlbGxTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFN0YXRl
OyB9CiAgICAgCiAgICAgdm9pZCBzZXRDZWxsU3RhdGUoQ2VsbFN0YXRlIGRhdGEpIGNvbnN0IHsg
Y29uc3RfY2FzdDxKU0NlbGwqPih0aGlzKS0+bV9jZWxsU3RhdGUgPSBkYXRhOyB9CisgICAgCisg
ICAgYm9vbCBhdG9taWNDb21wYXJlRXhjaGFuZ2VDZWxsU3RhdGVXZWFrUmVsYXhlZChDZWxsU3Rh
dGUgb2xkU3RhdGUsIENlbGxTdGF0ZSBuZXdTdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OmF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWtSZWxheGVkKCZtX2NlbGxTdGF0ZSwgb2xkU3Rh
dGUsIG5ld1N0YXRlKTsKKyAgICB9CisKKyAgICBDZWxsU3RhdGUgYXRvbWljQ29tcGFyZUV4Y2hh
bmdlQ2VsbFN0YXRlU3Ryb25nKENlbGxTdGF0ZSBvbGRTdGF0ZSwgQ2VsbFN0YXRlIG5ld1N0YXRl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6YXRvbWljQ29tcGFyZUV4Y2hhbmdlU3Ryb25n
KCZtX2NlbGxTdGF0ZSwgb2xkU3RhdGUsIG5ld1N0YXRlKTsKKyAgICB9CiAKICAgICBzdGF0aWMg
cHRyZGlmZl90IHN0cnVjdHVyZUlET2Zmc2V0KCkKICAgICB7CkBAIC0xODMsOSArMjE3LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fdHlwZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVPZmZzZXQoKQorICAg
IC8vIERPIE5PVCBzdG9yZSB0byB0aGlzIGZpZWxkLiBBbHdheXMgdXNlIGEgQ0FTIGxvb3AsIHNp
bmNlIHNvbWUgYml0cyBhcmUgZmxpcHBlZCB1c2luZyBDQVMKKyAgICAvLyBmcm9tIG90aGVyIHRo
cmVhZHMgZHVlIHRvIHRoZSBpbnRlcm5hbCBsb2NrLiBPbmUgZXhjZXB0aW9uOiB5b3UgZG9uJ3Qg
bmVlZCB0aGUgQ0FTIGlmIHRoZQorICAgIC8vIG9iamVjdCBoYXMgbm90IGVzY2FwZWQgeWV0Lgor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhpbmdUeXBlQW5kTWlzY09mZnNldCgpCiAgICAgewot
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGUpOwor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9pbmRleGluZ1R5cGVBbmRN
aXNjKTsKICAgICB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IGNlbGxTdGF0ZU9mZnNldCgpCkBA
IC0yMjgsNyArMjY1LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCiAgICAgU3RydWN0dXJlSUQgbV9zdHJ1Y3R1cmVJRDsKLSAgICBJbmRleGlu
Z1R5cGUgbV9pbmRleGluZ1R5cGU7CisgICAgSW5kZXhpbmdUeXBlIG1faW5kZXhpbmdUeXBlQW5k
TWlzYzsgLy8gRE8gTk9UIHN0b3JlIHRvIHRoaXMgZmllbGQuIEFsd2F5cyBDQVMuCiAgICAgSlNU
eXBlIG1fdHlwZTsKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIG1fZmxhZ3M7CiAgICAg
Q2VsbFN0YXRlIG1fY2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbElubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ3LDcgKzQ3LDcgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKENyZWF0aW5nRWFybHlDZWxs
VAogCiBpbmxpbmUgSlNDZWxsOjpKU0NlbGwoVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICA6IG1fc3RydWN0dXJlSUQoc3RydWN0dXJlLT5pZCgpKQotICAgICwgbV9pbmRleGluZ1R5cGUo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAsIG1faW5kZXhpbmdUeXBlQW5kTWlzYyhz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKSkKICAgICAsIG1fdHlwZShz
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKQogICAgICwgbV9mbGFncyhzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpCiAgICAgLCBtX2NlbGxTdGF0ZShDZWxsU3RhdGU6
Ok5ld1doaXRlKQpAQCAtNTcsNiArNTcsMTAgQEAgaW5saW5lIEpTQ2VsbDo6SlNDZWxsKFZNJiwg
U3RydWN0dXJlKiBzdAogCiBpbmxpbmUgdm9pZCBKU0NlbGw6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKIHsKKyAgICAvLyBUaGlzIG9iamVjdCBpcyByZWFkeSB0byBiZSBlc2NhcGVkIHNvIHRoZSBj
b25jdXJyZW50IEdDIG1heSBzZWUgaXQgYXQgYW55IHRpbWUuIFdlIGhhdmUKKyAgICAvLyB0byBt
YWtlIHN1cmUgdGhhdCBub25lIG9mIG91ciBzdG9yZXMgc2luayBiZWxvdyBoZXJlLgorICAgIGlm
IChpc1g4NigpIHx8IFVOTElLRUxZKHZtLmhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpKQor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9O
KQogICAgIEFTU0VSVCh2bS5pc0luaXRpYWxpemluZ09iamVjdCgpKTsKICAgICB2bS5zZXRJbml0
aWFsaXppbmdPYmplY3RDbGFzcygwKTsKQEAgLTc0LDcgKzc4LDcgQEAgaW5saW5lIHZvaWQgSlND
ZWxsOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogICAgIGlmIChzdHJ1Y3R1cmUpIHsKICNlbmRpZgog
ICAgICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5pZCgpOwotICAgICAgICBtX2luZGV4
aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgICAgIG1faW5kZXhpbmdU
eXBlQW5kTWlzYyA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpOwog
ICAgICAgICBtX3R5cGUgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpOwogICAgICAgICBt
X2ZsYWdzID0gc3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpOwogI2lmIEVO
QUJMRShHQ19WQUxJREFUSU9OKQpAQCAtOTEsOSArOTUsMTQgQEAgaW5saW5lIEpTVHlwZSBKU0Nl
bGw6OnR5cGUoKSBjb25zdAogICAgIHJldHVybiBtX3R5cGU7CiB9CiAKK2lubGluZSBJbmRleGlu
Z1R5cGUgSlNDZWxsOjppbmRleGluZ1R5cGVBbmRNaXNjKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9pbmRleGluZ1R5cGVBbmRNaXNjOworfQorCiBpbmxpbmUgSW5kZXhpbmdUeXBlIEpTQ2VsbDo6
aW5kZXhpbmdUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbmRleGluZ1R5cGU7CisgICAg
cmV0dXJuIGluZGV4aW5nVHlwZUFuZE1pc2MoKSAmIEFsbEFycmF5VHlwZXM7CiB9CiAKIGlubGlu
ZSBTdHJ1Y3R1cmUqIEpTQ2VsbDo6c3RydWN0dXJlKCkgY29uc3QKQEAgLTE5NSwxNyArMjA0LDI2
IEBAIGlubGluZSBib29sIEpTQ2VsbDo6aXNBUElWYWx1ZVdyYXBwZXIoKSAKICAgICByZXR1cm4g
bV90eXBlID09IEFQSVZhbHVlV3JhcHBlclR5cGU7CiB9CiAKLWlubGluZSB2b2lkIEpTQ2VsbDo6
c2V0U3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitBTFdBWVNfSU5MSU5F
IHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
IHsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5jbGFzc0luZm8oKSA9PSB0aGlzLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkpOwogICAgIEFTU0VSVCghdGhpcy0+c3RydWN0dXJlKCkKICAgICAgICAg
fHwgdGhpcy0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkKICAgICAgICAgfHwgSGVhcDo6aGVhcCh0aGlzKS0+c3RydWN0dXJlSURUYWJsZSgp
LmdldChzdHJ1Y3R1cmUtPmlkKCkpID09IHN0cnVjdHVyZSk7Ci0gICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIodGhpcywgc3RydWN0dXJlKTsKICAgICBtX3N0cnVjdHVyZUlEID0gc3RydWN0dXJlLT5p
ZCgpOwogICAgIG1fZmxhZ3MgPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCk7CiAgICAgbV90eXBlID0gc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKTsKLSAgICBtX2lu
ZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CisgICAgSW5kZXhpbmdUeXBl
IG5ld0luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpOworICAgIGlmIChtX2luZGV4aW5nVHlwZUFuZE1pc2MgIT0gbmV3SW5kZXhpbmdUeXBlKSB7
CisgICAgICAgIEFTU0VSVCghKG5ld0luZGV4aW5nVHlwZSAmIH5BbGxBcnJheVR5cGVzQW5kSGlz
dG9yeSkpOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUgb2xk
VmFsdWUgPSBtX2luZGV4aW5nVHlwZUFuZE1pc2M7CisgICAgICAgICAgICBJbmRleGluZ1R5cGUg
bmV3VmFsdWUgPSAob2xkVmFsdWUgJiB+QWxsQXJyYXlUeXBlc0FuZEhpc3RvcnkpIHwgc3RydWN0
dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCk7CisgICAgICAgICAgICBpZiAoV1RG
OjphdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrUmVsYXhlZCgmbV9pbmRleGluZ1R5cGVBbmRNaXNj
LCBvbGRWYWx1ZSwgbmV3VmFsdWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKHRoaXMsIHN0cnVjdHVyZSk7CiB9CiAK
IGlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJsZSgpIGNvbnN0CkBA
IC0yODQsMTEgKzMwMiwyNiBAQCBpbmxpbmUgdm9pZCBKU0NlbGw6OmNhbGxEZXN0cnVjdG9yKFZN
JiB2CiAgICAgaWYgKGlzWmFwcGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlSUQoKSk7Ci0gICAgaWYgKGlubGluZVR5cGVGbGFncygpICYgU3RydWN0dXJlSXNJbW1v
cnRhbCkKLSAgICAgICAgc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRl
c3Ryb3kodGhpcyk7Ci0gICAgZWxzZQorICAgIGlmIChpbmxpbmVUeXBlRmxhZ3MoKSAmIFN0cnVj
dHVyZUlzSW1tb3J0YWwpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUodm0pOworICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IHN0cnVj
dHVyZS0+Y2xhc3NJbmZvKCk7CisgICAgICAgIE1ldGhvZFRhYmxlOjpEZXN0cm95RnVuY3Rpb25Q
dHIgZGVzdHJveSA9IGNsYXNzSW5mby0+bWV0aG9kVGFibGUuZGVzdHJveTsKKyAgICAgICAgZGVz
dHJveSh0aGlzKTsKKyAgICB9IGVsc2UKICAgICAgICAganNDYXN0PEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0Kj4odGhpcyktPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KHRoaXMpOwogICAg
IHphcCgpOwogfQogCitpbmxpbmUgdm9pZCBKU0NlbGw6OmxvY2tJbnRlcm5hbExvY2soKQorewor
ICAgIEF0b21pYzxJbmRleGluZ1R5cGU+KiBsb2NrID0gYml0d2lzZV9jYXN0PEF0b21pYzxJbmRl
eGluZ1R5cGU+Kj4oJm1faW5kZXhpbmdUeXBlQW5kTWlzYyk7CisgICAgSW5kZXhpbmdUeXBlTG9j
a0FsZ29yaXRobTo6bG9jaygqbG9jayk7Cit9CisKK2lubGluZSB2b2lkIEpTQ2VsbDo6dW5sb2Nr
SW50ZXJuYWxMb2NrKCkKK3sKKyAgICBBdG9taWM8SW5kZXhpbmdUeXBlPiogbG9jayA9IGJpdHdp
c2VfY2FzdDxBdG9taWM8SW5kZXhpbmdUeXBlPio+KCZtX2luZGV4aW5nVHlwZUFuZE1pc2MpOwor
ICAgIEluZGV4aW5nVHlwZUxvY2tBbGdvcml0aG06OnVubG9jaygqbG9jayk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsMTcgKzExMiwyOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyCiAgICAgCiAgICAgLy8gTWFyayB0
aGUgcHJvcGVydGllcy4KICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHkt
PnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKLSAgICAKLSAg
ICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KLSAgICBzd2l0Y2ggKHRoaXMtPmlu
ZGV4aW5nVHlwZSgpKSB7CisKKyAgICBJbmRleGluZ1R5cGUgb2xkVHlwZSA9IHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCk7CisgICAgc3dpdGNoIChvbGRUeXBlKSB7CiAgICAgY2FzZSBBTExfQ09O
VElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRk
ZW4oYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElO
R19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKTsKLSAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fc3BhcnNlTWFwKTsKKyAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX0lOREVYSU5H
X1RZUEVTOiB7CisgICAgICAgIC8vIFRoaXMgbG9jayBpcyBoZXJlIHRvIHByb3RlY3QgQ29udGln
dW91cy0+QXJyYXlTdG9yYWdlIHRyYW5zaXRpb25zLCBidXQgd2UgY291bGQgbWFrZSB0aGF0Cisg
ICAgICAgIC8vIHJhY2Ugd29yayBpZiB3ZSBuZWVkZWQgdG8uCisgICAgICAgIEpTQ2VsbDo6SW50
ZXJuYWxMb2NrZXIgbG9ja2VyKHRoaXMpOworICAgICAgICBJbmRleGluZ1R5cGUgbmV3VHlwZSA9
IHRoaXMtPmluZGV4aW5nVHlwZSgpOworICAgICAgICBidXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKKyAgICAgICAgc3dpdGNoIChuZXdUeXBlKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hp
ZGRlbihidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVibGljTGVu
Z3RoKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vIEFMTF9BUlJB
WV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbihidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICAgICAgaWYgKGJ1dHRlcmZs
eS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQorICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVs
dDoKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQ2LDEwICsxNTcsMzQgQEAgdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbAogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAg
ICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKSk7Ci0KKyAgICAvLyBXZSB3YW50IHRvIGRl
ZmVuZCBhZ2FpbnN0IG11bHRpcGxlIHBvc3NpYmxlIHJhY2VzIHdpdGggdGhlIG11dGF0b3I6Cisg
ICAgLy8gLSBNdXRhdG9yIGNvdWxkIGluc3RhbGwgYSBiaWdnZXIgYnV0dGVyZmx5IGFuZCB0aGVu
IGluc3RhbGwgYSBzdHJ1Y3R1cmUgdGhhdCBjbGFpbXMgbW9yZQorICAgIC8vICAgcHJvcGVydGll
cy4gVGhpcyB0cml2aWFsbHkgd29ya3MuCisgICAgLy8gLSBNdXRhdG9yIGNvdWxkIG11dGF0ZSB0
aGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUuIEhlbmNlLCB3ZSBob2xkIHRoZSBzdHJ1Y3R1cmUgbG9j
ayBmb3IKKyAgICAvLyAgIGRpY3Rpb25hcnkgc3RydWN0dXJlcy4KKyAgICAvLyAtIFRoZSBidXR0
ZXJmbHkgY291bGQgc2hyaW5rLCBidXQgdGhpcyBjb3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgb2Jq
ZWN0IHdhcyBhIGRpY3Rpb25hcnkuCisgICAgLy8gICBVc3VhbGx5LCB0aGlzIG1lYW5zIHRoYXQg
d2Ugd291bGQgZ2V0IHRoZSBkaWN0aW9uYXJ5IHN0cnVjdHVyZSBhbmQgYWNxdWlyZSBhIGxvY2su
IFRoYXQKKyAgICAvLyAgIHRyaXZpYWxseSB3b3Jrcy4gQnV0IHdlIGNvdWxkIGxvYWQgdGhlIHN0
cnVjdHVyZSBiZWZvcmUgdGhlIG9iamVjdCBiZWNhbWUgYSBkaWN0aW9uYXJ5CisgICAgLy8gICBh
bmQgdGhlbiBsb2FkIHRoZSBidXR0ZXJmbHkgdGhhdCB3YXMgc2hydW5rLiBXZSBwcm90ZWN0IGFn
YWluc3QgdGhpcyBjYXNlIGJ5IGNoZWNraW5nCisgICAgLy8gICB0aGUgc3RydWN0dXJlIGEgc2Vj
b25kIHRpbWUgYmVmb3JlIHNjYW5uaW5nIHRoZSBidXR0ZXJmbHkuIFRoaXMgbWVhbnMgdGhhdCB0
aGUgYnV0dGVyZmx5CisgICAgLy8gICBpcyBhdCB3b3JzdCB0aGUgYnV0dGVyZmx5IHRoYXQgdGhl
IG11dGF0b3IgaGFkIGluc3RhbGxlZCBqdXN0IHByaW9yIHRvIGZsaXBwaW5nIHRoZQorICAgIC8v
ICAgc3R1cmN0dXJlLiBTbyBpZiB0aGUgc3RydWN0dXJlIHdlIHNlZSBpcyBhIG5vbi1kaWN0aW9u
YXJ5IHRoZW4gdGhlIGJ1dHRlcmZseSBjYW5ub3QgeWV0CisgICAgLy8gICBoYXZlIGJlZW4gc2hy
dW5rLgorICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3YXNEaWN0aW9uYXJ5ID0g
c3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGljdGlvbmFyeSkgeworICAg
ICAgICBzdHJ1Y3R1cmUtPmxvY2soKS5sb2NrKCk7CisgICAgfSBlbHNlCisgICAgICAgIFdURjo6
bG9hZExvYWRGZW5jZSgpOworICAgIGlmIChCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmpl
Y3QtPm1fYnV0dGVyZmx5LmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwor
ICAgICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSA9PSBzdHJ1Y3R1cmUtPmlkKCkp
CisgICAgICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJm
bHksIHN0cnVjdHVyZSk7CisgICAgfQorICAgIGlmICh3YXNEaWN0aW9uYXJ5KQorICAgICAgICBz
dHJ1Y3R1cmUtPmxvY2soKS51bmxvY2soKTsKKyAgICAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9IHdhc0NoZWNr
aW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CiAjZW5kaWYKQEAgLTIwNCwxNSArMjM5LDI1IEBA
IHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICAKICAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwotICAgIEJ1
dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCk7Ci0gICAgaWYgKGJ1
dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0
dGVyZmx5LCBzdHJ1Y3R1cmUpOworICAgIFZNJiB2bSA9IHZpc2l0b3Iudm0oKTsKKyAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgYm9vbCB3
YXNEaWN0aW9uYXJ5ID0gc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKTsKKyAgICBpZiAod2FzRGlj
dGlvbmFyeSkKKyAgICAgICAgc3RydWN0dXJlLT5sb2NrKCkubG9jaygpOworICAgIGVsc2UKKyAg
ICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgaWYgKEJ1dHRlcmZseSogYnV0dGVyZmx5
ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlkKCkgPT0gdGhpc09iamVjdC0+c3RydWN0dXJl
SUQoKSkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1
dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBz
dHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKICAgICBpZiAoc3RvcmFnZVNpemUpCiAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPmlubGluZVN0b3JhZ2UoKSwgc3Rv
cmFnZVNpemUpOwotCisgICAgaWYgKHdhc0RpY3Rpb25hcnkpCisgICAgICAgIHN0cnVjdHVyZS0+
bG9jaygpLnVubG9jaygpOworICAgIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9y
Lm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZh
dWx0TWFya1Zpb2xhdGlvbjsKICNlbmRpZgpAQCAtNjY2LDcgKzcxMSw4IEBAIEFycmF5U3RvcmFn
ZSogSlNPYmplY3Q6OmVudGVyRGljdGlvbmFyeUkKICAgICBuZXdCdXR0ZXJmbHktPmFycmF5U3Rv
cmFnZSgpLT5tX2luZGV4QmlhcyA9IDA7CiAgICAgbmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+c2V0VmVjdG9yTGVuZ3RoKDApOwogICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCkt
Pm1fc3BhcnNlTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKLSAgICBzZXRCdXR0ZXJmbHlXaXRob3V0
Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZseSk7CiAgICAgCiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiB9CkBAIC03MzEsNyArNzc3LDEw
IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2kKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBjcmVhdGVJ
bml0aWFsSW5kZXhlZFN0b3JhZ2Uodm0sIGxlbmd0aCk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7Ci0gICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld0J1dHRlcmZs
eSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIG5l
d1N0cnVjdHVyZSk7CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseTsKIH0KIApAQCAtNzQyLDcgKzc5
MSwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAg
ICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKVtpXS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpBbGxvY2F0ZUludDMyKTsKLSAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0s
IG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1
cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzSW50MzIoKTsKIH0KIApAQCAtNzUzLDcgKzgwNSwx
MCBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAg
bmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKClbaV0gPSBQTmFOOwogICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpOwotICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkp
OworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdC
dXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJl
KHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNE
b3VibGUoKTsKIH0KIApAQCAtNzY0LDcgKzgxOSwxMCBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbmV3QnV0dGVyZmx5LT52
ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKClb
aV0uc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSh2bSksIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKLSAgICBz
ZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsK
KyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2
bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzKCk7
CiB9CiAKQEAgLTc5Nyw3ICs4NTUsMTAgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y3JlYXRl
QXJyYXlTdG9yYQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gY3JlYXRlQXJyYXlTdG9y
YWdlQnV0dGVyZmx5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUsIGxlbmd0aCwgdmVjdG9yTGVuZ3RoLCBt
X2J1dHRlcmZseS5nZXQoKSk7CiAgICAgQXJyYXlTdG9yYWdlKiByZXN1bHQgPSBuZXdCdXR0ZXJm
bHktPmFycmF5U3RvcmFnZSgpOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgc3RydWN0dXJlLT5zdWdn
ZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKCkpOwotICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRl
cmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CisgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg4MCw3ICs5NDEsMTAgQEAgQXJyYXlTdG9yYWdl
KiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZAogICAgICAgICBzdG9yYWdlLT5tX3ZlY3Rvcltp
XS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgCiAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZt
LCBuZXdTdHJ1Y3R1cmUsIHN0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgc3RvcmFnZS0+YnV0dGVyZmx5KCkpOwor
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1
Y3R1cmUpOwogICAgIHJldHVybiBzdG9yYWdlOwogfQogCkBAIC05MzUsNyArOTk5LDEwIEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXIKICAgICB9CiAgICAgCiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKHZtKSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0
dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3U3RvcmFnZS0+
YnV0dGVyZmx5KCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdTdG9yYWdlOwogfQogCkBAIC05
ODEsNyArMTA0OCwxMCBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9B
CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIHRyYW5zaXRpb24pOwotICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgbmV3U3RydWN0dXJlLCBuZXdTdG9yYWdlLT5i
dXR0ZXJmbHkoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBzZXRCdXR0ZXJm
bHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3
U3RvcmFnZTsKIH0KIApAQCAtMTAwNiw3ICsxMDc2LDIzIEBAIEFycmF5U3RvcmFnZSogSlNPYmpl
Y3Q6OmNvbnZlcnRDb250aWd1b3UKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgdHJhbnNpdGlvbik7Ci0gICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1
Y3R1cmUsIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKworICAgIC8vIFRoaXMgaGFzIGEgY3Jh
enkgcmFjZSB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gV2hlbiBjaGFuZ2luZyB0aGUgYnV0
dGVyZmx5IGFuZCBzdHJ1Y3R1cmUsCisgICAgLy8gdGhlIG11dGF0b3IgYWx3YXlzIHNldHMgdGhl
IHN0cnVjdHVyZSBsYXN0LiBUaGUgY29sbGVjdG9yIHdpbGwgYWx3YXlzIHJlYWQgdGhlIHN0cnVj
dHVyZQorICAgIC8vIGZpcnN0LiBXZSBwcm9iYWJseSBoYXZlIHRvIGZvbGxvdyB0aGF0IGNvbnZl
bnRpb24gaGVyZSBhcyB3ZWxsLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbGxlY3RvcgorICAgIC8v
IHdpbGwgc29tZXRpbWVzIHNlZSB0aGUgbmV3IGJ1dHRlcmZseSAodGhlIG9uZSB3aXRoIEFycmF5
U3RvcmFnZSkgd2l0aCB0aGUgb25seSBzdHJ1Y3R1cmUgKHRoZQorICAgIC8vIG9uZSB0aGF0IHNh
eXMgdGhhdCB0aGUgYnV0dGVyZmx5IGlzIENvbnRpZ3VvdXMpLiBXaGVuIHNjYW5uaW5nIENvbnRp
Z3VvdXMsIHRoZSBjb2xsZWN0b3Igd2lsbAorICAgIC8vIG1hcmsgd29yZCBhdCBhZGRyZXNzZXMg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBidXR0ZXJmbHkgcG9pbnRlciwgdXAgdG8gdGhl
IHB1YmxpY0xlbmd0aAorICAgIC8vIGluIHRoZSBidXR0ZXJmbHkuIEJ1dCBhbiBBcnJheVN0b3Jh
Z2UgaGFzIHNvbWUgbm9uLXBvaW50ZXIgaGVhZGVyIGRhdGEgYXQgbG93IHBvc2l0aXZlCisgICAg
Ly8gb2Zmc2V0cyBmcm9tIHRoZSBidXR0ZXJmbHkgLSBzbyB3aGVuIHRoaXMgcmFjZSBoYXBwZW5z
LCB0aGUgY29sbGVjdG9yIHdpbGwgc3VyZWx5IGNyYXNoCisgICAgLy8gYmVjYXVzZSBpdCB3aWxs
IGZhaWwgdG8gZGVjb2RlIHR3byBjb25zZWN1dGl2ZSBpbnQzMnMgYXMgaWYgaXQgd2FzIGEgSlNW
YWx1ZS4KKyAgICAvLworICAgIC8vIEZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRoZSBKU0NlbGwgbG9j
ayBmb3IgdGhpcyBwdXJwb3NlIQorICAgIAorICAgIEludGVybmFsTG9ja2VyIGxvY2tlcih0aGlz
KTsKKyAgICBzZXRCdXR0ZXJmbHkodm0sIG5ld1N0b3JhZ2UtPmJ1dHRlcmZseSgpKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJl
KTsKICAgICByZXR1cm4gbmV3U3RvcmFnZTsKIH0KIApAQCAtMTQ2OCw3ICsxNTU0LDcgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogCiAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldDsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9mZnNldCA9
IHN0cnVjdHVyZS0+cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlO
YW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0p
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3Bl
cnR5TmFtZSwgb2Zmc2V0KSk7CiAKQEAgLTIwMTksNyArMjEwNSw3IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmluZU93bkluZGV4ZWRQcm9wZXJ0eSgKIAogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fYnV0dGVyZmx5LmdldCgpLT5hcnJheVN0b3JhZ2UoKS0+bV9zcGFyc2VNYXAuZ2V0KCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQobWFwKTsKLQorICAgIAogICAgIC8vIDEuIExldCBjdXJyZW50
IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgogICAgIFNwYXJzZUFycmF5VmFsdWVN
YXA6OkFkZFJlc3VsdCByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CiAgICAgU3BhcnNl
QXJyYXlFbnRyeSogZW50cnlJbk1hcCA9ICZyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwpAQCAtMjcy
NSw3ICsyODExLDggQEAgYm9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2ZWN0b3JMZW5ndGg7IGkgPCBuZXdWZWN0b3JMZW5n
dGg7ICsraSkKICAgICAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yW2ldLmNsZWFyKCk7CiAgICAgICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnNl
dFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwotICAgICAgICBzZXRCdXR0ZXJmbHlXaXRo
b3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIG5ld0J1dHRlcmZseSk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIHNldEJ1dHRlcmZseSh2bSwgbmV3QnV0dGVyZmx5KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAtMjc0Miw3ICsyODI5LDggQEAg
Ym9vbCBKU09iamVjdDo6aW5jcmVhc2VWZWN0b3JMZW5ndGgoVk0mIAogICAgICAgICBuZXdCdXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcltpXS5jbGVhcigpOwogICAgIG5ld0J1dHRl
cmZseS0+YXJyYXlTdG9yYWdlKCktPnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOwog
ICAgIG5ld0J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1faW5kZXhCaWFzID0gbmV3SW5kZXhC
aWFzOwotICAgIHNldEJ1dHRlcmZseVdpdGhvdXRDaGFuZ2luZ1N0cnVjdHVyZSh2bSwgbmV3QnV0
dGVyZmx5KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHNldEJ1dHRlcmZseSh2
bSwgbmV3QnV0dGVyZmx5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc2Miw2ICsyODUw
LDcgQEAgYm9vbCBKU09iamVjdDo6ZW5zdXJlTGVuZ3RoU2xvdyhWTSYgdm0sIAogICAgIAogICAg
IHVuc2lnbmVkIGF2YWlsYWJsZU9sZExlbmd0aCA9CiAgICAgICAgIEJ1dHRlcmZseTo6YXZhaWxh
YmxlQ29udGlndW91c1ZlY3Rvckxlbmd0aChwcm9wZXJ0eUNhcGFjaXR5LCBvbGRWZWN0b3JMZW5n
dGgpOworICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbnVsbHB0cjsKICAgICBpZiAoYXZh
aWxhYmxlT2xkTGVuZ3RoID49IGxlbmd0aCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNl
IHdoZXJlIHNvbWVvbmUgZWxzZSBzZWxlY3RlZCBhIHZlY3RvciBsZW5ndGggdGhhdCBjYXVzZWQg
aW50ZXJuYWwKICAgICAgICAgLy8gZnJhZ21lbnRhdGlvbi4gSWYgd2UgZGlkIG91ciBqb2JzIHJp
Z2h0LCB0aGlzIHdvdWxkIG5ldmVyIGhhcHBlbi4gQnV0IEkgYmV0IHdlIHdpbGwgbWVzcwpAQCAt
Mjc3NiwxNyArMjg2NSwyNCBAQCBib29sIEpTT2JqZWN0OjplbnN1cmVMZW5ndGhTbG93KFZNJiB2
bSwgCiAgICAgICAgICAgICBuZXdWZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KTsKICAgICAgICAgaWYgKCFidXR0ZXJmbHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgYnV0dGVyZmx5KTsKKyAgICAgICAgbmV3
QnV0dGVyZmx5ID0gYnV0dGVyZmx5OwogICAgIH0KIAotICAgIGJ1dHRlcmZseS0+c2V0VmVjdG9y
TGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7Ci0KICAgICBpZiAoaGFzRG91YmxlKGluZGV4aW5nVHlw
ZSgpKSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRWZWN0b3JMZW5ndGg7IGkgPCBu
ZXdWZWN0b3JMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGJ1dHRlcmZseS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldID0gUE5hTjsKKyAgICAgICAgICAgIGJ1dHRlcmZseS0+aW5kZXhpbmdQYXlsb2Fk
PGRvdWJsZT4oKVtpXSA9IFBOYU47CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gb2xkVmVjdG9yTGVuZ3RoOyBpIDwgbmV3VmVjdG9yTGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKVtpXS5jbGVhcigpOworICAgICAgICAgICAgYnV0
dGVyZmx5LT5pbmRleGluZ1BheWxvYWQ8V3JpdGVCYXJyaWVyPFVua25vd24+PigpW2ldLmNsZWFy
KCk7CisgICAgfQorCisgICAgaWYgKG5ld0J1dHRlcmZseSkgeworICAgICAgICBidXR0ZXJmbHkt
PnNldFZlY3Rvckxlbmd0aChuZXdWZWN0b3JMZW5ndGgpOworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZs
eSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAg
ICAgYnV0dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgobmV3VmVjdG9yTGVuZ3RoKTsKICAgICB9CiAK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4MDIsMTIgKzI4OTgsMTMgQEAgdm9pZCBKU09iamVjdDo6
cmVhbGxvY2F0ZUFuZFNocmlua0J1dHRlcgogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCktPnJlc2l6
ZUFycmF5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUoKSwgMCwgQXJyYXlTdG9yYWdlOjpzaXplRm9yKGxl
bmd0aCkpOwotICAgIG1fYnV0dGVyZmx5LnNldCh2bSwgdGhpcywgbmV3QnV0dGVyZmx5KTsKICAg
ICBuZXdCdXR0ZXJmbHktPnNldFZlY3Rvckxlbmd0aChsZW5ndGgpOwogICAgIG5ld0J1dHRlcmZs
eS0+c2V0UHVibGljTGVuZ3RoKGxlbmd0aCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICBtX2J1dHRlcmZseS5zZXQodm0sIHRoaXMsIG5ld0J1dHRlcmZseSk7CiB9CiAKLUJ1dHRl
cmZseSogSlNPYmplY3Q6Omdyb3dPdXRPZkxpbmVTdG9yYWdlKFZNJiB2bSwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQorQnV0dGVyZmx5KiBKU09iamVjdDo6YWxsb2NhdGVNb3JlT3V0
T2ZMaW5lU3RvcmFnZShWTSYgdm0sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKIHsK
ICAgICBBU1NFUlQobmV3U2l6ZSA+IG9sZFNpemUpOwogCkBAIC0zMDkyLDE1ICszMTg5LDM0IEBA
IHZvaWQgSlNPYmplY3Q6OmNvbnZlcnRUb0RpY3Rpb25hcnkoVk0mIHYKICAgICAgICAgdm0sIFN0
cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KIAotdm9pZCBKU09iamVjdDo6c2hpZnRC
dXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoVk0mIHZtLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNpdHlC
ZWZvcmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0eUFmdGVyKQordm9pZCBKU09iamVjdDo6c2hp
ZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciYsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBvdXRPZkxpbmVDYXBhY2l0
eUFmdGVyKQogewotICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpcy0+YnV0dGVyZmx5KCk7
Ci0gICAgc2l6ZV90IHByZUNhcGFjaXR5ID0gdGhpcy0+YnV0dGVyZmx5UHJlQ2FwYWNpdHkoKTsK
LSAgICB2b2lkKiBjdXJyZW50QmFzZSA9IGJ1dHRlcmZseS0+YmFzZShwcmVDYXBhY2l0eSwgb3V0
T2ZMaW5lQ2FwYWNpdHlBZnRlcik7Ci0gICAgdm9pZCogbmV3QmFzZSA9IGJ1dHRlcmZseS0+YmFz
ZShwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlCZWZvcmUpOworICAgIC8vIFRoaXMgY291
bGQgaW50ZXJsZWF2ZSB2aXNpdENoaWxkcmVuIGJlY2F1c2Ugc29tZSBvbGQgc3RydWN0dXJlIGNv
dWxkIGhhdmUgYmVlbiBhIG5vbgorICAgIC8vIGRpY3Rpb25hcnkgc3RydWN0dXJlLiBXZSBoYXZl
IHRvIGJlIGNyYXp5IGNhcmVmdWwuIEJ1dCwgd2UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaG9sZGlu
ZworICAgIC8vIHRoZSBzdHJ1Y3R1cmUncyBsb2NrIHJpZ2h0IG5vdywgYW5kIHRoYXQgaGVscHMg
YSBiaXQuCisgICAgCisgICAgQnV0dGVyZmx5KiBvbGRCdXR0ZXJmbHkgPSB0aGlzLT5idXR0ZXJm
bHkoKTsKKyAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CisgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzOworICAgIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIgPSB0aGlzLT5oYXNJbmRl
eGluZ0hlYWRlcigpOworICAgIGlmIChVTkxJS0VMWShoYXNJbmRleGluZ0hlYWRlcikpIHsKKyAg
ICAgICAgcHJlQ2FwYWNpdHkgPSBvbGRCdXR0ZXJmbHktPmluZGV4aW5nSGVhZGVyKCktPnByZUNh
cGFjaXR5KHN0cnVjdHVyZSk7CisgICAgICAgIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzID0g
b2xkQnV0dGVyZmx5LT5pbmRleGluZ0hlYWRlcigpLT5pbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyhzdHJ1Y3R1cmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByZUNhcGFjaXR5ID0gMDsKKyAg
ICAgICAgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMgPSAwOworICAgIH0KKworICAgIEJ1dHRl
cmZseSogbmV3QnV0dGVyZmx5ID0gQnV0dGVyZmx5OjpjcmVhdGVVbmluaXRpYWxpemVkKHZtLCB0
aGlzLCBwcmVDYXBhY2l0eSwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlciwgaGFzSW5kZXhpbmdIZWFk
ZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAotICAgIG1lbW1vdmUobmV3QmFzZSwg
Y3VycmVudEJhc2UsIHRoaXMtPmJ1dHRlcmZseVRvdGFsU2l6ZSgpKTsKLSAgICBzZXRCdXR0ZXJm
bHlXaXRob3V0Q2hhbmdpbmdTdHJ1Y3R1cmUodm0sIEJ1dHRlcmZseTo6ZnJvbUJhc2UobmV3QmFz
ZSwgcHJlQ2FwYWNpdHksIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpKTsKKyAgICAvLyBObyBuZWVk
IHRvIGNvcHkgdGhlIHByZWNhcGFjaXR5LgorICAgIHZvaWQqIGN1cnJlbnRCYXNlID0gb2xkQnV0
dGVyZmx5LT5iYXNlKDAsIG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOworICAgIHZvaWQqIG5ld0Jh
c2UgPSBuZXdCdXR0ZXJmbHktPmJhc2UoMCwgb3V0T2ZMaW5lQ2FwYWNpdHlBZnRlcik7CisKKyAg
ICBtZW1jcHkobmV3QmFzZSwgY3VycmVudEJhc2UsIEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIG91
dE9mTGluZUNhcGFjaXR5QWZ0ZXIsIGhhc0luZGV4aW5nSGVhZGVyLCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlcykpOworICAgIAorICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgc2V0
QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOwogfQogCiB1aW50MzJfdCBKU09iamVjdDo6Z2V0
RW51bWVyYWJsZUxlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDIwODY1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0NywxMSArNzQ3LDEwIEBAIHB1YmxpYzoKICAgICBib29sIHN0YXRpY1Byb3Bl
cnRpZXNSZWlmaWVkKCkgeyByZXR1cm4gc3RydWN0dXJlKCktPnN0YXRpY1Byb3BlcnRpZXNSZWlm
aWVkKCk7IH0KICAgICB2b2lkIHJlaWZ5QWxsU3RhdGljUHJvcGVydGllcyhFeGVjU3RhdGUqKTsK
IAotICAgIEpTX0VYUE9SVF9QUklWQVRFIEJ1dHRlcmZseSogZ3Jvd091dE9mTGluZVN0b3JhZ2Uo
Vk0mLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOwotICAgIHZvaWQgc2V0QnV0dGVy
Zmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiwgQnV0dGVyZmx5Kik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgQnV0dGVyZmx5KiBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKFZNJiwg
c2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKICAgICAgICAgCisgICAgdm9pZCBzZXRC
dXR0ZXJmbHkoVk0mLCBCdXR0ZXJmbHkqKTsgLy8gQWx3YXlzIGNoYW5nZSB0aGUgYnV0dGVyZmx5
IGJlZm9yZSBjaGFuZ2luZyB0aGUgc3RydWN0dXJlIQogICAgIHZvaWQgc2V0U3RydWN0dXJlKFZN
JiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkoVk0mLCBT
dHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29u
dmVydFRvRGljdGlvbmFyeShWTSYpOwogCkBAIC03NTksNyArNzU4LDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgc3RydWN0dXJlKHZtKS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0s
IHRoaXMpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0QnV0dGVyZmx5QWZ0ZXJGbGF0dGVuaW5nKFZN
Jiwgc2l6ZV90IG91dE9mTGluZUNhcGFjaXR5QmVmb3JlLCBzaXplX3Qgb3V0T2ZMaW5lQ2FwYWNp
dHlBZnRlcik7CisgICAgdm9pZCBzaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhjb25zdCBH
Q1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IG91dE9mTGluZUNhcGFjaXR5QWZ0ZXIpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCgpIGNvbnN0CiAgICAgewpAQCAtOTkwLDkgKzk4OSw5IEBAIHByaXZhdGU6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgcHV0SW5saW5lU2xvdyhFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9v
bCBnZXROb25JbmRleFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwotICAgIGJvb2wgZ2V0T3duTm9uSW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1
Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOworICAgIGJvb2wgZ2V0T3duTm9u
SW5kZXhQcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVl
LCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CisgICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUqKTsKIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KFZNJiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBjb25z
dCBIYXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29u
c3Q7CkBAIC0xMTEzLDYgKzExMTIsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IEpTRmluYWxP
YmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkg
PSBudWxscHRyKQogICAgICAgICA6IEpTT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSkK
ICAgICB7CisgICAgICAgIG1lbXNldChpbmxpbmVTdG9yYWdlKCksIDAsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpOwogICAgIH0KIH07CiAKQEAg
LTEyMDUsMTQgKzEyMDUsNiBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6aXNXaXRoU2NvcGUoKSBj
b25zCiAgICAgcmV0dXJuIHR5cGUoKSA9PSBXaXRoU2NvcGVUeXBlOwogfQogCi1pbmxpbmUgdm9p
ZCBKU09iamVjdDo6c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEJ1dHRlcmZseSogYnV0dGVyZmx5KQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUp
OwotICAgIEFTU0VSVCghYnV0dGVyZmx5ID09ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXMpKSk7Ci0gICAgbV9idXR0
ZXJmbHkuc2V0KHZtLCB0aGlzLCBidXR0ZXJmbHkpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKTsKLX0KLQogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwpAQCAtMTIy
MCw3ICsxMjEyLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnNldFN0cnVjdHVyZShWTSYgdgog
ICAgIEpTQ2VsbDo6c2V0U3RydWN0dXJlKHZtLCBzdHJ1Y3R1cmUpOwogfQogCi1pbmxpbmUgdm9p
ZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5V2l0aG91dENoYW5naW5nU3RydWN0dXJlKFZNJiB2bSwg
QnV0dGVyZmx5KiBidXR0ZXJmbHkpCitpbmxpbmUgdm9pZCBKU09iamVjdDo6c2V0QnV0dGVyZmx5
KFZNJiB2bSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiB7CiAgICAgbV9idXR0ZXJmbHkuc2V0KHZt
LCB0aGlzLCBidXR0ZXJmbHkpOwogfQpAQCAtMTI3MywxNiArMTI2NSwxNiBAQCBpbmxpbmUgSlNW
YWx1ZSBKU09iamVjdDo6Z2V0UHJvdG90eXBlKFZNCiAKIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0
aGlzIG1ldGhvZCB3aXRoIGEgUHJvcGVydHlOYW1lIHRoYXQgaXMgYWN0dWFsbHkgYW4gaW5kZXgs
CiAvLyBidXQgaWYgc28gd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIChkb2Vzbid0IHNlYXJjaCBp
bmRleCBzdG9yYWdlKS4KLUFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eVNsb3QoVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpT
T2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5U2xvdChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOworICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgIGlmICghVHlw
ZUluZm86Omhhc1N0YXRpY1Byb3BlcnR5VGFibGUoaW5saW5lVHlwZUZsYWdzKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gZ2V0T3duU3RhdGljUHJvcGVydHlT
bG90KHZtLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgIH0KLQorICAgIAogICAgIC8vIGdldFBy
b3BlcnR5U2xvdCByZWxpZXMgb24gdGhpcyBtZXRob2QgbmV2ZXIgcmV0dXJuaW5nIGluZGV4IHBy
b3BlcnRpZXMhCiAgICAgQVNTRVJUKCFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpOwogCkBAIC0x
MzA3LDkgKzEyOTksOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE93bk5vbklu
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Zmls
bEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3Vz
dG9tR2V0dGVyU2V0dGVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUmIHN0cnVjdHVy
ZSkKK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6ZmlsbEN1c3RvbUdldHRlclByb3BlcnR5
U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0
dXJlLmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICBpZiAoc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGF0
dHJpYnV0ZXMsIGpzQ2FzdDxDdXN0b21HZXR0ZXJTZXR0ZXIqPihjdXN0b21HZXR0ZXJTZXR0ZXIp
LT5nZXR0ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzI1LDcgKzEzMTcsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmZpbGxDdXN0b21HCiBBTFdBWVNfSU5MSU5F
IGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFN0cnVjdHVyZSYgc3RydWN0dXJl
ID0gKm9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAob2JqZWN0LT5nZXRPd25Ob25JbmRleFByb3Bl
cnR5U2xvdCh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpKQpAQCAtMTM1MywxMCArMTM0NSwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wg
SlNPYmplY3Q6OmdldFByb3BlcnR5CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5nZXROb25J
bmRleFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVChvYmplY3QtPnR5cGUoKSAhPSBQcm94eU9iamVjdFR5cGUpOwotICAgICAg
ICBTdHJ1Y3R1cmUmIHN0cnVjdHVyZSA9ICpzdHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0
cnVjdHVyZUlEKCkpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUlE
VGFibGUuZ2V0KG9iamVjdC0+c3RydWN0dXJlSUQoKSk7CiAgICAgICAgIGlmIChvYmplY3QtPmdl
dE93bk5vbkluZGV4UHJvcGVydHlTbG90KHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUg
PSBzdHJ1Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIEpTVmFsdWUgcHJvdG90eXBl
ID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAgaWYgKCFwcm90b3R5cGUu
aXNPYmplY3QoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBvYmplY3QgPSBhc09iamVj
dChwcm90b3R5cGUpOwpAQCAtMTM4NSwxMzIgKzEzNzcsNiBAQCBpbmxpbmUgSlNWYWx1ZSBKU09i
amVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXRl
bXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1BTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90
KQotewotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVy
KCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKLSAgICBB
U1NFUlQoIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmhhc0luZmVycmVkVHlwZXMoKSk7
Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
Y3VycmVudEF0dHJpYnV0ZXMpOwotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
IHsKLSAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmli
dXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIHN0cnVjdHVy
ZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgICAgICBzbG90LnNldEV4aXN0
aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKLQotICAgICAgICAgICAgaWYgKChhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vzc29yKSB8fCAoYXR0cmli
dXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nl
c3NvcikpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkp
KTsKLSAgICAgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRl
Q2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2li
bGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7Ci0gICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5
KCk7Ci0gICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVT
dG9yYWdlKCkpCi0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHRoaXMtPnN0cnVj
dHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAg
IG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwotCi0gICAgICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUo
KS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgdGhpcy0+c3RydWN0
dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAgICBzaXplX3QgY3Vy
cmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0g
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCi0gICAgICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwotICAgIGlmIChuZXdTdHJ1Y3R1cmUpIHsKLSAgICAgICAg
bmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvckV4aXN0aW5nVHJhbnNpdGlvbigKLSAgICAg
ICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dEJ5SWQpOwotICAgICAgICAKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZt
LmhlYXApOwotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwot
ICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgY3VycmVudENhcGFjaXR5LCBuZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKLSAgICAgICAg
QVNTRVJUKG5ld1N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICAgICAgc2V0
U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBuZXdTdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0g
ICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIHNsb3Quc2V0TmV3
UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgYm9vbCBoYXNJbmZlcnJlZFR5cGU7
Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0
dHJpYnV0ZXMsIGhhc0luZmVycmVkVHlwZSk7Ci0gICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zm
c2V0KSB7Ci0gICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmli
dXRlcyAmIFJlYWRPbmx5KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN0
cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WShoYXNJbmZlcnJlZFR5cGUpKSB7Ci0gICAgICAgICAgICBzdHJ1Y3R1cmUtPndpbGxTdG9yZVZh
bHVlRm9yUmVwbGFjZSgKLSAgICAgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
c2xvdC5jb250ZXh0KCkgPT0gUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwotICAgICAg
ICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotCi0gICAgICAgIGlmICgoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikgfHwgKGF0dHJp
YnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQ3VzdG9tQWNj
ZXNzb3IpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIShhdHRyaWJ1dGVzICYgUmVhZE9ubHkpKTsK
LSAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICgobW9kZSA9PSBQ
dXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKLSAgICAvLyBzdHJ1Y3R1
cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5l
dyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQotICAgIC8vIHdlIHdhbnQuCi0gICAgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZTsKLSAg
ICAKLSAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlv
bigKLSAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZz
ZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Ci0gICAgbmV3U3Ry
dWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZvck5ld1RyYW5zaXRpb24oCi0gICAgICAgIHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5
SWQpOwotICAgIAotICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7Ci0gICAgQVNTRVJUKG5ld1N0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgc2l6ZV90IG9sZENhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKLSAgICBBU1NFUlQob2xkQ2FwYWNpdHkgPD0gbmV3Q2FwYWNpdHkpOwotICAg
IGlmIChvbGRDYXBhY2l0eSA9PSBuZXdDYXBhY2l0eSkKLSAgICAgICAgc2V0U3RydWN0dXJlKHZt
LCBuZXdTdHJ1Y3R1cmUpOwotICAgIGVsc2UgewotICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBvbGRDYXBhY2l0eSwgbmV3Q2FwYWNpdHkp
OwotICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIG5ld1N0cnVjdHVyZSwgbmV3
QnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Ci0gICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKLSAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJv
cGVydGllcygpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0T3duRGF0YVByb3BlcnR5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7
CkBAIC0xNTQ5LDI0ICsxNDE1LDYgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdChW
TSYgdm0sIAogICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJv
cGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAotaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKLXsK
LSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRl
clNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7Ci0gICAgQVNTRVJUKCF2YWx1
ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKTsKLSAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9
IG1fYnV0dGVyZmx5LmdldCgpOwotICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRP
ZkxpbmVTdG9yYWdlKCkpCi0gICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9y
YWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSgpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKLSAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQotICAgICAgICBz
dHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7Ci0gICAgYm9vbCBzaG91
bGRPcHRpbWl6ZSA9IGZhbHNlOwotICAgIHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdU
cmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7Ci0gICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7Ci0g
ICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLX0KLQogQUxXQVlTX0lOTElORSBKU09i
amVjdCogUmVnaXN0ZXI6Om9iamVjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFzT2JqZWN0KGpz
VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNywxMyArMTA3
LDEzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICBKU09i
amVjdCogb2JqZWN0ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rp
b25QdHIgZGVmYXVsdEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJl
SURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVy
ZS5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChvYmpl
Y3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3RydWN0dXJlSURUYWJsZS5nZXQob2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5
U2xvdEJ5SW5kZXgob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNl
KTsKICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RydWN0
dXJlLmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5nZXRQcm90b3R5cGUgPT0gZGVmYXVsdEdldFBy
b3RvdHlwZSB8fCBzbG90LmludGVybmFsTWV0aG9kVHlwZSgpID09IFByb3BlcnR5U2xvdDo6SW50
ZXJuYWxNZXRob2RUeXBlOjpWTUlucXVpcnkpKQotICAgICAgICAgICAgcHJvdG90eXBlID0gc3Ry
dWN0dXJlLnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICBpZiAoTElLRUxZKHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJvdG90
eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRlcm5h
bE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCisgICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHByb3Rv
dHlwZSA9IG9iamVjdC0+Z2V0UHJvdG90eXBlKHZtLCBleGVjKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKQEAgLTEzNSwxOCArMTM1LDE4IEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0Tm9uSW5kZXgKICAgICBKU09iamVjdCogb2JqZWN0
ID0gdGhpczsKICAgICBNZXRob2RUYWJsZTo6R2V0UHJvdG90eXBlRnVuY3Rpb25QdHIgZGVmYXVs
dEdldFByb3RvdHlwZSA9IEpTT2JqZWN0OjpnZXRQcm90b3R5cGU7CiAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgU3RydWN0dXJlJiBzdHJ1Y3R1cmUgPSAqc3RydWN0dXJlSURUYWJsZS5nZXQo
b2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVJRFRhYmxlLmdldChvYmplY3QtPnN0cnVjdHVyZUlEKCkpOwogICAgICAgICBpZiAo
TElLRUxZKCFUeXBlSW5mbzo6b3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90KG9iamVjdC0+aW5s
aW5lVHlwZUZsYWdzKCkpKSkgewogICAgICAgICAgICAgaWYgKG9iamVjdC0+Z2V0T3duTm9uSW5k
ZXhQcm9wZXJ0eVNsb3Qodm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldE93blByb3BlcnR5U2xvdChv
YmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICBpZiAoc3RydWN0
dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0T3duUHJvcGVydHlTbG90KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAg
fQogICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICAgICAgaWYgKExJS0VMWShzdHJ1Y3R1
cmUuY2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmdldFByb3RvdHlwZSA9PSBkZWZhdWx0R2V0UHJv
dG90eXBlIHx8IHNsb3QuaW50ZXJuYWxNZXRob2RUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpJbnRl
cm5hbE1ldGhvZFR5cGU6OlZNSW5xdWlyeSkpCi0gICAgICAgICAgICBwcm90b3R5cGUgPSBzdHJ1
Y3R1cmUuc3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAgIGlmIChMSUtFTFkoc3RydWN0dXJlLT5j
bGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZ2V0UHJvdG90eXBlID09IGRlZmF1bHRHZXRQcm90b3R5
cGUgfHwgc2xvdC5pbnRlcm5hbE1ldGhvZFR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZTo6Vk1JbnF1aXJ5KSkKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IHN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcHJvdG90
eXBlID0gb2JqZWN0LT5nZXRQcm90b3R5cGUodm0sIGV4ZWMpOwogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwpAQCAtMTU3LDYgKzE1NywzMCBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4CiAgICAgfQogfQogCitpbmxpbmUgdm9p
ZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorewor
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVy
U2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIXZhbHVl
LmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpOworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gbV9i
dXR0ZXJmbHkuZ2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOworICAgIHVuc2lnbmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpOworICAgIHN0cnVjdHVyZS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbigKKyAgICAgICAgdm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywKKyAgICAgICAg
WyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KSB7CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICE9
IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5ID0gYWxs
b2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2bSwgb2xkT3V0T2ZMaW5lQ2FwYWNpdHksIHN0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBzZXRCdXR0ZXJmbHkodm0sIGJ1dHRlcmZseSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQor
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMo
KTsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemUgPSBmYWxzZTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+d2lsbFN0b3JlVmFsdWVGb3JOZXdUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBzaG91bGRPcHRpbWl6ZSk7CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOworICAgICAgICB9KTsKK30KKwogLy8gRUNNQSA4LjYuMi4yCiBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewpAQCAtMjA3LDQgKzIzMSwxMzkgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpoYXNPd25Qcm9wZQogICAgIHJldHVybiBjb25zdF9jYXN0PEpTT2JqZWN0Kj4o
dGhpcyktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4
KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKSwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsK
IH0KIAordGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KK0FMV0FZU19JTkxJTkUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNs
b3QmIHNsb3QpCit7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQodmFsdWUuaXNHZXR0
ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKKyAgICBBU1NFUlQoIUhl
YXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpcykp
OworICAgIEFTU0VSVCghcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKTsKKworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkgeworICAgICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aGFzSW5mZXJyZWRU
eXBlcygpKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CisgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCkgeworICAgICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJl
bnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAg
c3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgICAgIHNsb3Qu
c2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworCisgICAgICAgICAgICBpZiAoKGF0
dHJpYnV0ZXMgJiBBY2Nlc3NvcikgIT0gKGN1cnJlbnRBdHRyaWJ1dGVzICYgQWNjZXNzb3IpIHx8
IChhdHRyaWJ1dGVzICYgQ3VzdG9tQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEN1
c3RvbUFjY2Vzc29yKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkpOworICAgICAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjph
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJl
RXh0ZW5zaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVuc2ln
bmVkIG9sZE91dE9mTGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
OworICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRp
b24oCisgICAgICAgICAgICB2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLAorICAgICAgICAg
ICAgWyZdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzLT5i
dXR0ZXJmbHkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpICE9IG9sZE91dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1
dHRlcmZseSA9IGFsbG9jYXRlTW9yZU91dE9mTGluZVN0b3JhZ2Uodm0sIG9sZE91dE9mTGluZUNh
cGFjaXR5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgICAgICAgICBzZXRCdXR0
ZXJmbHkodm0sIGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2xvdC5zZXROZXdQ
cm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5
KQorICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVhZE9ubHlQcm9w
ZXJ0aWVzKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldDsKKyAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoCisgICAg
ICAgIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgIGlm
IChuZXdTdHJ1Y3R1cmUpIHsKKyAgICAgICAgbmV3U3RydWN0dXJlLT53aWxsU3RvcmVWYWx1ZUZv
ckV4aXN0aW5nVHJhbnNpdGlvbigKKyAgICAgICAgICAgIHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAK
KyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOworICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZSAhPSB0aGlzLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBuZXdCdXR0
ZXJmbHkgPSBhbGxvY2F0ZU1vcmVPdXRPZkxpbmVTdG9yYWdlKHZtLCBjdXJyZW50Q2FwYWNpdHks
IG5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOworICAgICAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJm
bHkpOworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7CisgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICAg
ICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKKyAgICBib29sIGhh
c0luZmVycmVkVHlwZTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlO
YW1lLCBjdXJyZW50QXR0cmlidXRlcywgaGFzSW5mZXJyZWRUeXBlKTsKKyAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpIHsKKyAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYm
IGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGhhc0luZmVycmVkVHlwZSkpIHsKKyAgICAgICAgICAgIHN0cnVjdHVy
ZS0+d2lsbFN0b3JlVmFsdWVGb3JSZXBsYWNlKAorICAgICAgICAgICAgICAgIHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90LmNvbnRleHQoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQp
OworICAgICAgICB9CisKKyAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9m
ZnNldCk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisKKyAgICAgICAg
aWYgKChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpICE9IChjdXJyZW50QXR0cmlidXRlcyAmIEFjY2Vz
c29yKSB8fCAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKSAhPSAoY3VycmVudEF0dHJpYnV0
ZXMgJiBDdXN0b21BY2Nlc3NvcikpIHsKKyAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkpOworICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5z
aXRpb24gd2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAor
ICAgIC8vIHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2Jz
ZXJ2ZSBpZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lCisgICAgLy8gd2Ugd2FudC4KKyAg
ICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNo
cG9pbnRGaXJlOworICAgIAorICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkTmV3UHJv
cGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNocG9pbnRGaXJl
KTsKKyAgICBuZXdTdHJ1Y3R1cmUtPndpbGxTdG9yZVZhbHVlRm9yTmV3VHJhbnNpdGlvbigKKyAg
ICAgICAgdm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QuY29udGV4dCgpID09IFB1dFByb3Bl
cnR5U2xvdDo6UHV0QnlJZCk7CisgICAgCisgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKKyAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAgIEFTU0VSVChvbGRDYXBhY2l0eSA8PSBuZXdD
YXBhY2l0eSk7CisgICAgaWYgKG9sZENhcGFjaXR5ICE9IG5ld0NhcGFjaXR5KSB7CisgICAgICAg
IEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYWxsb2NhdGVNb3JlT3V0T2ZMaW5lU3RvcmFnZSh2
bSwgb2xkQ2FwYWNpdHksIG5ld0NhcGFjaXR5KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICAgICAgc2V0QnV0dGVyZmx5KHZtLCBuZXdCdXR0ZXJmbHkpOworICAgICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwg
dmFsdWUpOworICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKKyAgICBzbG90LnNl
dE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25s
eSkKKyAgICAgICAgbmV3U3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygp
OworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg0LDYgKzE4NCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgdmVyYm9zZVNhbml0aXplU3RhY2ssIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZUdlbmVyYXRpb25hbEdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAg
ICB2KGJvb2wsIHVzZUNvbmN1cnJlbnRCYXJyaWVycywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBc
CisgICAgdihib29sLCB1c2VDb25jdXJyZW50R0MsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwK
KyAgICB2KGJvb2wsIGNvbGxlY3RDb250aW51b3VzbHksIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICB2KGJvb2wsIGZvcmNlRmVuY2VkQmFycmllciwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgc2NyaWJibGVGcmVlQ2VsbHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICB2KGRvdWJsZSwgc2l6ZUNsYXNzUHJvZ3Jlc3Npb24sIDEuNCwgTm9ybWFsLCBu
dWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJh
eVZhbHVlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3BhcnNlQXJyYXlWYWx1ZU1hcC5oCShyZXZpc2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TcGFyc2VBcnJheVZhbHVlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDYgKzQ5LDcgQEAgc3RydWN0IFNwYXJzZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYQog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiB9OwogCisvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBo
YXZlIGEgbG9jayBpbiBpdC4KIGNsYXNzIFNwYXJzZUFycmF5VmFsdWVNYXAgZmluYWwgOiBwdWJs
aWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyMDg2
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMiArNDUsNiBAQAogCiAjZGVmaW5lIERVTVBfU1RSVUNUVVJFX0lE
X1NUQVRJU1RJQ1MgMAogCi0jaWZuZGVmIE5ERUJVRwotI2RlZmluZSBET19QUk9QRVJUWU1BUF9D
T05TVEVOQ1lfQ0hFQ0sgMAotI2Vsc2UKLSNkZWZpbmUgRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZ
X0NIRUNLIDAKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNl
IFdURjsKIApAQCAtMTYzLDkgKzE1Nyw5IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGlj
cygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHRh
YmxlID0gc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCkpIHsKICAgICAgICAgICAgICsr
bnVtYmVyV2l0aFByb3BlcnR5TWFwczsKLSAgICAgICAgICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6
ZSArPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+c2l6ZUluTWVtb3J5KCk7CisgICAgICAg
ICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUgKz0gdGFibGUtPnNpemVJbk1lbW9yeSgpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0zMDYsNyArMzAwLDcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIGZvciAoc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJl
OyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkgewogICAgICAgICBzdHJ1Y3R1
cmUtPm1fbG9jay5sb2NrKCk7CiAgICAgICAgIAotICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+
cHJvcGVydHlUYWJsZSgpLmdldCgpOworICAgICAgICB0YWJsZSA9IHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZU9yTnVsbCgpOwogICAgICAgICBpZiAodGFibGUpIHsKICAgICAgICAgICAgIC8vIExl
YXZlIHRoZSBzdHJ1Y3R1cmUgbG9ja2VkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRvIHRoaW5n
cyB0byBpdCBhdG9taWNhbGx5CiAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgbG9zZXMgaXRzIHBy
b3BlcnR5IHRhYmxlLgpAQCAtMzIxLDMwICszMTUsMzEgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTQogICAgIEFTU0VSVCghdGFibGUpOwogfQogCi12b2lkIFN0cnVj
dHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYgdm0pCitQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlU
YWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwotCisgICAgCisgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOworICAgIAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVz
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwog
ICAgIAogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVy
ZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAorICAgIHVuc2lnbmVkIGNhcGFjaXR5ID0gbnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpOwogICAg
IGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBudW1iZXJPZlNs
b3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICB0
YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBjYXBhY2l0eSk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9s
b2NrLnVubG9jaygpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdGFibGUgPSBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGUodm0sIGNhcGFjaXR5KTsKICAgICAKICAgICAvLyBNdXN0IGhvbGQgdGhl
IGxvY2sgb24gdGhpcyBzdHJ1Y3R1cmUsIHNpbmNlIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoaXMg
c3RydWN0dXJlJ3MKICAgICAvLyBwcm9wZXJ0eSBtYXAuIFdlIGRvbid0IHdhbnQgZ2V0Q29uY3Vy
cmVudGx5KCkgdG8gc2VlIHRoZSBwcm9wZXJ0eSBtYXAgaW4gYSBoYWxmLWJha2VkCiAgICAgLy8g
c3RhdGUuCiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKLSAgICBpZiAoIXRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChsb2NrZXIs
IHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0
eSkpOwotICAgIGVsc2UKLSAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgdGFi
bGUpOworICAgIGlmIChzZXRQcm9wZXJ0eVRhYmxlKQorICAgICAgICB0aGlzLT5zZXRQcm9wZXJ0
eVRhYmxlKHZtLCB0YWJsZSk7CiAKICAgICBJbmZlcnJlZFR5cGVUYWJsZSogdHlwZVRhYmxlID0g
bV9pbmZlcnJlZFR5cGVUYWJsZS5nZXQoKTsKIApAQCAtMzU1LDEwICszNTAsMTIgQEAgdm9pZCBT
dHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgaWYg
KHR5cGVUYWJsZSAmJiB0eXBlVGFibGUtPmdldChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCkpKQogICAgICAgICAgICAgZW50cnkuaGFzSW5mZXJyZWRUeXBlID0gdHJ1ZTsKLSAgICAg
ICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOworICAgICAgICB0YWJsZS0+YWRkKGVudHJ5LCBt
X29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAg
ICB9CiAgICAgCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgIAorICAgIHJldHVy
biB0YWJsZTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0
KQpAQCAtNDczLDcgKzQ3MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0
eVRyYW4KICAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVs
bCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgp
KTsKICAgICB0cmFuc2l0aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgp
OwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwot
ICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0
aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1faW5mZXJyZWRUeXBlVGFibGUuc2V0TWF5QmVO
dWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1faW5mZXJyZWRUeXBlVGFibGUuZ2V0KCkp
OwogCkBAIC01MjEsMzYgKzUxOCwzMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJv
cGVydHlUcmFuCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgcHJvdG90eXBlKQogewor
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICB0cmFuc2l0aW9uLT5tX3Byb3RvdHlwZS5z
ZXQodm0sIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
dm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7Cisg
ICAgCisgICAgdHJhbnNpdGlvbi0+cGluKHZtLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5t
X29mZnNldDsKLSAgICB0cmFuc2l0aW9uLT5waW4oKTsKLQorICAgIAogICAgIHRyYW5zaXRpb24t
PmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAog
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKIHsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgaWYgKCFz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIHN0cnVjdHVy
ZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAgICAgICAgCisgICAgICAg
IHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCiAgICAgICAgIHN0cnVj
dHVyZSA9IHRyYW5zaXRpb247CiAgICAgfQogCi0gICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZSgpKTsKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+cHJv
cGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICBQcm9wZXJ0eU1hcEVu
dHJ5KiBlbnRyeSA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnktPmF0dHJpYnV0
ZXMgPSBhdHRyaWJ1dGVzOwogCkBAIC01NjEsMTcgKzU1MiwxNSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBEaWN0aW9uYXJ5S2lu
ZCBraW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJy
ZWQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogCi0gICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
KCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlu
bmluZyh2bSkpOworICAgIHRyYW5zaXRpb24tPnBpbih2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7
Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0SGFzQmVlbkRpY3Rp
b25hcnkodHJ1ZSk7Ci0KKyAgICAKICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3Rl
bmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CkBAIC02MDMsMzEgKzU5MiwyOSBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAKIFByb3BlcnR5VGFibGUq
IFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtKQogewot
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKLSAgICAKLSAgICBpZiAoaXNQaW5u
ZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPmNvcHko
dm0sIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7Ci0gICAgCi0gICAgLy8gSG9sZCB0aGUg
bG9jayB3aGlsZSBzdGVhbGluZyB0aGUgdGFibGUgLSBzbyB0aGF0IGdldENvbmN1cnJlbnRseSgp
IG9uIGFub3RoZXIgdGhyZWFkCi0gICAgLy8gd2lsbCBlaXRoZXIgaGF2ZSB0byBieXBhc3MgdGhp
cyBzdHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRvIHVzZSB0aGUgcHJvcGVydHkgdGFibGUKLSAgICAv
LyBiZWZvcmUgaXQgaXMgc3RvbGVuLgotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
bG9jayk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFrZW5Qcm9wZXJ0eVRhYmxlID0gcHJvcGVydHlU
YWJsZSgpLmdldCgpOwotICAgIHByb3BlcnR5VGFibGUoKS5jbGVhcigpOwotICAgIHJldHVybiB0
YWtlblByb3BlcnR5VGFibGU7CisgICAgLy8gVGhpcyBtdXN0IGFsd2F5cyByZXR1cm4gYSBwcm9w
ZXJ0eSB0YWJsZS4gSXQgY2FuJ3QgcmV0dXJuIG51bGwuCisgICAgUHJvcGVydHlUYWJsZSogcmVz
dWx0ID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAg
aWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+
Y29weSh2bSwgcmVzdWx0LT5zaXplKCkgKyAxKTsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgbnVsbHB0cik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGJvb2wgc2V0UHJvcGVydHlUYWJs
ZSA9IGZhbHNlOworICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFBy
b3BlcnR5VGFibGUpOwogfQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlv
biB0cmFuc2l0aW9uS2luZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gdG9BdHRyaWJ1
dGVzKHRyYW5zaXRpb25LaW5kKTsKLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gbmV3
SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpLCB0
cmFuc2l0aW9uS2luZCk7CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUluY2x1ZGluZ0hp
c3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGVJbmNsdWRpbmdI
aXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBpZiAoY2hhbmdlc0luZGV4aW5n
VHlwZSh0cmFuc2l0aW9uS2luZCkpIHsKICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzdHJ1Y3R1cmUtPm1fZ2xvYmFsT2JqZWN0LmdldCgpKSB7CiAgICAgICAgICAg
ICBpZiAoZ2xvYmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKSkg
ewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFsT2JqZWN0LT5vcmln
aW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGlu
ZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogcmVzdWx0ID0gZ2xvYmFs
T2JqZWN0LT5vcmlnaW5hbEFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlKGluZGV4aW5nVHlw
ZUluY2x1ZGluZ0hpc3RvcnkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkoKSA9PSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KSB7
CiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkVHJhbnNpdGlvbkZyb21UaGlzU3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNjM4LDcgKzYyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9w
ZXJ0eVRyYW5zaXQKICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKICAgICBpZiAo
IXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KDAsIGF0dHJpYnV0ZXMpKSkgewogICAgICAgICBB
U1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpID09IGF0dHJp
YnV0ZXMpOwotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ1R5cGVJ
bmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdUeXBlKTsKKyAgICAgICAgQVNTRVJUKGV4aXN0
aW5nVHJhbnNpdGlvbi0+aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpID09IGluZGV4aW5n
VHlwZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9u
OwogICAgIH0KICAgICAKQEAgLTY0Niw3ICs2MzMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgCiAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZp
b3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUo
aW5kZXhpbmdUeXBlKTsKKyAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeShpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KTsKICAgICAKICAgICBp
ZiAocHJldmVudHNFeHRlbnNpb25zKHRyYW5zaXRpb25LaW5kKSkKICAgICAgICAgdHJhbnNpdGlv
bi0+c2V0RGlkUHJldmVudEV4dGVuc2lvbnModHJ1ZSk7CkBAIC02NTcsMzIgKzY0NCwyOSBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgICAgIC8vIHRhYmxl
LCBzaW5jZSBvdXIgbG9naWMgZm9yIHdhbGtpbmcgdGhlIHByb3BlcnR5IHRyYW5zaXRpb24gY2hh
aW4gdG8gcmVtYXRlcmlhbGl6ZSB0aGUKICAgICAgICAgLy8gdGFibGUgZG9lc24ndCBrbm93IGhv
dyB0byB0YWtlIGludG8gYWNjb3VudCBzdWNoIHdob2xlc2FsZSBlZGl0cy4KICAgICAgICAgCi0g
ICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBk
ZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKKyAg
ICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2FjaGluZyh2bSwgc3RydWN0dXJlLT5jb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBz
dHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNoaW5nKCk7
CiAgICAgICAgIAotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpKSB7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKnRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVy
dGllcyh0cmFuc2l0aW9uS2luZCkpCi0gICAgICAgICAgICAgICAgICAgIGVudHJ5LmF0dHJpYnV0
ZXMgfD0gRG9udERlbGV0ZTsKLSAgICAgICAgICAgICAgICBpZiAoc2V0c1JlYWRPbmx5T25Ob25B
Y2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYmICEoZW50cnkuYXR0cmlidXRlcyAm
IEFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgZW50cnkuYXR0cmlidXRlcyB8PSBSZWFk
T25seTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSB0cmFu
c2l0aW9uLT5wcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRh
YmxlKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgeworICAgICAgICAgICAg
aWYgKHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKHRyYW5zaXRpb25LaW5kKSkKKyAgICAg
ICAgICAgICAgICBlbnRyeS5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7CisgICAgICAgICAgICBp
ZiAoc2V0c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpICYm
ICEoZW50cnkuYXR0cmlidXRlcyAmIEFjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBlbnRyeS5h
dHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgICAgICB0cmFuc2l0
aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKICAgICAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQs
IHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIH0KICAgICAKICAgICBpZiAoc2V0
c1JlYWRPbmx5T25Ob25BY2Nlc3NvclByb3BlcnRpZXModHJhbnNpdGlvbktpbmQpCi0gICAgICAg
ICYmIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKQotICAgICAgICAmJiAhdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLT5pc0VtcHR5KCkpCisgICAgICAgICYmICF0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlT3JOdWxsKCktPmlzRW1wdHkoKSkKICAgICAgICAgdHJhbnNpdGlvbi0+c2V0SGFz
UmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byh0cnVlKTsKICAg
ICAKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgdHJhbnNpdGlv
bi0+cGluKCk7CisgICAgICAgIHRyYW5zaXRpb24tPnBpbih2bSwgdHJhbnNpdGlvbi0+ZW5zdXJl
UHJvcGVydHlUYWJsZSh2bSkpOwogICAgIGVsc2UgewogICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFu
c2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKQEAgLTY5OCwxMyArNjgyLDEyIEBAIGJv
b2wgU3RydWN0dXJlOjppc1NlYWxlZChWTSYgdm0pCiAgICAgaWYgKGlzU3RydWN0dXJlRXh0ZW5z
aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IGVuc3VyZVByb3BlcnR5VGFibGVJZk5vdEVtcHR5KHZtKTsKKyAgICBpZiAoIXRhYmxlKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHBy
b3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBp
dGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAg
IGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICgoaXRlci0+YXR0cmlidXRlcyAmIERvbnRE
ZWxldGUpICE9IERvbnREZWxldGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtNzE3LDEzICs3MDAsMTIgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzRnJvemVuKFZNJiB2bSkKICAg
ICBpZiAoaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAg
IFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0p
OworICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKCEo
aXRlci0+YXR0cmlidXRlcyAmIERvbnREZWxldGUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3Ip
KSkKQEAgLTczNiwyMSArNzE4LDI0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGlj
dGlvbmFyeVMKIHsKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNTRVJUKGlz
RGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2ssIHZtLmhlYXApOwogCiAgICAgc2l6ZV90IGJlZm9yZU91dE9mTGluZUNhcGFjaXR5
ID0gdGhpcy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgewotICAgICAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKKyAgICAgICAgUHJv
cGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7CisgICAgICAgIEFTU0VS
VCh0YWJsZSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eVRhYmxl
KCktPnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSB0YWJsZS0+c2l6ZSgp
OwogCiAgICAgICAgIC8vIEhvbGRzIG91ciB2YWx1ZXMgY29tcGFjdGVkIGJ5IGluc2VydGlvbiBv
cmRlci4KICAgICAgICAgVmVjdG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9wZXJ0eUNvdW50KTsKIAog
ICAgICAgICAvLyBDb3BpZXMgb3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVpciBoYXNoZWQgbG9jYXRp
b25zLCBjb21wYWN0aW5nIHByb3BlcnR5IHRhYmxlIG9mZnNldHMgYXMgd2UgZ28uCiAgICAgICAg
IHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBw
cm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSB0YWJsZS0+ZW5kKCk7CiAgICAgICAgIG1fb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAg
ICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgp
LT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgZm9yIChQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIsICsraSkgewogICAgICAgICAgICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3Qo
aXRlci0+b2Zmc2V0KTsKICAgICAgICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zm
c2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIH0KQEAg
LTc1OSw3ICs3NDQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlT
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9wZXJ0eUNvdW50OyBpKyspCiAg
ICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIo
aSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7CiAKLSAgICAgICAgcHJvcGVydHlUYWJs
ZSgpLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CisgICAgICAgIHRhYmxlLT5jbGVhckRlbGV0ZWRP
ZmZzZXRzKCk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICB9CiAKQEAg
LTc2OCw1NSArNzUzLDM0IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFy
eVMKIAogICAgIHNpemVfdCBhZnRlck91dE9mTGluZUNhcGFjaXR5ID0gdGhpcy0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKIAotICAgIGlmIChiZWZvcmVPdXRPZkxpbmVDYXBhY2l0eSAhPSBhZnRlck91
dE9mTGluZUNhcGFjaXR5KSB7CisgICAgaWYgKG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgYmVmb3Jl
T3V0T2ZMaW5lQ2FwYWNpdHkgIT0gYWZ0ZXJPdXRPZkxpbmVDYXBhY2l0eSkgewogICAgICAgICBB
U1NFUlQoYmVmb3JlT3V0T2ZMaW5lQ2FwYWNpdHkgPiBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsK
ICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYWQgYSBCdXR0ZXJmbHkgYnV0IGFmdGVyIGZsYXR0
ZW5pbmcvY29tcGFjdGluZyB3ZSBubyBsb25nZXIgaGF2ZSBuZWVkIG9mIGl0LAogICAgICAgICAv
LyB3ZSBuZWVkIHRvIHplcm8gaXQgb3V0IGJlY2F1c2UgdGhlIGNvbGxlY3RvciBkZXBlbmRzIG9u
IHRoZSBTdHJ1Y3R1cmUgdG8ga25vdyB0aGUgc2l6ZSBmb3IgY29weWluZy4KLSAgICAgICAgaWYg
KG9iamVjdC0+YnV0dGVyZmx5KCkgJiYgIWFmdGVyT3V0T2ZMaW5lQ2FwYWNpdHkgJiYgIXRoaXMt
Pmhhc0luZGV4aW5nSGVhZGVyKG9iamVjdCkpCi0gICAgICAgICAgICBvYmplY3QtPnNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcywgMCk7CisgICAgICAgIGlmICghYWZ0ZXJPdXRPZkxp
bmVDYXBhY2l0eSAmJiAhdGhpcy0+aGFzSW5kZXhpbmdIZWFkZXIob2JqZWN0KSkKKyAgICAgICAg
ICAgIG9iamVjdC0+c2V0QnV0dGVyZmx5KHZtLCBudWxscHRyKTsKICAgICAgICAgLy8gSWYgdGhl
IG9iamVjdCB3YXMgZG93bi1zaXplZCB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhl
IEJ1dHRlcmZseSBpcyBubyBsb25nZXIgd2l0aGluIHRoZSAKICAgICAgICAgLy8gZmlyc3QgQ29w
aWVkQmxvY2s6OmJsb2NrU2l6ZSBieXRlcywgd2UnbGwgZ2V0IHRoZSB3cm9uZyBhbnN3ZXIgaWYg
d2UgdHJ5IHRvIG1hc2sgdGhlIGJhc2UgYmFjayB0byAKICAgICAgICAgLy8gdGhlIENvcGllZEJs
b2NrIGhlYWRlci4gVG8gcHJldmVudCB0aGlzIGNhc2Ugd2UgbmVlZCB0byBtZW1tb3ZlIHRoZSBC
dXR0ZXJmbHkgZG93bi4KLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5idXR0ZXJmbHkoKSkKLSAg
ICAgICAgICAgIG9iamVjdC0+c2hpZnRCdXR0ZXJmbHlBZnRlckZsYXR0ZW5pbmcodm0sIGJlZm9y
ZU91dE9mTGluZUNhcGFjaXR5LCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb2JqZWN0LT5zaGlmdEJ1dHRlcmZseUFmdGVyRmxhdHRlbmluZyhsb2Nr
ZXIsIHZtLCB0aGlzLCBhZnRlck91dE9mTGluZUNhcGFjaXR5KTsKICAgICB9Ci0KLSAgICByZXR1
cm4gdGhpczsKLX0KLQotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAg
Ci0gICAgcGluKCk7Ci0KLSAgICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFT
U0VSVChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5n
KHZtLCBkZWZlckdDKTsKLQotICAgIHBpbigpOwotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlO
YW1lKTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCit2b2lk
IFN0cnVjdHVyZTo6cGluKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCiB7Ci0gICAgQVNT
RVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgc2V0SXNQaW5uZWRQcm9wZXJ0eVRhYmxlKHRydWUp
OworICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKICAgICBjbGVhclByZXZpb3VzSUQo
KTsKICAgICBtX25hbWVJblByZXZpb3VzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6
OnBpbkZvckNhY2hpbmcoKQordm9pZCBTdHJ1Y3R1cmU6OnBpbkZvckNhY2hpbmcoVk0mIHZtLCBQ
cm9wZXJ0eVRhYmxlKiB0YWJsZSkKIHsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAg
ICBzZXRJc1Bpbm5lZFByb3BlcnR5VGFibGUodHJ1ZSk7CisgICAgc2V0UHJvcGVydHlUYWJsZSh2
bSwgdGFibGUpOwogICAgIG1fbmFtZUluUHJldmlvdXMgPSBudWxscHRyOwogfQogCkBAIC04OTEs
MTcgKzg1NSwxMyBAQCB2b2lkIFN0cnVjdHVyZTo6d2lsbFN0b3JlVmFsdWVTbG93KAogICAgIH0K
IAogICAgIC8vIFRoaXMgb25seSB3b3JrcyBpZiB3ZSd2ZSBnb3QgYSBwcm9wZXJ0eSB0YWJsZS4K
LSAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlOwotICAgIG1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeSh2bSwgcHJvcGVydHlUYWJsZSk7Ci0KKyAgICBQcm9wZXJ0eVRhYmxl
KiBwcm9wZXJ0eVRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisgICAgCiAgICAgLy8g
V2UgbXVzdCBiZSBjYWxsaW5nIHRoaXMgYWZ0ZXIgaGF2aW5nIGNyZWF0ZWQgdGhlIGdpdmVuIHBy
b3BlcnR5IG9yIGNvbmZpcm1lZCB0aGF0IGl0IHdhcyBwcmVzZW50Ci0gICAgLy8gYWxyZWFkeSwg
c28gd2UgbXVzdCBoYXZlIGEgcHJvcGVydHkgdGFibGUgbm93LgotICAgIEFTU0VSVChwcm9wZXJ0
eVRhYmxlKTsKLQotICAgIC8vIC4uLiBhbmQgdGhlIHByb3BlcnR5IG11c3QgYmUgcHJlc2VudC4K
KyAgICAvLyBhbHJlYWR5LCBzbyB0aGUgcHJvcGVydHkgbXVzdCBiZSBwcmVzZW50LgogICAgIFBy
b3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51
aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsKLQorICAgIAogICAgIGlmIChzaG91bGRPcHRpbWl6
ZSkKICAgICAgICAgZW50cnktPmhhc0luZmVycmVkVHlwZSA9IHRhYmxlLT53aWxsU3RvcmVWYWx1
ZSh2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYWdlKTsKICAgICBlbHNlIHsKQEAgLTk0MywxOCAr
OTAzLDEyIEBAIFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXI6On5Qcm9wZXIKIAogI2Vu
ZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZt
KQotewotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwot
fQotCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
ZyhWTSYgdm0pCiB7Ci0gICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKLSAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldCht
X29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgIGlmIChQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IHByb3BlcnR5VGFibGVPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6
OmNsb25lKHZtLCAqdGFibGUpOworICAgIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IGZhbHNlOwor
ICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0sIHNldFByb3BlcnR5VGFibGUp
OwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShVbmlxdWVk
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKQEAgLTk4OSw3MCArOTQzLDI0
IEBAIFZlY3RvcjxQcm9wZXJ0eU1hcEVudHJ5PiBTdHJ1Y3R1cmU6OmdldFAKIAogUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogewotICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jaywgdm0uaGVhcCk7Ci0gICAgCi0gICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZz
ZXQoZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpKSk7Ci0KLSAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RW51bSB8fCBwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkK
LSAgICAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZh
bHNlKTsKLQotICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKGxvY2tlciwgdm0pOwot
Ci0gICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zm
c2V0KG1faW5saW5lQ2FwYWNpdHkpOwotCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVy
dHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgIHJldHVybiBuZXdPZmZzZXQ7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBbXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYs
IFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAg
YXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0KLSAgICBpZiAoIXByb3BlcnR5VGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpm
aW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHJlcCk7Ci0gICAg
aWYgKCFwb3NpdGlvbi5maXJzdCkKLSAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7Ci0KLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwotCi0gICAg
cHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOwotICAgIHByb3BlcnR5VGFibGUoKS0+
YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwotCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
IHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcChj
b25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mIHZtLCB1bnNpZ25lZCBjYXBhY2l0
eSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgcHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdGhpcywgUHJvcGVydHlUYWJsZTo6
Y3JlYXRlKHZtLCBjYXBhY2l0eSkpOworICAgIHJldHVybiByZW1vdmUocHJvcGVydHlOYW1lLCBb
XSAoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwogfQog
CiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7
Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlSWZOb3RFbXB0eSh2
bSk7CisgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgYm9vbCBr
bm93blVuaXF1ZSA9IHByb3BlcnR5TmFtZXMuY2FuQWRkS25vd25VbmlxdWVGb3JTdHJ1Y3R1cmUo
KTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+
ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlU
YWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgCisgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CiAgICAgICAgIEFTU0VSVCghaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1l
cmF0aW9uKCkgfHwgIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKICAgICAgICAgQVNT
RVJUKCFpc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSB8fCAhaXRl
ci0+a2V5LT5pc1N5bWJvbCgpKTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmlidXRlcyAmIERv
bnRFbnVtKSB8fCBtb2RlLmluY2x1ZGVEb250RW51bVByb3BlcnRpZXMoKSkgewpAQCAtMTExNCw2
ICsxMDIyLDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEpT
Q2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAKKyAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5tX2xvY2spOworICAgIAogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKCF0aGlz
T2JqZWN0LT5pc09iamVjdCgpKQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlw
ZUNoYWluLmNsZWFyKCk7CkBAIC0xMjc2LDkyICsxMTg3LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1
bXBDb250ZXh0SGVhZGVyKFByaW50UwogICAgIG91dC5wcmludCgiU3RydWN0dXJlczoiKTsKIH0K
IAotI2lmIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwotCi12b2lkIFByb3BlcnR5VGFi
bGU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIEFTU0VSVChtX2luZGV4U2l6ZSA+PSBQcm9w
ZXJ0eVRhYmxlOjpNaW5pbXVtVGFibGVTaXplKTsKLSAgICBBU1NFUlQobV9pbmRleE1hc2spOwot
ICAgIEFTU0VSVChtX2luZGV4U2l6ZSA9PSBtX2luZGV4TWFzayArIDEpOwotICAgIEFTU0VSVCgh
KG1faW5kZXhTaXplICYgbV9pbmRleE1hc2spKTsKLQotICAgIEFTU0VSVChtX2tleUNvdW50IDw9
IG1faW5kZXhTaXplIC8gMik7Ci0gICAgQVNTRVJUKG1fa2V5Q291bnQgKyBtX2RlbGV0ZWRDb3Vu
dCA8PSBtX2luZGV4U2l6ZSAvIDIpOwotICAgIEFTU0VSVChtX2RlbGV0ZWRDb3VudCA8PSBtX2lu
ZGV4U2l6ZSAvIDQpOwotCi0gICAgdW5zaWduZWQgaW5kZXhDb3VudCA9IDA7Ci0gICAgdW5zaWdu
ZWQgZGVsZXRlZEluZGV4Q291bnQgPSAwOwotICAgIGZvciAodW5zaWduZWQgYSA9IDA7IGEgIT0g
bV9pbmRleFNpemU7ICsrYSkgewotICAgICAgICB1bnNpZ25lZCBlbnRyeUluZGV4ID0gbV9pbmRl
eFthXTsKLSAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gUHJvcGVydHlUYWJsZTo6RW1wdHlFbnRy
eUluZGV4KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChlbnRyeUluZGV4ID09
IGRlbGV0ZWRFbnRyeUluZGV4KCkpIHsKLSAgICAgICAgICAgICsrZGVsZXRlZEluZGV4Q291bnQ7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJ
bmRleCA8IGRlbGV0ZWRFbnRyeUluZGV4KCkpOwotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCAt
IDEgPD0gdXNlZENvdW50KCkpOwotICAgICAgICArK2luZGV4Q291bnQ7Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBiID0gYSArIDE7IGIgIT0gbV9pbmRleFNpemU7ICsrYikKLSAgICAgICAgICAg
IEFTU0VSVChtX2luZGV4W2JdICE9IGVudHJ5SW5kZXgpOwotICAgIH0KLSAgICBBU1NFUlQoaW5k
ZXhDb3VudCA9PSBtX2tleUNvdW50KTsKLSAgICBBU1NFUlQoZGVsZXRlZEluZGV4Q291bnQgPT0g
bV9kZWxldGVkQ291bnQpOwotCi0gICAgQVNTRVJUKCF0YWJsZSgpW2RlbGV0ZWRFbnRyeUluZGV4
KCkgLSAxXS5rZXkpOwotCi0gICAgdW5zaWduZWQgbm9uRW1wdHlFbnRyeUNvdW50ID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGMgPSAwOyBjIDwgdXNlZENvdW50KCk7ICsrYykgewotICAgICAgICBT
dHJpbmdJbXBsKiByZXAgPSB0YWJsZSgpW2NdLmtleTsKLSAgICAgICAgaWYgKHJlcCA9PSBQUk9Q
RVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgKytub25FbXB0eUVudHJ5Q291bnQ7Ci0gICAgICAgIHVuc2lnbmVkIGkgPSBJZGVudGlmaWVy
UmVwSGFzaDo6aGFzaChyZXApOwotICAgICAgICB1bnNpZ25lZCBrID0gMDsKLSAgICAgICAgdW5z
aWduZWQgZW50cnlJbmRleDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGVudHJ5
SW5kZXggPSBtX2luZGV4W2kgJiBtX2luZGV4TWFza107Ci0gICAgICAgICAgICBBU1NFUlQoZW50
cnlJbmRleCAhPSBQcm9wZXJ0eVRhYmxlOjpFbXB0eUVudHJ5SW5kZXgpOwotICAgICAgICAgICAg
aWYgKHJlcCA9PSB0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5rZXkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBpZiAoayA9PSAwKQotICAgICAgICAgICAgICAgIGsgPSAxIHwg
ZG91YmxlSGFzaChJZGVudGlmaWVyUmVwSGFzaDo6aGFzaChyZXApKTsKLSAgICAgICAgICAgIGkg
Kz0gazsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoZW50cnlJbmRleCA9PSBjICsgMSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKG5vbkVtcHR5RW50cnlDb3VudCA9PSBtX2tleUNvdW50KTsKLX0K
LQotdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9u
KCkpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJs
ZSgpLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pKTsKLSAgICAgICAgICAg
IEFTU0VSVCghaXRlci0+a2V5LT5pc1N5bWJvbCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHByb3BlcnR5VGFibGUoKS0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotfQotCi0jZWxzZQotCi1pbmxp
bmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQotewotICAgIGNoZWNrT2Zmc2V0
Q29uc2lzdGVuY3koKTsKLX0KLQotI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9D
SEVDSwotCiBib29sIENsYXNzSW5mbzo6aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBjaSA9IHRoaXM7IGNpOyBj
aSA9IGNpLT5wYXJlbnRDbGFzcykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTcgKzE4MywxOSBA
QCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc1NlYWxlZChWTSYpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNGcm96ZW4oVk0mKTsKICAgICBib29sIGlzU3RydWN0
dXJlRXh0ZW5zaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFkaWRQcmV2ZW50RXh0ZW5zaW9ucygpOyB9
Ci0gICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKLSAgICBzaXplX3Qgc3Vn
Z2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShWTSYsIEpTT2JqZWN0
Kik7CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgLy8gVGhlc2Ugc2hvdWxkIGJl
IHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZz
ZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcyk7Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJvcGVydHlXaXRob3V0
VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgLy8gVmVyc2lvbnMgdGhhdCB0YWtl
IGEgZnVuYyB3aWxsIGNhbGwgaXQgYWZ0ZXIgbWFraW5nIHRoZSBjaGFuZ2UgYnV0IHdoaWxlIHN0
aWxsIGhvbGRpbmcKKyAgICAvLyB0aGUgbG9jay4gVGhlIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWQg
aWYgdGhlcmUgaXMgbm8gY2hhbmdlIGJlaW5nIG1hZGUsIGxpa2UgaWYgeW91IGNhbGwKKyAgICAv
LyByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKCkgYW5kIHRoZSBwcm9wZXJ0eSBpcyBu
b3QgZm91bmQuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNl
dCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBjb25zdCBGdW5jJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwg
UHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CiAgICAgdm9pZCBzZXRQcm90b3R5cGVXaXRob3V0
VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2
bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKICAgICBib29sIGlzRGljdGlvbmFyeSgp
IGNvbnN0IHsgcmV0dXJuIGRpY3Rpb25hcnlLaW5kKCkgIT0gTm9uZURpY3Rpb25hcnlLaW5kOyB9
CkBAIC0yMjksOCArMjMxLDggQEAgcHVibGljOgogICAgIFR5cGVJbmZvIHR5cGVJbmZvKCkgY29u
c3QgeyBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7IHJldHVybiBt
X2Jsb2IudHlwZUluZm8obV9vdXRPZkxpbmVUeXBlRmxhZ3MpOyB9CiAgICAgYm9vbCBpc09iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIHR5cGVJbmZvKCkuaXNPYmplY3QoKTsgfQogCi0gICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUo
KSAmIEFsbEFycmF5VHlwZXM7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVk
aW5nSGlzdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvYi5pbmRleGluZ1R5cGUoKTsgfQorICAg
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2IuaW5kZXhp
bmdUeXBlSW5jbHVkaW5nSGlzdG9yeSgpICYgQWxsQXJyYXlUeXBlczsgfQorICAgIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9ibG9i
LmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoKTsgfQogICAgICAgICAKICAgICBib29sIG1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CiAgICAgewpAQCAtNDMzLDkgKzQzNSw5
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmUsIG1f
Y2xhc3NJbmZvKTsKICAgICB9CiAgICAgICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhp
bmdUeXBlT2Zmc2V0KCkKKyAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZUluY2x1ZGlu
Z0hpc3RvcnlPZmZzZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihT
dHJ1Y3R1cmUsIG1fYmxvYikgKyBTdHJ1Y3R1cmVJREJsb2I6OmluZGV4aW5nVHlwZU9mZnNldCgp
OworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0cnVjdHVyZSwgbV9ibG9iKSArIFN0
cnVjdHVyZUlEQmxvYjo6aW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgcHRyZGlmZl90IHByb3BlcnR5VGFibGVVbnNhZmVPZmZzZXQo
KQpAQCAtNTc5LDYgKzU4MSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBkdW1w
Q29udGV4dEhlYWRlcihQcmludFN0cmVhbSYpOwogICAgIAorICAgIENvbmN1cnJlbnRKSVRMb2Nr
JiBsb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKIAogcHJpdmF0ZToKQEAgLTYzMyw0NCArNjM3LDQ1IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
c3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IERpY3Rpb25hcnlLaW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZSogPSBudWxscHRyKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVy
dHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBjb25z
dCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIFByb3Bl
cnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0
eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlN
YXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291
bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIFdyaXRlQmFycmll
cjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFibGUqIHRh
a2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJik7Ci0gICAgUHJvcGVydHlUYWJsZSog
Y29weVByb3BlcnR5VGFibGUoVk0mKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFs
aXplUHJvcGVydHlNYXAoVk0mKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCisgICAgLy8gVGhpcyBtYXkg
Z3JhYiB0aGUgbG9jaywgb3Igbm90LiBEbyBub3QgY2FsbCB3aGVuIGhvbGRpbmcgdGhlIFN0cnVj
dHVyZSdzIGxvY2suCisgICAgUHJvcGVydHlUYWJsZSogZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90
RW1wdHkoVk0mIHZtKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7
Ci0gICAgICAgIEFTU0VSVChjaGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCi0gICAgICAgICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKHZtKTsKKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1f
cHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIGlmICghcHJldmlvdXNJRCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2
bSwgUHJvcGVydHlUYWJsZSomIHRhYmxlKQorICAgIAorICAgIC8vIFRoaXMgbWF5IGdyYWIgdGhl
IGxvY2ssIG9yIG5vdC4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRoZSBTdHJ1Y3R1cmUncyBs
b2NrLgorICAgIFByb3BlcnR5VGFibGUqIGVuc3VyZVByb3BlcnR5VGFibGUoVk0mIHZtKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7Ci0gICAgICAgIEFTU0VSVChj
aGVja09mZnNldENvbnNpc3RlbmN5KCkpOwotICAgICAgICB0YWJsZSA9IHByb3BlcnR5VGFibGUo
KS5nZXQoKTsKLSAgICAgICAgaWYgKCF0YWJsZSAmJiBwcmV2aW91c0lEKCkpIHsKLSAgICAgICAg
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXAodm0pOwotICAgICAgICAgICAgdGFibGUgPSBwcm9wZXJ0eVRhYmxlKCkuZ2V0KCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFByb3BlcnR5VGFibGUqIHJlc3VsdCA9IG1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5nZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBtYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUodm0pOwogICAgIH0KLSAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoVk0mIHZtLCBEZWZlckdD
JikKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlT3JOdWxsKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygp
KTsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKLSAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXAodm0pOworICAg
ICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwogICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIHdpbGwgZ3JhYiB0aGUgbG9jay4gRG8gbm90IGNhbGwgd2hlbiBob2xkaW5nIHRo
ZSBTdHJ1Y3R1cmUncyBsb2NrLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5VGFibGUq
IG1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYsIGJvb2wgc2V0UHJvcGVydHlUYWJsZSA9IHRy
dWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHlUYWJsZShWTSYgdm0sIFByb3BlcnR5VGFi
bGUqIHRhYmxlKTsKKyAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhWTSYpOwogCiAgICAgdm9pZCBzZXRQcmV2aW91c0lEKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewpAQCAtNjk3LDggKzcwMiw4IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1ZhbGlkKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3Rv
dHlwZUNoYWluKSBjb25zdDsKICAgICBib29sIGlzVmFsaWQoRXhlY1N0YXRlKiwgU3RydWN0dXJl
Q2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluKSBjb25zdDsKICAgICAgICAgCi0gICAgdm9pZCBw
aW4oKTsKLSAgICB2b2lkIHBpbkZvckNhY2hpbmcoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHBpbihWTSYsIFByb3BlcnR5VGFibGUqKTsKKyAgICB2b2lkIHBpbkZvckNhY2hpbmcoVk0m
LCBQcm9wZXJ0eVRhYmxlKik7CiAgICAgCiAgICAgYm9vbCBpc1JhcmVEYXRhKEpTQ2VsbCogY2Vs
bCkgY29uc3QKICAgICB7CkBAIC03MTAsNyArNzE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKGhhc1JhcmVEYXRhKCkpOwogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJl
UmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQotICAgICAgICAK
KwogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CkBAIC03NDAsNyArNzQ1LDcg
QEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25U
YWJsZTsKIAotICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUo
KS4gRHVyaW5nIEdDLCBpdCBtYXkgYmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAg
Ly8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91Z2ggZW5zdXJlUHJvcGVydHlUYWJsZSgpLiBEdXJp
bmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90aGVyIHRocmVhZC4KICAgICAvLyBEdXJp
bmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNsZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBp
cyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJREJsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJREJsb2IuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSURCbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAs
MTAgKzQwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5kb3VibGVXb3JkID0gMHhiYmFkYmVlZjsK
ICAgICB9CiAKLSAgICBTdHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIElu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbykKKyAgICBT
dHJ1Y3R1cmVJREJsb2IoU3RydWN0dXJlSUQgc3RydWN0dXJlSUQsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8pCiAgICAg
ewogICAgICAgICB1LmZpZWxkcy5zdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlEOwotICAgICAgICB1
LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRleGluZ1R5cGU7CisgICAgICAgIHUuZmllbGRzLmlu
ZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkgPSBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
OwogICAgICAgICB1LmZpZWxkcy50eXBlID0gdHlwZUluZm8udHlwZSgpOwogICAgICAgICB1LmZp
ZWxkcy5pbmxpbmVUeXBlRmxhZ3MgPSB0eXBlSW5mby5pbmxpbmVUeXBlRmxhZ3MoKTsKICAgICAg
ICAgdS5maWVsZHMuZGVmYXVsdENlbGxTdGF0ZSA9IENlbGxTdGF0ZTo6TmV3V2hpdGU7CkBAIC01
Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVJ
REJsb2ImIG90aGVyKSB7IHUuZG91YmxlV29yZCA9IG90aGVyLnUuZG91YmxlV29yZDsgfQogICAg
IAogICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEKCkgY29uc3QgeyByZXR1cm4gdS5maWVsZHMu
c3RydWN0dXJlSUQ7IH0KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gdS5maWVsZHMuaW5kZXhpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRJbmRleGluZ1R5cGUo
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSkgeyB1LmZpZWxkcy5pbmRleGluZ1R5cGUgPSBpbmRl
eGluZ1R5cGU7IH0KKyAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlzdG9y
eSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLmluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7
IH0KKyAgICB2b2lkIHNldEluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkoSW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3RvcnkpIHsgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5j
bHVkaW5nSGlzdG9yeSA9IGluZGV4aW5nVHlwZUluY2x1ZGluZ0hpc3Rvcnk7IH0KICAgICBKU1R5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRzLnR5cGU7IH0KICAgICBUeXBlSW5mbzo6
SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIHUuZmllbGRz
LmlubGluZVR5cGVGbGFnczsgfQogICAgIApAQCAtNjcsMTYgKzY3LDE2IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdHJ1Y3R1cmVJREJsb2IsIHUuZmllbGRzLnN0
cnVjdHVyZUlEKTsKICAgICB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4aW5nVHlwZU9m
ZnNldCgpCisgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGluZ1R5cGVJbmNsdWRpbmdIaXN0b3J5
T2Zmc2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RydWN0dXJl
SURCbG9iLCB1LmZpZWxkcy5pbmRleGluZ1R5cGUpOworICAgICAgICByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cnVjdHVyZUlEQmxvYiwgdS5maWVsZHMuaW5kZXhpbmdUeXBlSW5jbHVkaW5nSGlz
dG9yeSk7CiAgICAgfQogCiBwcml2YXRlOgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIFN0cnVjdHVyZUlEIHN0cnVjdHVyZUlEOwotICAgICAgICAgICAgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZTsKKyAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGVJbmNsdWRpbmdIaXN0b3J5OwogICAgICAgICAgICAgSlNUeXBlIHR5cGU7CiAgICAgICAgICAg
ICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFnczsKICAgICAgICAgICAg
IENlbGxTdGF0ZSBkZWZhdWx0Q2VsbFN0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjA4NjUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtOTMsOCArOTMsNyBAQCBBTFdBWVNfSU5MSU5FIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKIAotICAgIFByb3BlcnR5VGFi
bGUqIHByb3BlcnR5VGFibGU7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBwcm9wZXJ0eVRhYmxlKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0g
ZW5zdXJlUHJvcGVydHlUYWJsZUlmTm90RW1wdHkodm0pOwogICAgIGlmICghcHJvcGVydHlUYWJs
ZSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTIxOSwzMSArMjE4LDYgQEAg
aW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZQogICAgIHJldHVybiBpc1Zh
bGlkKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwog
fQogCi1pbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
Ci17Ci0gICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotCi0gICAgQVNTRVJUKG91dE9mTGlu
ZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLQotICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2Fw
YWNpdHkoKSA+PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBv
dXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIH0KLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBh
Y2l0eSgpID49IHByb3BlcnR5VGFibGUoKS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKLSAgICBp
ZiAocHJvcGVydHlUYWJsZSgpLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEFTU0VSVCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IHByb3BlcnR5VGFi
bGUoKS0+c2l6ZSgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgPT0gdG90
YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLX0KLQotQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJv
cGVydHlUYWJsZT4mIFN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSgpCi17Ci0gICAgcmV0dXJuIG1f
cHJvcGVydHlUYWJsZVVuc2FmZTsKLX0KLQogaW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBs
YWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQogewogICAgIGlmIChMSUtFTFkoIWhh
c1JhcmVEYXRhKCkpKQpAQCAtMjcxLDcgKzI0NSw3IEBAIGlubGluZSBXYXRjaHBvaW50U2V0KiBT
dHJ1Y3R1cmU6OnByb3BlcnQKIAogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tP
ZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlU
YWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBw
cm9wZXJ0eVRhYmxlID0gcHJvcGVydHlUYWJsZU9yTnVsbCgpOwogCiAgICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKSB7CiAgICAgICAgIEFTU0VSVCghaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwpAQCAt
MjkyLDYgKzI2NiwxMSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2lubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25z
aXN0ZW5jeSgpCit7CisgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworfQorCiBpbmxpbmUg
c2l6ZV90IG5leHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoc2l6ZV90IGN1cnJlbnRDYXBhY2l0
eSkKIHsKICAgICBpZiAoIWN1cnJlbnRDYXBhY2l0eSkKQEAgLTI5OSwxMSArMjc4LDYgQEAgaW5s
aW5lIHNpemVfdCBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaQogICAgIHJldHVybiBjdXJyZW50
Q2FwYWNpdHkgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiB9CiAKLWlubGluZSBzaXplX3QgU3Ry
dWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKQotewotICAgIHJl
dHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwot
fQotCiBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OnNldE9iamVjdFRvU3RyaW5nVmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBWTSYgdm0sIEpTU3RyaW5nKiB2YWx1ZSwgUHJvcGVydHlTbG90IHRvU3RyaW5n
VGFnU3ltYm9sU2xvdCkKIHsKICAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCkBAIC0zMTEsNCArMjg1
LDg1IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6c2V0T2JqZWN0VG9TdHJpbmcKICAgICByYXJl
RGF0YSgpLT5zZXRPYmplY3RUb1N0cmluZ1ZhbHVlKGV4ZWMsIHZtLCB0aGlzLCB2YWx1ZSwgdG9T
dHJpbmdUYWdTeW1ib2xTbG90KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGlu
ZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmIGZ1bmMpCit7CisgICAg
UHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKworICAgIEdD
U2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisgICAgCisg
ICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgIAorICAgIEFTU0VSVCghSlNDOjpp
c1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOworCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udEVudW0gfHwgcHJvcGVydHlOYW1lLmlz
U3ltYm9sKCkpCisgICAgICAgIHNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7CisKKyAgICBhdXRvIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKKwor
ICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KG1faW5saW5l
Q2FwYWNpdHkpOworICAgIAorICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5l
d09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgZnVu
Yyhsb2NrZXIsIG5ld09mZnNldCk7CisgICAgcmV0dXJuIG5ld09mZnNldDsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgCisgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOworCisgICAgYXV0byByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgCisgICAg
Ly8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdoaWNoIHdp
bGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0YWJsZS4KKyAgICAvLyBUaGUgb25seSB3YXkgZm9y
IHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBpcyBpZiB0aGV5IGFyZSBlbXB0eS4KKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5VGFibGVPck51bGwoKTsKKworICAgIGlmICghdGFi
bGUpCisgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgUHJvcGVydHlUYWJsZTo6
ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRhYmxlLT5maW5kKHJlcCk7CisgICAgaWYgKCFwb3Np
dGlvbi5maXJzdCkKKyAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CisgICAgCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKKworICAgIHRhYmxl
LT5yZW1vdmUocG9zaXRpb24pOworICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7
CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICBmdW5jKGxvY2tlciwgb2Zmc2V0KTsK
KyAgICByZXR1cm4gb2Zmc2V0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgoraW5saW5l
IFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmIGZ1bmMpCit7CisgICAgcGluKHZtLCBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKSk7
CisgICAgCisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBmdW5j
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoreworICAgIEFTU0VSVChpc1VuY2Fj
aGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkp
OworICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOworICAgIAorICAgIHJldHVybiBy
ZW1vdmUocHJvcGVydHlOYW1lLCBmdW5jKTsKK30KKworaW5saW5lIHZvaWQgU3RydWN0dXJlOjpz
ZXRQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgUHJvcGVydHlUYWJsZSogdGFibGUpCit7CisgICAgbV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLnNldE1heUJlTnVsbCh2bSwgdGhpcywgdGFibGUpOworfQorICAg
IAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxNi0xMS0x
MSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBHQyBzaG91
bGQgYmUgb3B0aW9uYWxseSBjb25jdXJyZW50IGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ0NTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKyAgICAgICAgCisgICAgICAgIFRoZSBy
ZWFzb24gd2h5IEkgd2VudCB0byBzdWNoIGdyZWF0IHBhaW5zIHRvIG1ha2UgV1RGOjpMb2NrIGZp
dCBpbiB0d28gYml0cyBpcyB0aGF0IEkKKyAgICAgICAga25ldyB0aGF0IEkgd291bGQgZXZlbnR1
YWxseSBuZWVkIHRvIHN0dWZmIG9uZSBpbnRvIHNvbWUgbWlzY2VsbGFuZW91cyBiaXRzIG9mIHRo
ZQorICAgICAgICBKU0NlbGwgaGVhZGVyLiBUaGF0IHRpbWUgaGFzIGNvbWUsIGJlY2F1c2UgdGhl
IGNvbmN1cnJlbnQgR0MgaGFzIG51bWVyb3VzIHJhY2UKKyAgICAgICAgY29uZGl0aW9ucyBpbiB2
aXNpdENoaWxkcmVuIHRoYXQgY2FuIGJlIHRyaXZpYWxseSBmaXhlZCBpZiBlYWNoIG9iamVjdCBq
dXN0IGhhcyBhbgorICAgICAgICBpbnRlcm5hbCBsb2NrLiBTb21lIGNlbGwgdHlwZXMgbWlnaHQg
dXNlIGl0IHRvIHNpbXBseSBwcm90ZWN0IHRoZWlyIGVudGlyZSB2aXNpdENoaWxkcmVuCisgICAg
ICAgIGZ1bmN0aW9uIGFuZCBhbnl0aGluZyB0aGF0IG11dGF0ZXMgdGhlIGZpZWxkcyBpdCB0b3Vj
aGVzLCB3aGlsZSBvdGhlciBjZWxsIHR5cGVzIG1pZ2h0CisgICAgICAgIHVzZSBpdCBhcyBhICJs
b2NrIG9mIGxhc3QgcmVzb3J0IiB0byBoYW5kbGUgY29ybmVyIGNhc2VzIG9mIGFuIG90aGVyd2lz
ZSB3YWl0LWZyZWUgb3IKKyAgICAgICAgbG9jay1mcmVlIGFsZ29yaXRobS4gUmlnaHQgbm93LCBp
dCdzIHVzZWQgdG8gcHJvdGVjdCBjZXJ0YWluIHRyYW5zZm9ybWF0aW9ucyBpbnZvbHZpbmcKKyAg
ICAgICAgaW5kZXhpbmcgc3RvcmFnZS4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgdGhpcyBo
YXBwZW4sIEkgZmFjdG9yZWQgdGhlIFdURjo6TG9jayBhbGdvcml0aG0gaW50byBhIExvY2tBbGdv
cml0aG0gc3RydWN0IHRoYXQKKyAgICAgICAgaXMgdGVtcGxhdGl6ZWQgb24gbG9jayB0eXBlICh1
aW50OF90IGZvciBXVEY6OkxvY2spLCB0aGUgaXNIZWxkQml0IHZhbHVlICgxIGZvcgorICAgICAg
ICBXVEY6OkxvY2spLCBhbmQgdGhlIGhhc1BhcmtlZEJpdCB2YWx1ZSAoMiBmb3IgV1RGOjpMb2Nr
KS4gVGhpcyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBhcworICAgICAgICBhIHRlbXBsYXRpemVkIExv
Y2sgY2xhc3MgdGhhdCBiYXNpY2FsbHkgY29udGFpbnMgQXRvbWljPExvY2tUeXBlPi4gWW91IGNv
dWxkIHRoZW4gbWFrZQorICAgICAgICBhbnkgZmllbGQgaW50byBhIGxvY2sgYnkgYml0d2lzZV9j
YXN0aW5nIGl0IHRvIFRlbXBsYXRlTG9jazxmaWVsZCB0eXBlLCBiaXQxLCBiaXQyPi4gQnV0Cisg
ICAgICAgIHRoaXMgZmVsdCB0b28gZGlydHksIHNvIGluc3RlYWQsIExvY2tBbGdvcml0aG0gaGFz
IHN0YXRpYyBtZXRob2RzIHRoYXQgdGFrZQorICAgICAgICBBdG9taWM8TG9ja1R5cGU+JiBhcyB0
aGVpciBmaXJzdCBhcmd1bWVudC4gSSB0aGluayB0aGF0IHRoaXMgbWFrZXMgaXQgbW9yZSBuYXR1
cmFsIHRvCisgICAgICAgIHByb2plY3QgYSBMb2NrQWxnb3JpdGhtIG9udG8gYW4gZXhpc3Rpbmcg
QXRvbWljPD4gZmllbGQuIFNhZGx5LCBzb21lIHBsYWNlcyBoYXZlIHRvIGNhc3QKKyAgICAgICAg
dGhlaXIgbm9uLUF0b21pYzw+IGZpZWxkIHRvIEF0b21pYzw+IGluIG9yZGVyIGZvciB0aGlzIHRv
IHdvcmsuIExpa2Ugc28gbWFueSBvdGhlciB0aGluZ3MKKyAgICAgICAgd2UgZG8sIHRoaXMganVz
dCBzaG93cyB0aGF0IHRoZSBDKysgc3R5bGUgb2YgbGFiZWxpbmcgZmllbGRzIHRoYXQgYXJlIHN1
YmplY3QgdG8gYXRvbWljCisgICAgICAgIG9wcyBhcyBhdG9taWMgaXMgY291bnRlcnByb2R1Y3Rp
dmUuIE1heWJlIHNvbWUgZGF5IEknbGwgY2hhbmdlIExvY2tBbGdvcml0aG0gdG8gdXNlIG91cgor
ICAgICAgICBvdGhlciBBdG9taWNzIEFQSSwgd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBBdG9taWM8
Pi4KKyAgICAgICAgCisgICAgICAgIFdURjo6TG9jayBub3cgdXNlcyBMb2NrQWxnb3JpdGhtLiBU
aGUgc2xvdyBwYXRocyBhcmUgc3RpbGwgb3V0bGluZWQuIEkgZG9uJ3QgZmVlbCB0b28KKyAgICAg
ICAgYmFkIGFib3V0IHRoZSBMb2NrQWxnb3JpdGhtLmggaGVhZGVyIGJlaW5nIGluY2x1ZGVkIGlu
IHNvIG1hbnkgcGxhY2VzIGJlY2F1c2Ugd2UgY2hhbmdlCisgICAgICAgIHRoYXQgYWxnb3JpdGht
IHNvIGluZnJlcXVlbnRseS4KKyAgICAgICAgCisgICAgICAgIEFsc28sIEkgYWRkZWQgYSBoYXNF
bGFwc2VkKHRpbWUpIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGl0IHNvIG11Y2ggbW9y
ZSBuYXR1cmFsCisgICAgICAgIHRvIHdyaXRlIHRpbWVzbGljaW5nIGNvZGUsIHdoaWNoIHRoZSBj
b25jdXJyZW50IEdDIGhhcyB0byBkbyBhIGxvdCBvZi4KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKiB3dGYvTG9jay5jcHA6CisgICAgICAgIChX
VEY6OkxvY2tCYXNlOjpsb2NrU2xvdyk6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjp1bmxvY2tT
bG93KToKKyAgICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3cpOgorICAgICAg
ICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwpOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9Mb2NrLmg6CisgICAgICAgIChXVEY6OkxvY2tCYXNlOjpsb2NrKToKKyAgICAgICAgKFdURjo6
TG9ja0Jhc2U6OnRyeUxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQmFzZTo6dW5sb2NrKToKKyAg
ICAgICAgKFdURjo6TG9ja0Jhc2U6OnVubG9ja0ZhaXJseSk6CisgICAgICAgIChXVEY6OkxvY2tC
YXNlOjppc0hlbGQpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTG9ja0Fs
Z29yaXRobS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6bG9ja0Zhc3RB
c3N1bWluZ1plcm8pOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjpsb2NrRmFzdCk6Cisg
ICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2spOgorICAgICAgICAoV1RGOjpMb2NrQWxn
b3JpdGhtOjp0cnlMb2NrKToKKyAgICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrRmFz
dEFzc3VtaW5nWmVybyk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OnVubG9ja0Zhc3Qp
OgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGhtOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpM
b2NrQWxnb3JpdGhtOjp1bmxvY2tGYWlybHkpOgorICAgICAgICAoV1RGOjpMb2NrQWxnb3JpdGht
Ojppc0xvY2tlZCk6CisgICAgICAgIChXVEY6OkxvY2tBbGdvcml0aG06OmxvY2tTbG93KToKKyAg
ICAgICAgKFdURjo6TG9ja0FsZ29yaXRobTo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL1Rp
bWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHA6CisgICAgICAgIChXVEY6Omhhc0VsYXBzZWQpOgor
ICAgICAgICAqIHd0Zi9UaW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuaDoKKwogMjAxNi0xMS0xMSAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEFs
bG93IG11dGFibGUgbGFtYmRhcyBpbiBIYXNoTWFwOjplbnN1cmUKSW5kZXg6IFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjIs
NiArMjIsNyBAQAogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkwRjBEODVC
NDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
Ki87IH07CisJCTBGMEZDRERFMUREMTY3RjkwMENDQUI1MyAvKiBMb2NrQWxnb3JpdGhtLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBGQ0RERDFERDE2
N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CiAJCTBGMzUw
MTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vh
a1JhbmRvbS5oICovOyB9OwpAQCAtMzc0LDYgKzM3NSw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVS
ZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjBGQ0RERDFERDE2N0Y5MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTMsNiAr
OTU1LDcgQEAKIAkJCQlBOEE0NzJDMTE1MUE4MjVBMDA0MTIzRkYgLyogTGlzdEhhc2hTZXQuaCAq
LywKIAkJCQkwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi8sCiAJCQkJMEZF
MTY0NjkxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suaCAqLywKKwkJCQkwRjBGQ0RERDFERDE2N0Y5
MDBDQ0FCNTMgLyogTG9ja0FsZ29yaXRobS5oICovLAogCQkJCUE4QTQ3MkMzMTUxQTgyNUEwMDQx
MjNGRiAvKiBMb2NrZXIuaCAqLywKIAkJCQk1MTNFMTcwQTFDRDdENUJGMDBFMzY1MEIgLyogTG9n
Z2luZ0FjY3VtdWxhdG9yLmggKi8sCiAJCQkJQThBNDcyQzYxNTFBODI1QTAwNDEyM0ZGIC8qIE1h
aW5UaHJlYWQuY3BwICovLApAQCAtMTMyMyw2ICsxMzI2LDcgQEAKIAkJCQlBOEE0NzM5QjE1MUE4
MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxNTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzQTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0
cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRkNEREUxREQxNjdGOTAwQ0NBQjUzIC8qIExv
Y2tBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzlEMTUxQTgyNUIwMDQxMjNG
RiAvKiBDdXJyZW50VGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczOUYxNTFBODI1QjAw
NDEyM0ZGIC8qIERhdGFMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0ExMTUxQTgyNUIw
MDQxMjNGRiAvKiBEYXRlTWF0aC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw2ICsxMDYsMzYgQEAgc3RydWN0IEF0b21pYyB7CiAgICAgQUxXQVlTX0lOTElORSBU
IGV4Y2hhbmdlWG9yKFUgb3BlcmFuZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1l
bW9yeV9vcmRlcl9zZXFfY3N0KSB7IHJldHVybiB2YWx1ZS5mZXRjaF94b3Iob3BlcmFuZCwgb3Jk
ZXIpOyB9CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBUIGV4Y2hhbmdlKFQgbmV3VmFsdWUsIHN0
ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkgeyByZXR1
cm4gdmFsdWUuZXhjaGFuZ2UobmV3VmFsdWUsIG9yZGVyKTsgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSBib29sIHRyeVRyYW5zYWN0aW9uUmVs
YXhlZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgVCBvbGRWYWx1ZSA9IGxvYWQo
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIFQgbmV3VmFsdWUgPSBvbGRWYWx1
ZTsKKyAgICAgICAgZnVuYyhuZXdWYWx1ZSk7CisgICAgICAgIHJldHVybiBjb21wYXJlRXhjaGFu
Z2VXZWFrUmVsYXhlZChvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHRyYW5zYWN0aW9uUmVsYXhl
ZChjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCF0cnlUcmFuc2F0aW9u
UmVsYXhlZChmdW5jKSkgeyB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4K
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJ5VHJhbnNhY3Rpb24oY29uc3QgRnVuYyYgZnVuYykK
KyAgICB7CisgICAgICAgIFQgb2xkVmFsdWUgPSBsb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4
ZWQpOworICAgICAgICBUIG5ld1ZhbHVlID0gb2xkVmFsdWU7CisgICAgICAgIGZ1bmMobmV3VmFs
dWUpOworICAgICAgICByZXR1cm4gY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgbmV3VmFs
dWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHRyYW5zYWN0aW9uKGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICB3
aGlsZSAoIXRyeVRyYW5zYWN0aW9uKGZ1bmMpKSB7IH0KKyAgICB9CiAKICAgICBzdGQ6OmF0b21p
YzxUPiB2YWx1ZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgSXRlcmF0b3JSYW5nZS5oCiAgICAgTGlz
dEhhc2hTZXQuaAogICAgIExvY2suaAorICAgIExvY2tBbGdvcml0aG0uaAogICAgIExvY2tlci5o
CiAgICAgTUQ1LmgKICAgICBNYWluVGhyZWFkLmgKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3RE
dW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24g
MjA4NjUzKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTc3LDEwICsxNzcsMTEgQEAgTGlzdER1bXBJbkNvbnRleHQ8VCwgVT4gbGlzdER1bXBJbkNvbnRl
eAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bGlzdER1bXA7Ci11c2luZyBXVEY6
OnNvcnRlZExpc3REdW1wOwordXNpbmcgV1RGOjpsaXN0RHVtcEluQ29udGV4dDsKIHVzaW5nIFdU
Rjo6bWFwRHVtcDsKK3VzaW5nIFdURjo6cG9pbnRlckxpc3REdW1wOwordXNpbmcgV1RGOjpzb3J0
ZWRMaXN0RHVtcDsKIHVzaW5nIFdURjo6c29ydGVkTWFwRHVtcDsKLXVzaW5nIFdURjo6bGlzdER1
bXBJbkNvbnRleHQ7CiAKICNlbmRpZiAvLyBMaXN0RHVtcF9oCiAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suY3BwCShyZXZp
c2lvbiAyMDg2NTMpCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTIwICsyNiwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxvY2su
aCIKIAotI2luY2x1ZGUgIkRhdGFMb2cuaCIKLSNpbmNsdWRlICJQYXJraW5nTG90LmgiCi0jaW5j
bHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVz
LmgiCi0jaW5jbHVkZSA8dGhyZWFkPgotCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6bG9j
a1Nsb3coKQordm9pZCBMb2NrQmFzZTo6bG9ja1Nsb3coKQogewotICAgIHVuc2lnbmVkIHNwaW5D
b3VudCA9IDA7Ci0KLSAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0
aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgotICAgIGNvbnN0IHVuc2ln
bmVkIHNwaW5MaW1pdCA9IDQwOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhf
dCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKHZlcmJvc2Up
Ci0gICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2lu
ZyB3aXRoICIsIGN1cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKLQotICAgICAgICAvLyBXZSBhbGxv
dyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCi0gICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpCi0gICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhj
dXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3
ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4K
LSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNv
dW50IDwgc3BpbkxpbWl0KSB7Ci0gICAgICAgICAgICBzcGluQ291bnQrKzsKLSAgICAgICAgICAg
IHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRo
ZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAotICAg
ICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0
dGluZyBpdC4KLSAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkK
LSAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxo
YXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KLSAgICAg
ICAgUGFya2luZ0xvdDo6UGFya1Jlc3VsdCBwYXJrUmVzdWx0ID0KLSAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVsZEJpdCB8IGhhc1BhcmtlZEJpdCk7
Ci0gICAgICAgIGlmIChwYXJrUmVzdWx0Lndhc1VucGFya2VkKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKHN0YXRpY19jYXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgewotICAgICAgICAgICAg
Y2FzZSBEaXJlY3RIYW5kb2ZmOgotICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIHdhcyBuZXZl
ciByZWxlYXNlZC4gSXQgd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSB0aGUgdGhyZWFkIHRo
YXQgZGlkCi0gICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9u
ZSEKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0hlbGQoKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBCYXJnaW5nT3Bwb3J0dW5pdHk6Ci0gICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuIFRoZSB0aHJlYWQgdGhhdCBj
YWxsZWQgdW5sb2NrKCkgaGFzIHJlbGVhc2VkIHRoZSBsb2NrLAotICAgICAgICAgICAgICAgIC8v
IGFuZCB3ZSBoYXZlIGJlZW4gd29rZW4gdXAgc28gdGhhdCB3ZSBtYXkgZ2V0IGFuIG9wcG9ydHVu
aXR5IHRvIGdyYWIgdGhlIGxvY2suIEJ1dAotICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVh
ZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBh
bmQgdHJ5IGFnYWluLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gV2UgaGF2ZSBhd29rZW4sIG9yIHdlIG5ldmVyIHBhcmtlZCBi
ZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXksIHdlIGxvb3AKLSAgICAg
ICAgLy8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCi0gICAgfQorICAgIERlZmF1bHRMb2NrQWxnb3Jp
dGhtOjpsb2NrU2xvdyhtX2J5dGUpOwogfQogCiB2b2lkIExvY2tCYXNlOjp1bmxvY2tTbG93KCkK
IHsKLSAgICB1bmxvY2tTbG93SW1wbChVbmZhaXIpOworICAgIERlZmF1bHRMb2NrQWxnb3JpdGht
Ojp1bmxvY2tTbG93KG1fYnl0ZSwgRGVmYXVsdExvY2tBbGdvcml0aG06OlVuZmFpcik7CiB9CiAK
IHZvaWQgTG9ja0Jhc2U6OnVubG9ja0ZhaXJseVNsb3coKQogewotICAgIHVubG9ja1Nsb3dJbXBs
KEZhaXIpOwotfQotCi1ORVZFUl9JTkxJTkUgdm9pZCBMb2NrQmFzZTo6dW5sb2NrU2xvd0ltcGwo
RmFpcm5lc3MgZmFpcm5lc3MpCi17Ci0gICAgLy8gV2UgY291bGQgZ2V0IGhlcmUgYmVjYXVzZSB0
aGUgd2VhayBDQVMgaW4gdW5sb2NrKCkgZmFpbGVkIHNwdXJpb3VzbHksIG9yIGJlY2F1c2UgdGhl
cmUgaXMKLSAgICAvLyBzb21lb25lIHBhcmtlZC4gU28sIHdlIG5lZWQgYSBDQVMgbG9vcDogZXZl
biBpZiByaWdodCBub3cgdGhlIGxvY2sgaXMganVzdCBoZWxkLCBpdCBjb3VsZAotICAgIC8vIGJl
IGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxvY2sganVzdCBhcyB3ZSBh
cmUgdW5sb2NraW5nLgotICAgIGZvciAoOzspIHsKLSAgICAgICAgdWludDhfdCBvbGRCeXRlVmFs
dWUgPSBtX2J5dGUubG9hZCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRCeXRlVmFsdWUg
PT0gaXNIZWxkQml0IHx8IG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0
KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAob2xkQnl0ZVZhbHVlID09IGlzSGVsZEJpdCkgewot
ICAgICAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBTb21lb25lIGlzIHBhcmtlZC4gVW5wYXJrIGV4YWN0bHkgb25lIHRo
cmVhZC4gV2UgbWF5IGhhbmQgdGhlIGxvY2sgdG8gdGhhdCB0aHJlYWQKLSAgICAgICAgLy8gZGly
ZWN0bHksIG9yIHdlIHdpbGwgdW5sb2NrIHRoZSBsb2NrIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2Ug
dW5wYXJrIHRvIGFsbG93IGZvciBiYXJnaW5nLgotICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywg
d2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0
IHRoZXJlIGFyZSBzdGlsbAotICAgICAgICAvLyBvdGhlciB0aHJlYWRzIHBhcmtlZC4KLSAgICAg
ICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSA9PSAoaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KSk7Ci0g
ICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgKLSAgICAgICAgICAgICZtX2J5dGUsCi0gICAg
ICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IGNhbiBjbGVh
ciBlaXRoZXIgdGhlIGlzSGVsZEJpdCBvciB0aGUgaGFzUGFya2VkQml0LAotICAgICAgICAgICAg
ICAgIC8vIHNvIHdlIHNob3VsZCBzdGlsbCBzZWUgYm90aCBiaXRzIHNldCByaWdodCBub3cuCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKG1fYnl0ZS5sb2FkKCkgPT0gKGlzSGVsZEJpdCB8IGhhc1Bh
cmtlZEJpdCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQu
ZGlkVW5wYXJrVGhyZWFkICYmIChmYWlybmVzcyA9PSBGYWlyIHx8IHJlc3VsdC50aW1lVG9CZUZh
aXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4g
SW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0aGUgdGhyZWFkIHRoYXQgd2FzCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHdhaXRpbmcuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaXJl
Y3RIYW5kb2ZmOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQotICAgICAgICAgICAgICAgICAgICBtX2J5dGUuc3RvcmUo
aGFzUGFya2VkQml0KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IG1fYnl0ZS5zdG9yZSgwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQmFyZ2luZ09wcG9ydHVu
aXR5OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgRGVmYXVs
dExvY2tBbGdvcml0aG06OnVubG9ja1Nsb3cobV9ieXRlLCBEZWZhdWx0TG9ja0FsZ29yaXRobTo6
RmFpcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvTG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkocmV2aXNpb24gMjA4NjUz
KQorKysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3
IEBACiAjaWZuZGVmIFdURl9Mb2NrX2gKICNkZWZpbmUgV1RGX0xvY2tfaAogCi0jaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYv
TG9ja0FsZ29yaXRobS5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIApAQCAtMzcsNiArMzYsOCBAQCBzdHJ1Y3QgTG9ja0luc3BlY3RvcjsK
IAogbmFtZXNwYWNlIFdURiB7CiAKK3R5cGVkZWYgTG9ja0FsZ29yaXRobTx1aW50OF90LCAxLCAy
PiBEZWZhdWx0TG9ja0FsZ29yaXRobTsKKwogLy8gVGhpcyBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11
dGV4IHRoYXQgb25seSByZXF1aXJlcyAxIGJ5dGUgb2Ygc3RvcmFnZS4gSXQgaGFzIGZhc3QgcGF0
aHMgdGhhdCBhcmUKIC8vIGNvbXBldGV0aXZlIHRvIGEgc3BpbmxvY2sgKHVuY29udGVuZGVkIGxv
Y2tpbmcgaXMgaW5saW5lZCBhbmQgaXMganVzdCBhIENBUywgbWljcm9jb250ZW50aW9uIGlzCiAv
LyBoYW5kbGVkIGJ5IHNwaW5uaW5nIGFuZCB5aWVsZGluZyksIGFuZCBhIHNsb3cgcGF0aCB0aGF0
IGlzIGNvbXBldGV0aXZlIHRvIHN0ZDo6bXV0ZXggKGlmIGEgbG9jawpAQCAtNTMsMjMgKzU0LDEz
IEBAIG5hbWVzcGFjZSBXVEYgewogc3RydWN0IExvY2tCYXNlIHsKICAgICB2b2lkIGxvY2soKQog
ICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBp
c0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewotICAgICAgICAgICAgLy8g
TG9jayBhY3F1aXJlZCEKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExvY2tBbGdvcml0aG06
OmxvY2tGYXN0QXNzdW1pbmdaZXJvKG1fYnl0ZSkpKQorICAgICAgICAgICAgbG9ja1Nsb3coKTsK
ICAgICB9CiAKICAgICBib29sIHRyeUxvY2soKQogICAgIHsKLSAgICAgICAgZm9yICg7Oykgewot
ICAgICAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdl
V2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gRGVm
YXVsdExvY2tBbGdvcml0aG06OnRyeUxvY2sobV9ieXRlKTsKICAgICB9CiAKICAgICAvLyBOZWVk
IHRoaXMgdmVyc2lvbiBmb3Igc3RkOjp1bmlxdWVfbG9jay4KQEAgLTg4LDEyICs3OSw4IEBAIHN0
cnVjdCBMb2NrQmFzZSB7CiAgICAgLy8gZ3VhcmFudGVlcyB0aGF0IGxvbmcgY3JpdGljYWwgc2Vj
dGlvbnMgYWx3YXlzIGdldCBhIGZhaXIgbG9jay4KICAgICB2b2lkIHVubG9jaygpCiAgICAgewot
ICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwg
MCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJl
bGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVm
YXVsdExvY2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAg
ICAgICAgICB1bmxvY2tTbG93KCk7CiAgICAgfQogCiAgICAgLy8gVGhpcyBpcyBsaWtlIHVubG9j
aygpIGJ1dCBpdCBndWFyYW50ZWVzIHRoYXQgd2UgdW5sb2NrIHRoZSBsb2NrIGZhaXJseS4gRm9y
IHNob3J0IGNyaXRpY2FsCkBAIC0xMDMsMTcgKzkwLDEzIEBAIHN0cnVjdCBMb2NrQmFzZSB7CiAg
ICAgLy8gd2FudC4KICAgICB2b2lkIHVubG9ja0ZhaXJseSgpCiAgICAgewotICAgICAgICBpZiAo
TElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsZWFzZSkpKSB7Ci0gICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBu
b2JvZHkgd2FzIHdhaXRpbmchCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB1bmxvY2tGYWlybHlTbG93KCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghRGVmYXVsdExv
Y2tBbGdvcml0aG06OnVubG9ja0Zhc3RBc3N1bWluZ1plcm8obV9ieXRlKSkpCisgICAgICAgICAg
ICB1bmxvY2tGYWlybHlTbG93KCk7CiAgICAgfQogCiAgICAgYm9vbCBpc0hlbGQoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpICYgaXNIZWxkQml0OworICAgICAgICByZXR1cm4gRGVmYXVsdExvY2tBbGdvcml0aG06Omlz
TG9ja2VkKG1fYnl0ZSk7CiAgICAgfQogCiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CkBAIC0x
MjYsMjEgKzEwOSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4
X3QgaXNIZWxkQml0ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQg
PSAyOwotCisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgdW5sb2NrRmFpcmx5U2xvdygpOwotICAgIAotICAgIGVudW0gRmFpcm5lc3Mg
ewotICAgICAgICBGYWlyLAotICAgICAgICBVbmZhaXIKLSAgICB9OwotICAgIHZvaWQgdW5sb2Nr
U2xvd0ltcGwoRmFpcm5lc3MpOwotICAgIAotICAgIGVudW0gVG9rZW4gewotICAgICAgICBCYXJn
aW5nT3Bwb3J0dW5pdHksCi0gICAgICAgIERpcmVjdEhhbmRvZmYKLSAgICB9OwogCiAgICAgLy8g
TWV0aG9kIHVzZWQgZm9yIHRlc3Rpbmcgb25seS4KICAgICBib29sIGlzRnVsbHlSZXNldCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Mb2NrQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTG9ja0FsZ29yaXRobS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
VEYvd3RmL0xvY2tBbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgV1RGX0xvY2tBbGdvcml0aG1faAorI2RlZmluZSBXVEZfTG9ja0FsZ29yaXRobV9oCisKKyNp
bmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYv
Q29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworLy8gVGhpcyBpcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgV1RGOjpMb2NrLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMb2NrVHlwZSwgTG9ja1R5cGUgaXNIZWxkQml0LCBMb2NrVHlwZSBoYXNQ
YXJrZWRCaXQ+CitjbGFzcyBMb2NrQWxnb3JpdGhtIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0IExvY2tUeXBlIG1hc2sgPSBpc0hlbGRC
aXQgfCBoYXNQYXJrZWRCaXQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdEFz
c3VtaW5nWmVybyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGxvY2suY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBsb2NrRmFzdChBdG9taWM8
TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgTG9ja1R5cGUgb2xkVmFsdWUgPSBsb2Nr
LmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgIGlmIChvbGRWYWx1ZSAm
IGlzSGVsZEJpdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxv
Y2suY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgfCBpc0hlbGRCaXQsIHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBs
b2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFko
IWxvY2tGYXN0KGxvY2spKSkKKyAgICAgICAgICAgIGxvY2tTbG93KGxvY2spOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCB0cnlMb2NrKEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFs
dWUgPSBsb2NrLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgICAgICAgICBp
ZiAoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAobG9jay5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRC
eXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVy
X2FjcXVpcmUpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgdW5sb2NrRmFzdEFzc3VtaW5nWmVybyhBdG9taWM8TG9ja1R5
cGU+JiBsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4Y2hhbmdlV2Vh
ayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgYm9vbCB1bmxvY2tGYXN0KEF0b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAg
eworICAgICAgICBMb2NrVHlwZSBvbGRWYWx1ZSA9IGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRl
cl9yZWxheGVkKTsKKyAgICAgICAgaWYgKChvbGRWYWx1ZSAmIG1hc2spICE9IGlzSGVsZEJpdCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGxvY2suY29tcGFyZUV4
Y2hhbmdlV2VhayhvbGRWYWx1ZSwgb2xkVmFsdWUgJiB+aXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9v
cmRlcl9yZWxlYXNlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdW5sb2NrKEF0b21p
YzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXVubG9ja0Zh
c3QobG9jaykpKQorICAgICAgICAgICAgdW5sb2NrU2xvdyhsb2NrLCBVbmZhaXIpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCB1bmxvY2tGYWlybHkoQXRvbWljPExvY2tUeXBlPiYgbG9j
aykKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghdW5sb2NrRmFzdChsb2NrKSkpCisgICAg
ICAgICAgICB1bmxvY2tTbG93KGxvY2ssIEZhaXIpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCBpc0xvY2tlZChjb25zdCBBdG9taWM8TG9ja1R5cGU+JiBsb2NrKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGxvY2subG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJp
dDsKKyAgICB9CisgICAgCisgICAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIGxvY2tTbG93KEF0
b21pYzxMb2NrVHlwZT4mIGxvY2spCisgICAgeworICAgICAgICB1bnNpZ25lZCBzcGluQ291bnQg
PSAwOworCisgICAgICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRp
bWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBsb2NrLmxvYWQoKTsKKworICAgICAgICAg
ICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICAgICAgaWYgKCEo
Y3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICAgICAmJiBsb2NrLmNv
bXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlz
SGVsZEJpdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAvLyBJZiB0
aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNh
biBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgICAgIGlmICghKGN1cnJlbnRCeXRl
VmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAg
ICAgICAgICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6
OnlpZWxkKCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJr
ZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAg
ICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRp
bmcgaXQuCisgICAgICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0
KQorICAgICAgICAgICAgICAgICYmICFsb2NrLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5
dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRv
IGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4g
cGFyay4KKyAgICAgICAgICAgIFBhcmtpbmdMb3Q6OlBhcmtSZXN1bHQgcGFya1Jlc3VsdCA9Cisg
ICAgICAgICAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxvY2ssIGN1cnJlbnRC
eXRlVmFsdWUgfCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworICAgICAgICAgICAgaWYgKHBh
cmtSZXN1bHQud2FzVW5wYXJrZWQpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRpY19j
YXN0PFRva2VuPihwYXJrUmVzdWx0LnRva2VuKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRGly
ZWN0SGFuZG9mZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxvY2sgd2FzIG5ldmVyIHJl
bGVhc2VkLiBJdCB3YXMgaGFuZGVkIHRvIHVzIGRpcmVjdGx5IGJ5IHRoZSB0aHJlYWQgdGhhdCBk
aWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdW5sb2NrKCkuIFRoaXMgbWVhbnMgd2UncmUgZG9u
ZSEKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNMb2NrZWQobG9jaykpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY2FzZSBCYXJnaW5n
T3Bwb3J0dW5pdHk6CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNvbW1vbiBj
YXNlLiBUaGUgdGhyZWFkIHRoYXQgY2FsbGVkIHVubG9jaygpIGhhcyByZWxlYXNlZCB0aGUgbG9j
aywKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgYmVlbiB3b2tlbiB1cCBzbyB0
aGF0IHdlIG1heSBnZXQgYW4gb3Bwb3J0dW5pdHkgdG8gZ3JhYiB0aGUgbG9jay4gQnV0CisgICAg
ICAgICAgICAgICAgICAgIC8vIG90aGVyIHRocmVhZHMgbWF5IGJhcmdlLCBzbyB0aGUgYmVzdCB0
aGF0IHdlIGNhbiBkbyBpcyBsb29wIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFdlIGhhdmUgYXdva2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUg
Ynl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgICAgICAvLyBh
cm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIEZh
aXJuZXNzIHsKKyAgICAgICAgRmFpciwKKyAgICAgICAgVW5mYWlyCisgICAgfTsKKyAgICBORVZF
Ul9JTkxJTkUgc3RhdGljIHZvaWQgdW5sb2NrU2xvdyhBdG9taWM8TG9ja1R5cGU+JiBsb2NrLCBG
YWlybmVzcyBmYWlybmVzcykKKyAgICB7CisgICAgICAgIC8vIFdlIGNvdWxkIGdldCBoZXJlIGJl
Y2F1c2UgdGhlIHdlYWsgQ0FTIGluIHVubG9jaygpIGZhaWxlZCBzcHVyaW91c2x5LCBvciBiZWNh
dXNlIHRoZXJlIGlzCisgICAgICAgIC8vIHNvbWVvbmUgcGFya2VkLiBTbywgd2UgbmVlZCBhIENB
UyBsb29wOiBldmVuIGlmIHJpZ2h0IG5vdyB0aGUgbG9jayBpcyBqdXN0IGhlbGQsIGl0IGNvdWxk
CisgICAgICAgIC8vIGJlIGhlbGQgYW5kIHBhcmtlZCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIGxv
Y2sganVzdCBhcyB3ZSBhcmUgdW5sb2NraW5nLgorICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZSA9IGxvY2subG9hZCgpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoCisgICAgICAgICAgICAgICAgKG9sZEJ5dGVWYWx1ZSAmIG1hc2spID09IGlz
SGVsZEJpdAorICAgICAgICAgICAgICAgIHx8IChvbGRCeXRlVmFsdWUgJiBtYXNrKSA9PSAoaXNI
ZWxkQml0IHwgaGFzUGFya2VkQml0KSk7CisgICAgICAgIAorICAgICAgICAgICAgaWYgKChvbGRC
eXRlVmFsdWUgJiBtYXNrKSA9PSBpc0hlbGRCaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9j
ay5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgb2xkQnl0ZVZhbHVlICYgfmlzSGVs
ZEJpdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU29tZW9uZSBpcyBwYXJrZWQu
IFVucGFyayBleGFjdGx5IG9uZSB0aHJlYWQuIFdlIG1heSBoYW5kIHRoZSBsb2NrIHRvIHRoYXQg
dGhyZWFkCisgICAgICAgICAgICAvLyBkaXJlY3RseSwgb3Igd2Ugd2lsbCB1bmxvY2sgdGhlIGxv
Y2sgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSB1bnBhcmsgdG8gYWxsb3cgZm9yIGJhcmdpbmcuCisg
ICAgICAgICAgICAvLyBXaGVuIHdlIHVubG9jaywgd2UgbWF5IGxlYXZlIHRoZSBwYXJrZWQgYml0
IHNldCBpZiB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZXJlIGFyZSBzdGlsbAorICAgICAgICAg
ICAgLy8gb3RoZXIgdGhyZWFkcyBwYXJrZWQuCisgICAgICAgICAgICBBU1NFUlQoKG9sZEJ5dGVW
YWx1ZSAmIG1hc2spID09IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAg
IFBhcmtpbmdMb3Q6OnVucGFya09uZSgKKyAgICAgICAgICAgICAgICAmbG9jaywKKyAgICAgICAg
ICAgICAgICBbJl0gKFBhcmtpbmdMb3Q6OlVucGFya1Jlc3VsdCByZXN1bHQpIC0+IGludHB0cl90
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBjYW4g
Y2xlYXIgZWl0aGVyIHRoZSBpc0hlbGRCaXQgb3IgdGhlIGhhc1BhcmtlZEJpdCwKKyAgICAgICAg
ICAgICAgICAgICAgLy8gc28gd2Ugc2hvdWxkIHN0aWxsIHNlZSBib3RoIGJpdHMgc2V0IHJpZ2h0
IG5vdy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKChsb2NrLmxvYWQoKSAmIG1hc2spID09
IChpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC5kaWRVbnBhcmtUaHJlYWQgJiYgKGZhaXJuZXNzID09IEZh
aXIgfHwgcmVzdWx0LnRpbWVUb0JlRmFpcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IHVubG9jayBhbnl0aGluZy4gSW5zdGVhZCwgd2UgaGFuZCB0aGUgbG9jayB0byB0
aGUgdGhyZWFkIHRoYXQgd2FzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWl0aW5nLgor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERpcmVjdEhhbmRvZmY7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxv
Y2sudHJhbnNhY3Rpb24oCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKExvY2tUeXBlJiB2
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICY9IH5tYXNrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF5SGF2ZU1vcmVUaHJlYWRzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSB8PSBoYXNQYXJrZWRCaXQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJh
cmdpbmdPcHBvcnR1bml0eTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZW51bSBUb2tlbiB7Cisg
ICAgICAgIEJhcmdpbmdPcHBvcnR1bml0eSwKKyAgICAgICAgRGlyZWN0SGFuZG9mZgorICAgIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpMb2NrQWxnb3JpdGhtOwor
CisjZW5kaWYgLy8gV1RGX0xvY2tBbGdvcml0aG1faAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9U
aW1lV2l0aER5bmFtaWNDbG9ja1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHJldmlzaW9uIDIwODY1MykKKysrIFNvdXJj
ZS9XVEYvd3RmL1RpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJDb25kaXRpb24uaCIKICNpbmNsdWRlICJMb2NrLmgi
CiAjaW5jbHVkZSAiUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlIDxjZmxvYXQ+CisjaW5jbHVkZSA8
Y21hdGg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAg
LTEyOCw2ICsxMzEsMTcgQEAgdm9pZCBzbGVlcChjb25zdCBUaW1lV2l0aER5bmFtaWNDbG9ja1R5
cAogICAgIGZha2VDb25kaXRpb24ud2FpdFVudGlsKGZha2VMb2NrLCB0aW1lKTsKIH0KIAorYm9v
bCBoYXNFbGFwc2VkKGNvbnN0IFRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZSYgdGltZSkKK3sKKyAg
ICAvLyBBdm9pZCBkb2luZyBub3coKS4KKyAgICBpZiAoISh0aW1lID4gdGltZS53aXRoU2FtZUNs
b2NrQW5kUmF3U2Vjb25kcygwKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzdGQ6
OmlzaW5mKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiB0aW1lIDw9IHRpbWUubm93V2l0aFNhbWVDbG9jaygp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UaW1l
V2l0aER5bmFtaWNDbG9ja1R5cGUuaAkocmV2aXNpb24gMjA4NjUzKQorKysgU291cmNlL1dURi93
dGYvVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsx
MzQsMTIgQEAgcHJpdmF0ZToKIAogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2xlZXAoY29uc3Qg
VGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CiAKK1dURl9FWFBPUlRfUFJJVkFURSBib29sIGhh
c0VsYXBzZWQoY29uc3QgVGltZVdpdGhEeW5hbWljQ2xvY2tUeXBlJik7CisKIH0gLy8gbmFtZXNw
YWNlIFdURgogCiB1c2luZyBXVEY6OlRpbWVXaXRoRHluYW1pY0Nsb2NrVHlwZTsKK3VzaW5nIFdU
Rjo6aGFzRWxhcHNlZDsKK3VzaW5nIFdURjo6c2xlZXA7CiAKICNlbmRpZiAvLyBXVEZfVGltZVdp
dGhEeW5hbWljQ2xvY2tUeXBlX2gK
</data>
<flag name="review"
          id="317401"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>